Как мне включить CodeIgniter в плагин WordPress?

#php #wordpress #codeigniter #plugins

#php #wordpress #codeigniter #Плагины

Вопрос:

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

Прямо сейчас, в моем плагине, я делаю следующее:
// BEGIN: код плагина 
функция classifieds_template_redirect()
{
 глобальный $wp;
 $plugin_path = plugin_dir_path(__FILE__);
 if (preg_match('/^CI/', $wp-> request)) // Используйте CodeIgniter для обработки запроса
 {
 включить ($plugin_path."/index.php "; // Включить загрузочный файл CodeIgniter 
 die();
 }

}
add_action( 'template_redirect', 'classifieds_template_redirect');
// КОНЕЦ: код плагина

Выдается следующая ошибка:

Неустранимая ошибка: вызов функции-члена item() для не-объекта в /usr/local/apache/htdocs/site.utils/htdocs/CodeIgniter/system/core/Utf8.php в строке 47

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

Есть идеи?

Комментарии:

1. Какие части codeigniter вы хотите использовать для этого плагина WordPress? Это кажется слишком сложным.

2. Я хочу использовать функцию url в codeigniter, которая будет автоматически вызывать контроллер / метод на основе URL… и это будет содержаться в плагине WordPress.

3. Я не знаю, звучит так, как будто вы пытаетесь вставить круглый стержень в квадратное отверстие для меня.

4. Разве WordPress уже не имеет встроенной маршрутизации?

5. я согласен с gclaghorn. звучит так, будто вы хотите заново изобрести колесо.

Ответ №1:

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

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

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

По сути, все, чего мы добьемся, — это ваш код, который вы нам показали, но вместо этого мы заставим Apache сделать это за нас, заставив CodeIgniter запускаться через его bootstrap в глобальной области видимости.

Все, что вам нужно сделать, это добавить дополнительные правила в .htaccess -файл WordPress. Вот так:

 <IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteBase /

        # Here's the code which rewrites the URL to your CodeIgniter 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/... будут передаваться в bootstrap CodeIgniter через глобальную область.

Комментарии:

1. Решение mod-rewrite, упомянутое выше, не решает проблему solve the. Это не включает codeigniter в контексте wordpress. Выполнение решения по перезаписи модов — это так же, как если бы я вообще не запускал WordPress. Решение, которое я ищу, — это то, где я могу работать в WordPress и использовать codeigniter в качестве фреймворка для плагинов.

2. Почему вы показали нам код, в котором говорилось, что тогда вы хотели именно этого? Вам нужно лучше объяснить. Вы хотите использовать движок темы WordPress, а затем запустить функции плагина в теме? А затем использовать плагин для генерации выходных данных функций плагина?