为什么(以及如何?)Get_Header()是否正在擦除我的所有内容?

时间:2017-07-22 作者:Pekka

我有一个page.php 在其中,我定义了要传递到的自定义子菜单header.php.

我试过使用常量(我知道很笨拙):

define("CUSTOM_MENU", "<ul><li>Test</li></ul>");
紧接着,代码包括标题:

get_header();
在标题中。php文件,其中的子菜单是,我输出自定义子菜单(如果设置),或wp_nav_menu:

if (defined("CUSTOM_MENU"))
  echo constant("CUSTOM_MENU");
else
  wp_nav_menu(array(some stuff));
奇怪的是CUSTOM_MENU 常数在瞬间变为空get_header() 被调用-并在剩余的时间内保持为空page.php:

 define("CUSTOM_MENU", "<ul><li>Test</li></ul>");

 echo constant("CUSTOM_MENU"); // The HTML code above

 get_header();

 echo constant("CUSTOM_MENU"); // Null!
对于存储我使用的自定义菜单数据的任何方法,都会发生这种情况。我尝试过:

不同的常量名称,命名空间常量,全局变量,一个带有静态变量的函数,我弄不明白为什么会发生这种情况!如果get_header() 不知怎的包括了标题。php使用http包装器,那么一旦退出,该值就不会被取消设置get_header() 再一次

这是怎么回事?我是否忽视了一些显而易见的事情?

2 个回复
SO网友:Johansson

很可能存在装载顺序问题。这个get_header() 功能不包括header.php 文件,所以我不确定该模板中发生了什么。一种解决方法是使用include() 并检查行为是否相同。

我建议你加入wp_headinit 在这里定义常数。

add_action(\'init\', \'define_my_constant\' );
function define_my_constant() {
    if ( ! defined( \'CUSTOM_MENU\' ) && is_page() ) {
        define(\'CUSTOM_MENU\', \'<ul><li>Test</li></ul>\');
    }
}
init 是WordPress上运行的最早的钩子之一,因此您的常量应该可以在任何主题或插件中访问。

SO网友:birgire

您可以尝试短路wp_nav_menu() 对于给定的theme_location, 在给定页面上:

/**
 * Filters whether to short-circuit the wp_nav_menu() output.
 *
 * Returning a non-null value to the filter will short-circuit
 * wp_nav_menu(), echoing that value if $args->echo is true,
 * returning that value otherwise.
 *
 * @since 3.9.0
 *
 * @see wp_nav_menu()
 *
 * @param string|null $output Nav menu output to short-circuit with. Default null.
 * @param stdClass    $args   An object containing wp_nav_menu() arguments.
 */
$nav_menu = apply_filters( \'pre_wp_nav_menu\', null, $args );

Example:

在这里,我们覆盖导航菜单输出primary 主题位置,用于test 页码:

add_filter( \'pre_wp_nav_menu\', function( $nav_menu, $args )
{
    if ( \'primary\' !== $args->theme_location )
        return $nav_menu;

     if( is_page( \'test\' ) )
        $nav_menu = \'<ul><li>Test</li></ul>\';

    return $nav_menu;
}, 10, 2 );

结束

相关推荐

PHP variables in a post?

我对PHP非常陌生。在Wordpress网站上,我想使用带有Javascript API V3的自定义谷歌地图。一些帖子中会有地图,我想使用PHP变量来确定唯一的位置、缩放级别、信息窗口文本等。Google maps javascript将包含所有样式、地图类型以及地图之间一致的任何内容。因此,对于有地图的帖子,在帖子中写上类似的内容:<?php $location = \"-34.397, 150.644\"; $zoom = \"8\"; ?> &