在当前模板文件之前包括一个文件

时间:2013-07-07 作者:user1983017

我想包括两个文件之前和之后的当前模板。我正在使用template\\u redirect来执行此操作,

但是当我打电话的时候get_current_template() 在…内template_redirect 它不返回任何内容。

有没有办法解决这个问题??

here is my code:

// current template file
add_filter( \'template_include\', \'var_template_include\', 1000 );
function var_template_include( $t ){
    $GLOBALS[\'current_theme_template\'] = basename($t);
    return $t;
}

function get_current_template() {
    if( !isset( $GLOBALS[\'current_theme_template\'] ) )
        return false;
    if( $echo )
        echo $GLOBALS[\'current_theme_template\'];
    else
        return $GLOBALS[\'current_theme_template\'];
}

// use template redirect to include file
add_action(\'template_redirect\', \'ra_template_block\');
function ra_template_block() {
        include_once THEME_DIR.\'/blockstop.php\';
    get_template_part(get_current_template());      
    include_once THEME_DIR.\'/blocks.php\';
    exit;
}
Way I am doing this我想从文件设置页面布局。每次我的模板文件中都需要包含以下标记:

  • get_header()
  • get_footer()
  • get_sidebar()
  • get_template_part(\'right\')
  • get_template_part(\'left\')
因此,如果我可以从特定文件中设置它们,那么我不需要在每个模板文件中都包含它们。

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

template_redirect 在之前运行template_include. 您可以通过以下方式进行演示:

add_filter( \'template_include\', \'var_template_include\', 1000 );
function var_template_include( $t ){
  echo __FUNCTION__;
}
// use template redirect to include file
add_action(\'template_redirect\', \'ra_template_block\');
function ra_template_block() {
  echo __FUNCTION__;  
}
或者你可以看看来源:http://core.trac.wordpress.org/browser/tags/3.5.2/wp-includes/template-loader.php

自从你的代码exits英寸template_redirect 这个global 那个get_current_template 取决于永远不会被设定,即使你没有exit 那就太晚了。

您需要将模板路径传递到template_include 因此,如果您只是将两个过滤器挂接到该挂接上,并给它们一个优先级,以便一个过滤器总是在另一个过滤器之前加载,那么这应该可以工作,至少在设置和检索该过滤器时是这样的global.

// current template file
add_filter( \'template_include\', \'var_template_include\', 1000 );
function var_template_include( $t ){
  var_dump($t);
  $GLOBALS[\'current_theme_template\'] = basename($t);
  return $t;
}

// use template redirect to include file
add_action(\'template_include\', \'ra_template_block\', 1001);
function ra_template_block() {
//     include_once THEME_DIR.\'/blockstop.php\';
    var_dump(get_template_part(get_current_template()));      
//     include_once THEME_DIR.\'/blocks.php\';
    exit;
}
当然,没有真正的理由使用两个过滤器。一个也可以。

结束

相关推荐