在多站点中根据blog_id分配备用单-{cpt}模板

时间:2019-03-19 作者:nickpish

我有一个多站点网络,其中有一些共享的自定义帖子类型,我正在尝试创建一个加载自定义帖子的函数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) 其他地方定义的函数。

如果上述目标不明确,请告知我,并提前感谢您的帮助。

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

实际上,我注意到您的闭包没有捕获/使用正确的$templatetemplate_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\';
}

相关推荐

OOP development and hooks

我目前正在为Wordpress编写我的第一个OOP插件。为了帮助我找到一点结构,a boiler plate 这为我奠定了基础。在里面Main.php 有一种方法可以为管理员加载JS和CSS资产:/** * Register all of the hooks related to the admin area functionality * of the plugin. * * @since 0.1.0 * @access private