如何在WordPress插件中包含CodeIgniter


How do I include CodeIgniter within a WordPress plugin?

我有一个WordPress网站。我正在为WordPress编写一个插件,我想在插件中使用CodeIgniter框架。我遇到了这个问题,因为 CodeIgniter 引导程序文件"index.php"希望在全局范围内运行,而不是在函数内运行。

现在,在我的插件中,我执行以下操作:开始:插件代码函数 classifieds_template_redirect(){  全球$wp;  $plugin_path = plugin_dir_path(__FILE__);  if (preg_match('/^CI/', $wp->request))//使用 CodeIgniter 处理请求  {    包括($plugin_路径。/索引.php"; 包括 CodeIgniter 引导程序文件    死();  }}add_action( 'template_redirect', 'classifieds_template_redirect' );结束:插件代码

引发以下错误:

致命错误:在第 47 行的/usr/local/apache/htdocs/site.utils/htdocs/CodeIgniter/system/core/Utf8.php 中的非对象上调用成员函数 item()

我相信这是由于CodeIgniter期望其引导索引.php文件在全局范围内运行。

有什么想法吗?

以下是您的选择:

  1. 重写以特定标识符开头的URL(使用您的网络服务器),以发送到CodeIgniter的引导程序
  2. 重写 CodeIgniter 的路由样板,以调整为不在全局范围内通过引导程序运行
  3. 在WordPress中使用一个小的MVC插件而不是CodeIgniter

我将介绍第一个,因为我认为如果你要固执地坚持使用CodeIgniter,这是最有意义的。我将给你一些使用Apache作为Web服务器的概念验证代码,并mod_rewrite来完成这个目的。

基本上,我们将实现的只是您向我们展示的代码,但相反,我们将让 Apache 为我们做到这一点,使 CodeIgniter 通过其引导程序在全局范围内运行。

您要做的就是向WordPress .htaccess文件添加更多规则。喜欢这个:

<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/...的请求都将通过全局范围传递给CodeIgniter的引导程序。