Как включить воспламенитель кода в плагин WordPress? - PullRequest
2 голосов
/ 12 мая 2011

У меня есть сайт WordPress.Я пишу плагин для WordPress, где я хочу использовать платформу codeigniter внутри плагина.У меня возникли проблемы с этим, потому что файл начальной загрузки codeigniter "index.php" ожидает запуска в глобальной области, а не в функции.

right now, within my plugin, I do the following: 
// BEGIN: plugin code
function classifieds_template_redirect()
{
  global $wp;
  $plugin_path = plugin_dir_path(__FILE__);
  if (preg_match('/^CI/', $wp->request))  // use codeigniter to handle the request 
  {
    include($plugin_path."/index.php";  // include the codeigniter bootstrap file
    die();
  }

}
add_action( 'template_redirect', 'classifieds_template_redirect' );
// END: plugin code

Выдается следующая ошибка: Fatal error: Call to a member function item() on a non-object in /usr/local/apache/htdocs/site.utils/htdocs/CodeIgniter/system/core/Utf8.php on line 47

Я полагаю, это связано с тем, что CodeIgniter ожидает, что его файл начальной загрузки index.php будет запущен в глобальной области видимости.

Есть идеи?

1 Ответ

1 голос
/ 19 мая 2011

Вот ваши варианты:

  1. Переписать URL-адреса (используя ваш веб-сервер), который начинается с определенного идентификатора для отправки на загрузчик кода воспламенителей
  2. Переписать панель маршрутизации CI для настройкичтобы не запускаться с помощью начальной загрузки через глобальную область действия
  3. Использовать небольшой плагин MVC в Wordpress вместо CI

Я собираюсь охватить первый, потому что я думаю, что он делает большинствосмысл, если вы будете упрямы в том, чтобы придерживаться КИ.И я собираюсь дать вам некоторые доказательства концептуального кода с использованием Apache в качестве веб-сервера и mod_rewrite для достижения этой цели.

По сути, все, чего мы добьемся, - это ваш код, который вы нам показали, но вместо этого мы заставим apache сделать это за нас, заставив запускать CI, хотя он загружается в глобальном масштабе.

Все, что вам нужно сделать, это добавить больше правил в файл wordpress .htaccess.Например:

<IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteBase /

        #Here's the code which rewrites the url to your CI plugin. 
        RewriteRule ^CI/(?.*)$ wp-content/plugins/ci-plugin/index.php/$1 [QSA,L]

        RewriteRule ^index\.php$ - [L]
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule . /index.php [L]

</IfModule>

Теперь весь запрос к www.example.com/CI/... будет передан в начальную загрузку CI через глобальную область видимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...