我有一个多站点网络,其中有一些共享的自定义帖子类型,我正在尝试创建一个加载自定义帖子的函数single-{cpt}
给定帖子类型的模板$blog_id
如果已定义,则返回默认值single-
样板在这种情况下,自定义帖子类型为resource
, 默认为single-resource.php
我正在设置一个变量$custom_resource_single
适用的模板文件名,如下所示:
if ($blog_id == 5) {
$custom_resource_single = \'single-resource-alt.php\';
}
然后,我尝试将此变量传递给中用作回调的函数
template_include
过滤器挂钩如下(从
this thread), 但它不起作用:
function custom_resource_single($custom_resource_single, $template) {
if ( is_singular(\'resource\') && !empty($custom_resource_single) ) {
$custom = locate_template($custom_resource_single);
return $custom;
}
return $template;
}
add_filter( \'template_include\', function() use ($custom_resource_single, $template) { custom_resource_single($custom_resource_single, $template); });
我试图使用一个基于我在这里找到的其他线程的闭包,但我显然没有正确地使用它。我可以通过使用
$blog_id
直接附条件至
template_include
hook,但我真的希望能够传递一个变量(
$custom_resource_single
) 其他地方定义的函数。
如果上述目标不明确,请告知我,并提前感谢您的帮助。
最合适的回答,由SO网友:Sally CJ 整理而成
实际上,我注意到您的闭包没有捕获/使用正确的$template
从template_include
过滤器挂钩:
// This hook is defined in wp-includes/template-loader.php
$template = apply_filters( \'template_include\', $template )
闭包也没有返回模板
因此,您的结束应该如下所示:
add_filter( \'template_include\', function( $template ) use ( $custom_resource_single ) {
return custom_resource_single( $custom_resource_single, $template );
} );
但你可能想通过
$custom_resource_single
通过引用(
use ( &$custom_resource_single )
) 如果在上述关闭后发生变化:
if ( $blog_id == 5 ) {
$custom_resource_single = \'single-resource-alt.php\';
}
add_filter( \'template_include\', function( $template ) use ( &$custom_resource_single ) {
return custom_resource_single( $custom_resource_single, $template );
} );
// $custom_resource_single is changed here.
if ( /* condition */ ) {
$custom_resource_single = \'file.php\';
}