GET_HEADER和HOOK避免正常调用

时间:2015-08-11 作者:Sanne

我想使用自定义标题,如get_header(\'new\')

但由于以下几个原因,我无法轻松修改正在进行调用的模板。(许多文件和相同的代码库部署在几个不同的域上,其中一些域不能加载新的头并使用相同的模板,因此我想在一个位置加载新的头,条件基于域)

有没有什么方法可以让我自己创建一个钩子并使用参数调用header函数,但不调用通常的默认调用?

function new_get_header(){
    get_header(\'new\');
    //die or something
}
add_action(\'get_header\', \'new_get_header\');
感谢您的任何提示。

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

不,不幸的是,你不能那样做,因为get_header( $name ) 没有用于的筛选器$name (它只在操作调用中传递名称)。

但是,如果您愿意修改header.php 每个站点的文件,在文件开头有如下内容:

<?php
if ( apply_filters( \'load_custom_header\', false ) ) {   
    $custom_header = apply_filters( \'get_custom_header\', \'\' );

    if ( \'\' != $custom_header ) {       
        // Get the header that we just received
        // and call the native \'get_header\' function
        // as usual
        get_header( $custom_header );

        // By calling \'return\' we are skipping
        // parsing this template any further        
        return;
    }
}
然后,您可以像这样控制要加载的标题(您可以将此代码放在插件中或functions.php 文件):

// We are hooking to the \'load_custom_header\' filter 
// and return a value of \'true\' meaning that we want to 
// load a custom header
add_filter( \'load_custom_header\', \'__return_true\', 99 );

add_filter( \'get_custom_header\', function( $header ) {
    // Figure out what header you want
    $some_condition = true;

    if ( $some_condition ) {
        $header = \'new\';            
    } 

    return $header;
}, 99 );
明显的优点是,您不必修改所有get_header 来自所有模板的调用:single.php, page.php 等等。您可以在一个地方控制所有这些。

结束

相关推荐

使用Apply_Filters帮助输出POST类

我不熟悉脚本,这是一个插件,我想修改它来输出post类。当我尝试使用时:apply_filters( \'post_class\', $page->post_class ) it仅输出array=\" \". 我是否需要一个附加函数来连接到post类?在我的研究中,我无法判断我的语法是否错误,或者我在类中缺少了一个要“拉”的函数apply_filters 抓住。非常感谢你的帮助。 var $db_fields = array (\'parent\' => \'post_parent\',