使用函数使用自定义模板动态覆盖page.php或single.php

时间:2018-03-06 作者:samjco

我想在插件中添加新的自定义模板(custom-page.php、custom-single.php)。激活后,我想动态使用插件的自定义模板来覆盖主题的模板(page.php,single.php)。

是否有一个功能可以做到这一点?

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

一种方法是向挂钩中添加过滤器{$type}_template.

示例代码:

function my_plugin_custom_template( $template, $type ) {
    switch ( $type ) {
        case \'page\':
            $template = \'/path/to/custom-page-template\';
            break;

        case \'single\':
            $template = \'/path/to/custom-single-template\';
            break;
    }
    return $template;
}
add_filter( \'page_template\', \'my_plugin_custom_template\', 10, 2 );   // Filter for page.php
add_filter( \'single_template\', \'my_plugin_custom_template\', 10, 2 ); // Filter for single.php
或者您也可以将过滤器添加到挂钩template_include.

示例代码:

function my_plugin_custom_template2( $template ) {
    if ( is_page() ) {
        $template = \'/path/to/custom-page-template\';
    }
    elseif ( is_single() ) {
        $template = \'/path/to/custom-single-template\';
    }
    return $template;
}
add_filter( \'template_include\', \'my_plugin_custom_template2\' );
由您决定过滤哪个钩子;然而template_include 过滤器在{$type}_template 钩如果你看看my_plugin_custom_template() 代码,基本上不需要检查当前页面(即查询对象)是否是页面、帖子等。

希望这有帮助。

结束

相关推荐