在laravel站点上加载WordPress内容

时间:2013-09-22 作者:1myb

我不知道为什么我无法在laravel网站上加载wordpress网站。下面的代码,我在没有任何框架的普通php上进行了测试-它可以工作!但是,如果我从laravel框架内的文件调用-它失败了!!

<?php 
define(\'WP_USE_THEMES\', false);     
require(\'./wordpress/wp-blog-header.php\'); 
wp_nav_menu(array(\'theme_location\' => \'primary\',
    \'container\' => false,
    \'menu_class\' => \'menu\',
    \'menu_id\' => \'\',
    \'fallback_cb\' => false
)); 
我不确定是什么问题,下面是错误的跟踪捕获:

array_key_exists() expects parameter 2 to be array, null given

function mo_get_theme_option($option_id, $default = null, $single = true) {
    global $mo_theme;
    global $options_cache;

    if (array_key_exists($option_id, $options_cache))
        return $options_cache[$option_id];

1 个回复
最合适的回答,由SO网友:gmazzap 整理而成

您尝试这样做只是为了在Lavarel站点上输出WP菜单?

在这种情况下,您正在加载所有WordPress环境(主题、插件、选项…)只是为了菜单。在我看来,这不是一件好事。

也许,最优雅的方法应该是在Laravel中为相关的WP表创建雄辩的模型,一个控制器一个视图来输出菜单。所有这些都使用Laravel代码,这样就不需要加载WP。。当然,您可以从WP core复制代码,并在Laravel中进行翻译。。。

Laravel很适合把事情复杂化,但我知道这可能需要做很多工作,而不仅仅是包含。。。

因此,为了不写出离题的答案,I\'ll suggest you another approach.

In the WordPress root folder, create a subfolder named, e.g. \'tmp\'.

此文件夹是一种从WP到Lavarel的exchange文件夹。确保WordPress可以在此文件夹中写入文件。

之后,在functions.php WordPress中活动主题的

add_action(\'load-nav-menus.php\', \'go_cache_menu\');

function go_cache_menu() {
  add_action(\'shutdown\', \'cache_menu\');
}

function cache_menu() {
    $filename = trailingslashit(ABSPATH) . \'/tmp/primary-menu.inc\';
    $content = wp_nav_menu( array(
      \'theme_location\' => \'primary\',
      \'container\' => false,
      \'menu_class\' => \'menu\',
      \'menu_id\' => \'\',
      \'fallback_cb\' => false,
      \'echo\'  => false
    )); 
    file_put_contents ( $filename , $content );
}
此代码在访问nav菜单页面时,在tmp 文件夹,命名primary-menu.inc 包含您的菜单。更新菜单时,该文件将被更新。

之后,在Laravel中,您可以检索此文件的内容,如下所示:

$path = \'./wordpress/tmp/primary-menu.inc\';
$menu_content = @file_get_contents($path) ? : \'\';
然后通过$menu_content 到Lavarel视图以显示它。。。在不加载WordPress的情况下,您的Lavarel站点的性能将大大提高!(如果使用刀片模板,菜单内容也将自动缓存…)

结束

相关推荐

有什么办法可以重写wooCommerce-template.php吗?

我正在尝试对woocommerce模板进行一些自定义。php文件,但我担心它会在下次更新时被覆盖。我想知道是否有一种方法可以从函数重写函数。php和另一个加载我的自定义文件。这是woocommerce中的功能:public function include_template_functions() { include_once( \'woocommerce-template.php\' ); } 我想知道是否有一种方法可以覆盖它,或者其他方法可以覆盖它。