您尝试这样做只是为了在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站点的性能将大大提高!(如果使用刀片模板,菜单内容也将自动缓存…)