如果WordPress是使用单独的PHP脚本从WordPress主文件外部加载的,该脚本包括wp-load.php
然后/template-loader.php
不会加载文件,因此template_redirect
不会触发操作。
这很重要,因为template_redirect
是如何在前端初始化工具栏。查看default-filters.php
我们可以看到工具栏的初始化位置:
...
// Admin Bar
// Don\'t remove. Wrong way to disable.
add_action( \'template_redirect\', \'_wp_admin_bar_init\', 0 ); // <-- initialize Toolbar
add_action( \'admin_init\', \'_wp_admin_bar_init\' ); // <-- initialize Toolbar
add_action( \'before_signup_header\', \'_wp_admin_bar_init\' ); // <-- initialize Toolbar
add_action( \'activate_header\', \'_wp_admin_bar_init\' ); // <-- initialize Toolbar
add_action( \'wp_footer\', \'wp_admin_bar_render\', 1000 );
add_action( \'in_admin_header\', \'wp_admin_bar_render\', 0 );
...
可以通过插件或主题添加一个函数来触发工具栏的初始化:
function wpse240134_wp_admin_bar_init() {
_wp_admin_bar_init();
}
add_action( \'init\', \'wpse240134_wp_admin_bar_init\' );
请注意
_wp_admin_bar_init()
被认为是WordPress的内部功能,因此使用它的风险自负
还值得注意的是,如果WordPress是通过以下方式从外部PHP文件加载的wp-blog-header.php
以及WP_USE_THEMES
常量设置为false
, 这个template_redirect
钩子不会再次被激发,所以wpse240134_wp_admin_bar_init()
上述函数可用于在以下情况下显示管理栏WP_USE_THEMES
设置为false
:
<?php
/**
* Demonstration of loading WordPress from an external PHP file.
*
*/
define(\'WP_USE_THEMES\', false);
// https://wordpress.stackexchange.com/questions/47049/what-is-the-correct-way-to-use-wordpress-functions-outside-wordpress-files
//require (\'./wp-load.php\');
require (\'./wp-blog-header.php\');
?><!DOCTYPE html>
<html class="no-js" <?php language_attributes(); ?>>
<head>
<meta charset="<?php bloginfo( \'charset\' ); ?>">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="profile" href="http://gmpg.org/xfn/11">
<link rel="pingback" href="<?php bloginfo( \'pingback_url\' ); ?>">
<?php wp_head(); ?>
</head>
<body id="body" <?php body_class(); ?>>
<div id="page" class="site">
<header id="header" class="site-header"></header>
<div id="content" class="site-content">
<h1>Test of loading WordPress from external PHP file</h1>
</div>
<footer id="footer" class="site-footer"></footer>
</div>
<?php wp_footer(); ?>
</body>
</html>
有关使用外部PHP文件加载WP的更多详细信息:
What is the correct way to use wordpress functions outside wordpress files?