有什么方法可以更改默认页面模板选择吗?

时间:2015-07-31 作者:gdaniel

点击;“页码”-&燃气轮机;点击;添加新的“;

在添加新页面屏幕中。选择的默认页面模板为;默认模板;。有没有办法将默认选项更改为,比如;我的其他模板;。所以当我点击;添加新的“"E;“我的其他模板”;默认情况下将始终选中?这需要在保存页面之前完成。我可以用JS来完成这一点。是否有WP选项?

UPDATE:

下面是一个示例:

模板选项:

默认模板(自动选择)“我的模板1”是否有WordPress方法更改为:

默认模板(自动选择)我的模板1

if (some condition is met)
 default_template = My Template 1
endif
我知道模板层次结构是如何工作的。我知道如何使我的模板始终用于某些页面。但这不是问题所在。我只是想让最终用户更容易使用,以便在某些条件下我可以预先选择模板,该模板应该在一组页面上使用,但仍然可以让用户在需要时灵活地切换回另一个模板。

5 个回复
SO网友:Adrian B

使用template_include (正如布拉德·道尔顿所建议的那样)编辑页面时,只在前端更改页面模板,而不在管理中更改。

另一方面,在渲染元盒之前更改post对象中的值,正如Czersplace所建议的那样,非常有效!我添加了一个检查,以仅在以下情况下应用此$post->page_template 未设置,如下所示:

function wpse196289_default_page_template() {
    global $post;
    if ( \'page\' == $post->post_type 
        && 0 != count( get_page_templates( $post ) ) 
        && get_option( \'page_for_posts\' ) != $post->ID // Not the page for listing posts
        && \'\' == $post->page_template // Only when page_template is not set
    ) {
        $post->page_template = "page-mytemplate.php";
    }
}
add_action(\'add_meta_boxes\', \'wpse196289_default_page_template\', 1);

SO网友:czerspalace

我还没有对此进行测试,但它可能会起作用。模板是根据全局post对象中的值选择的,因此我们需要在渲染元盒之前更改post对象中的值。选择默认下拉列表的代码如下:https://core.trac.wordpress.org/browser/trunk/src/wp-admin/includes/meta-boxes.php#L751

add_action(\'add_meta_boxes\', \'wpse196289_default_page_template\', 1);

function wpse196289_default_page_template() {
    global $post;
    if ( \'page\' == $post->post_type && 0 != count( get_page_templates( $post ) ) && get_option( \'page_for_posts\' ) != $post->ID ) {
         if( $my_conditions )
             $post->page_template = "page-mytemplate.php";
    }
}

SO网友:Ben Matthews

我发现,没有黑客代码的最简单方法是创建一个单独的页面。php(远离您的page\\u template-name.php文件)并获取\\u template\\u part()重定向到您的模板文件。然后,这将在整个站点中提供默认模板,并将模板作为一个离散选项保留。

<?php get_template_part(\'page_template-name\'); ?>
这就是页面中需要存在的全部内容。php文件。它只是获取默认模板。如果您想在整个站点范围内更改模板,那么只需更改slug即可。任何选择了默认选项的页面都将更改。任何专门设置为使用模板的页面(即设置为模板-1而不是默认页面)都不会更改。

SO网友:Przemek Maczewski

我在新的block editor (古腾堡)。

这项任务需要一个挂钩REST API response 在这种情况下。

我从Adrian\'s 答复

foreach ( array( \'page\', \'post\' ) as $post_type ) :
    add_filter( "rest_prepare_{$post_type}", \'wpse196289_rest_set_default_page_template\', 1, 2 );
endforeach;

function wpse196289_rest_set_default_page_template( $data, $post ) {
    if ( 0 != count( get_page_templates( $post ) ) && get_option( \'page_for_posts\' ) != $post->ID && \'\' == $data->data[\'template\'] ) :
        $data->data[\'template\'] = \'page-mytemplate.php\';
    endif;

    return $data;
}

SO网友:Brad Dalton

使用template_include 在函数文件中使用条件标记。

add_filter( \'template_include\', \'default_page_template\', 99 );

function default_page_template( $template ) {

    if ( is_singular( \'page\' )  ) {
        $default_template = locate_template( array( \'default-page-template.php\' ) );
        if ( \'\' != $default_template ) {
            return $default_template ;
        }
    }

    return $template;
}

结束

相关推荐

Custom templates vs page-slug

我目前一直在使用slug来设置页面模板,使用普通的层次结构例如,如果我想更改的页面模板http://www.example.com/about-us, 我会编辑关于我们的页面。php如果客户端要去更改页面slug,它将不再加载正确的模板。在WordPress后端使用“自定义模板”下拉列表是否更好?就这一点而言,最佳做法是什么?非常感谢