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 自从你的代码exit
s英寸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;
}
当然,没有真正的理由使用两个过滤器。一个也可以。