一种使用默认页面模板的主题独立插件

时间:2016-06-08 作者:Gijs

我正在尝试构建一个可以在每个主题中使用的插件。它使用了一个自定义的帖子类型,我使用了动作挂钩来更改内容,所以我可以使用额外的元字段等等。这里也解释了:How to make my plugin theme-independent?.

Problem:
它正在工作,但问题是它使用默认值post 活动主题中的模板。他们经常有很多元的东西,我不想这样。在插件文件夹中创建自定义模板不会有帮助,因为每个主题都是不同的。

Possible solution:
使用默认值page 主题的模板。但我如何才能做到这一点?

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

使用默认页面模板与使用单个帖子模板存在相同的问题。的确,通常页面tempaltes没有发布作者、日期等信息,但这完全取决于主题开发人员。即使there are themes without page templates.

但是,如果您想强制使用自定义帖子的默认页面模板,您可以这样做(当然,只有在活动主题中存在page.php时):

add_filter( \'template_include\', \'cyb_set_template\' );
function cyb_set_template( $template ) {

    if ( is_singular( \'yourcpt\' )  ) {
        $page_template = locate_template( array( \'page.php\' ) );
        if ( \'\' != $page_template ) {
            return $page_template;
        }
    }

    return $template;
}
请注意,此中断WordPress模板层次结构。没有主题可以使用单个yourcpt。php为自定义帖子类型构建自定义模板。此外,主题所需的唯一模板是索引。php和主题只能使用索引。php模板文件。

下一段代码可以通过查找单个yourcpt来解决这个问题。首先是php文件,主题页。php,单个。php和最终索引。php(未测试代码):

add_filter( \'template_include\', \'cyb_set_template\' );
function cyb_set_template( $template ) {

    if ( is_singular( \'yourcpt\' )  ) {
        // Try to locate single-youprcpt.php first,
        // then page.ph
        $page_template = locate_template( array( \'single-yourcpt.php\', \'page.php\', \'single.php\', \'index.php\' ) );
        if ( \'\' != $page_template ) {
            return $page_template;
        }
    }

    return $template;
}

相关推荐