如何在wordpress插件中包含代码点火器?

时间:2011-05-11 23:52:41

标签: php wordpress codeigniter plugins

我有一个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文件在全局范围内运行。

任何想法?

1 个答案:

答案 0 :(得分:1)

以下是您的选择:

  1. 重写网址(使用您的网络服务器),以某个标识符开头,以便发送给Code igniters bootstrap
  2. 重写CI的路由锅炉板以调整为不通过全局范围内的引导程序运行
  3. 在Wordpress中使用小型mvc插件而不是CI
  4. 我将覆盖第一个,因为我认为如果你对坚持使用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在全局范围内的引导程序。