Zend framework 我可以将Zend Framework支持的web应用程序集成到wordpress站点中吗?

Zend framework 我可以将Zend Framework支持的web应用程序集成到wordpress站点中吗?,zend-framework,wordpress,Zend Framework,Wordpress,我有一个项目,我希望能够在一个页面上调用wp_list_pages(),该页面还使用Zend框架来支持一些复杂的界面,管理wordpress之外的自定义数据 如果用户尚未以适当的授权级别登录,则此页面还应将用户重定向到wordpress登录屏幕 这在高层次上是如何工作的,即我是否需要编辑wordpress引导文件,根据特定URL或其他内容有条件地实现自定义接口,但仍然包括某些文件,以便能够在该自定义接口上调用wp_list_pages()。我开发了几个wordpress插件,我发现它很容易扩展。

我有一个项目,我希望能够在一个页面上调用wp_list_pages(),该页面还使用Zend框架来支持一些复杂的界面,管理wordpress之外的自定义数据

如果用户尚未以适当的授权级别登录,则此页面还应将用户重定向到wordpress登录屏幕


这在高层次上是如何工作的,即我是否需要编辑wordpress引导文件,根据特定URL或其他内容有条件地实现自定义接口,但仍然包括某些文件,以便能够在该自定义接口上调用wp_list_pages()。

我开发了几个wordpress插件,我发现它很容易扩展。但我没有和Zend合作过

您应该检查WordPress插件api。主要是关于动作、过滤器和挂钩的部分:

您甚至可以重写某些函数(不确定
wp\u list\u pages()
是否可重写)

它有很好的文档记录,并且在IRC、论坛等上有一个大型的开发者社区支持它。

谢谢Fernando

我刚刚读到一篇文章,其中建议您可以在任何脚本中使用Zend,只需包括:

require_once('Zend/Loader.php');
Zend_Loader::registerAutoload();
因此,考虑到我只需要在一个页面上使用Zend for,我是否可以将该代码包含在自定义模板文件中,并将其分配给导航中的相应页面?如果我使用javascript通过XHR提交表单,请求的URL将采用“/controller/action”格式,但Zend不知道控制器目录


我是否可以将Zend代码放入wordpress引导程序,即上面的代码加上frontController配置,然后在任何地方使用Zend?

我想你可以这样做,只需将框架导入到你需要的页面中即可。我不知道Zend是如何工作的,但请检查路径,确定将目录放在何处,以便Zend找到它们。正如我所说的,我想你可以这样做,只要尝试一下并告诉我们它是如何工作的


当心函数和/或变量的名称冲突,这对WordPress和Zend等流行产品来说应该不是什么大问题。。。(理论上应该是很好的编码)

因此我在Wordpress中创建了一个页面,并为该页面创建了一个自定义模板,其中我放置了以下Zend Framework代码:

require_once('Zend/Loader.php');
Zend_Loader::registerAutoload();

$db = Zend_Db::factory('Pdo_Mysql', array(
    'host'      => 'localhost',
    'username'  => 'username',
    'password'  => 'password',
    'dbname'    => 'dbname'
));
Zend_Db_Table::setDefaultAdapter($db);

class Users extends Zend_Db_Table_Abstract {
    protected $_name = 'wp_users';
}

$users = new Users();
$users = $users->fetchAll()->toArray();

print_r($users[0]['user_login']);
这一切都很好,所以至少在某种程度上,将Zend与Wordpress结合使用显然是可能的

很明显,问题在于谁控制URL重写、路由或引导(不确定正确的术语)。如果我要结束上面的代码,开始$users=newusers();,进入控制器,如下所示:

class UsersController extends Zend_Controller_Action {
    function getUserAction() {
        $this->_helper->viewRenderer->setNoRender();

        $users = new Users();
        $users = $users->fetchAll()->toArray();

        echo $users[0]['user_login'];
    }
}
那么我该如何调用该函数呢?我的意图是通过XHR请求从javascript调用它,以响应页面上的事件,但请求URL“index.php/Users/getUser/”会返回“未选择输入文件”。尝试访问URL会生成Wordpress 404页面


有办法解决这个问题吗?当然,它不仅仅适用于wordpress——我希望它适用于任何通过引导重写/路由请求的现有应用程序。

我为wordpress构建了一个插件,该插件的目标与您的类似,但更多的是以CodeIgniter为模型。我不太了解Zend,我认为这应该有帮助:

使用以下代码在插件目录中创建一个名为routes.php的文件:

add_action( 'init', 'add_custom_urls' );

function add_custom_urls(){
    global $wp, $wp_rewrite;

    $wp_rewrite->add_rule( '(.*)$', 'index.php?&cPath=$matches[1]', 'top' );
    $wp->add_query_var( 'cPath' );
}
add_action( 'template_redirect', 'bootstrap' );

function bootstrap(){
    global $cPath;
    echo( "cPath : $cPath" );
    if( $cPath ){
        dosomethingwith( $cPath ); 
    }
}
确保在你的管理员中激活这两个插件。这两个文件将允许您在Wordpress试图找出如何处理url之前捕获url。您可以使用正则表达式更好地控制要捕获的页面。您可能必须先删除_optionsdb表中的记录,其中
option_name
=“重写规则”,然后才能执行此操作

接下来,使用以下代码制作另一个插件:

add_action( 'init', 'add_custom_urls' );

function add_custom_urls(){
    global $wp, $wp_rewrite;

    $wp_rewrite->add_rule( '(.*)$', 'index.php?&cPath=$matches[1]', 'top' );
    $wp->add_query_var( 'cPath' );
}
add_action( 'template_redirect', 'bootstrap' );

function bootstrap(){
    global $cPath;
    echo( "cPath : $cPath" );
    if( $cPath ){
        dosomethingwith( $cPath ); 
    }
}

将所有代码放入dosomethingwith()函数中。您需要弄清楚请求的url是否可以映射到zend控制器等。如果成功,您可能还想死(),因此一旦完成,Wordpress将不再尝试接管

我想您可以这样做,只需将框架导入到您需要的页面中即可。我不知道Zend是如何工作的,但请检查路径,确定将目录放在何处,以便Zend找到它们。正如我所说的,我想你可以这样做,只要尝试一下并告诉我们它是如何工作的


当心函数和/或变量的名称冲突,这对WordPress和Zend等流行产品来说应该不是什么大问题。。。(理论上应该是很好的编码)

我目前正在做这件事,需要一个解决方案,所以我完成后会把它贴在这里。