我有一个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期望其bootstrap index.php文件在全局范围内运行。
任何想法?
答案 0 :(得分:1)
以下是您的选择:
我将覆盖第一个,因为我认为如果你对坚持使用CI会很顽固,这是最有意义的。我将使用Apache作为webserver和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在全局范围内的引导程序。