#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:
Вот ваши варианты:
- Перепишите URL-адреса (используя ваш веб-сервер), которые начинаются с определенного идентификатора, для отправки в загрузчик CodeIgniter
- Перепишите модуль маршрутизации CodeIgniter, чтобы он не запускался через bootstrap в глобальной области видимости
- Используйте небольшой плагин 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, а затем запустить функции плагина в теме? А затем использовать плагин для генерации выходных данных функций плагина?