是否使用插件创建自定义页面模板?

时间:2010-10-28 作者:jnthnclrk

是否可以通过插件提供自定义页面模板?

4 个回复
最合适的回答,由SO网友:Jan Fabry 整理而成

get_page_template() 可以通过page_template 滤器如果您的插件是一个目录,其中包含作为文件的模板,那么只需传递这些文件的名称即可。如果要“动态”创建它们(在管理区域中编辑它们并将其保存在数据库中?),您可能希望将它们写入缓存目录并引用它们,或者挂接到template_redirect 做些疯狂的事eval() 东西

一个简单的插件示例,如果某个标准为true,该插件将“重定向”到同一插件目录中的文件:

add_filter( \'page_template\', \'wpa3396_page_template\' );
function wpa3396_page_template( $page_template )
{
    if ( is_page( \'my-custom-page-slug\' ) ) {
        $page_template = dirname( __FILE__ ) . \'/custom-page-template.php\';
    }
    return $page_template;
}

SO网友:fireydude

最重要的get_page_template() 只是一个快速的破解。它不允许从管理屏幕中选择模板,页面段塞被硬编码到插件中,因此用户无法知道模板来自何处。

The preferred solution 将遵循this tutorial 它允许您在插件的后端注册页面模板。然后它就像其他模板一样工作。

 /*
 * Initializes the plugin by setting filters and administration functions.
 */
private function __construct() {
        $this->templates = array();

        // Add a filter to the attributes metabox to inject template into the cache.
        add_filter(\'page_attributes_dropdown_pages_args\',
            array( $this, \'register_project_templates\' ) 
        );

        // Add a filter to the save post to inject out template into the page cache
        add_filter(\'wp_insert_post_data\', 
            array( $this, \'register_project_templates\' ) 
        );

        // Add a filter to the template include to determine if the page has our 
        // template assigned and return it\'s path
        add_filter(\'template_include\', 
            array( $this, \'view_project_template\') 
        );

        // Add your templates to this array.
        $this->templates = array(
                \'goodtobebad-template.php\'     => \'It\\\'s Good to Be Bad\',
        );
}

SO网友:Dessauges Antoine

之前的答案都不适合我。在这里,您可以在Wordpress admin中选择模板。只需将其放在主php插件文件中并更改template-configurator.php 按模板名称

//Load template from specific page
add_filter( \'page_template\', \'wpa3396_page_template\' );
function wpa3396_page_template( $page_template ){

    if ( get_page_template_slug() == \'template-configurator.php\' ) {
        $page_template = dirname( __FILE__ ) . \'/template-configurator.php\';
    }
    return $page_template;
}

/**
 * Add "Custom" template to page attirbute template section.
 */
add_filter( \'theme_page_templates\', \'wpse_288589_add_template_to_select\', 10, 4 );
function wpse_288589_add_template_to_select( $post_templates, $wp_theme, $post, $post_type ) {

    // Add custom template named template-custom.php to select dropdown 
    $post_templates[\'template-configurator.php\'] = __(\'Configurator\');

    return $post_templates;
}

SO网友:Ari

是的,这是可能的。我找到了这个example plugin 非常有帮助。

我脑海中浮现的另一种方法是WP Filesystem API 创建要主题的模板文件。我不确定这是最好的方法,但我相信它是有效的!

结束

相关推荐

How do you debug plugins?

我对插件创作还很陌生,调试也很困难。我用了很多echo,它又脏又丑。我确信有更好的方法可以做到这一点,也许是一个带有调试器的IDE,我可以在其中运行整个站点,包括插件?