是否为所有页面设置页面模板?

时间:2012-01-25 作者:AlxVallejo

我知道页面模板在wpdb中设置为meta\\u key=\\u wp\\u page\\u template和meta\\u value=template。php。

如何编写SQL脚本,将post\\u type=“page”的每篇文章设置为特定模板?

EDIT: 基于下面的评论,我将添加我希望“规范化”我的页面的细节,因为有些页面设置为自定义模板。

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

EDIT 正如在对您的问题的评论中所指出的,最好的方法就是编辑您的page.php 文件如果您希望所有页面都具有相同的页面模板,而不需要做任何额外的设置,那么很明显这是一个好主意

然后,可以为不使用默认页面模板的页面创建自定义页面模板。这几乎就是这个系统的目的!

如果你坚持:

每个页面的页面模板实际上存储为一个自定义字段,您可以循环代码中的每个帖子并以这种方式设置页面模板,而不是在数据库中手动执行。见下文:

add_action( \'admin_init\', \'set_page_templates\' );

function set_page_templates(){

    foreach( get_posts(\'post_type=page&posts_per_page=-1\') as $page ) {
        $current_template = get_post_meta( $page->ID, \'_wp_page_template\', true );
        $new_template = \'new_template.php\';

        if( $current_template != $new_template )
            update_post_meta( $page->ID, \'_wp_page_template\', $new_template );
    }

}
可能会有更好的操作来启用它,因为它将在每次加载管理页面时运行。也许您可以运行一次,然后删除代码,这样应该可以很好地工作。或者,您可以将其挂在save_post 如果页面模板不是您在保存帖子或页面时想要的,则自动更改页面模板的操作(实际上将返回您作为函数参数之一保存的页面ID)(当然跳过foreach 在这种情况下)。

SO网友:S. Ebeltjes

无需编辑php文件中的任何硬编码内容,只需一个简单的SQL查询即可完成所有操作,可以在phpMyAdmin中执行:

UPDATE wp_postmeta
SET meta_value = \'default\'
WHERE meta_key = \'_wp_page_template\';
希望它可以帮助一些人!

SO网友:Milo

设置模板的另一个选项是通过template filters. 您可以在指定的任何条件下添加自己的逻辑来强制特定模板。

function wpd_page_template_filter( $templates = \'\' ) {

    // the passed $templates contains a single or array of templates that apply to this query

    // get queried page object
    $this_page = get_queried_object();

    // check $this_page meta key, check slug, check parent, etc..

    return locate_template( \'my-custom-template.php\' );
}
add_filter( \'page_template\', \'wpd_page_template_filter\' );

结束

相关推荐

MySQL查询按后置条件选择帖子

我有两种自定义的帖子类型,类型1和类型2类型2帖子有一个名为postID的postETA,这是类型1中帖子的ID号。当以单键显示类型1时。php我想要一个mysql查询来选择类型2。我仅有的数据是type1的ID号。因此,我必须从Posteta中选择,其中meta\\u键=postID,meta\\u值=type1ID。然后我需要使用该行的post\\u ID从wp\\u posts中选择post。我不擅长形成mysql查询,那么有没有一个查询可以做到这一点?