创建与页面相同的自定义帖子类型模板

时间:2013-10-12 作者:user_bolczan

我正在使用自定义帖子类型创建我的第一个自定义主题,我遇到了一个问题。我想制作一些你可以制作的页面模板(即page-fullwidth.php page-noslider.php等),我知道你是否想制作定制帖子类型的模板,比如单烹饪食谱。php,但我想制作单幅烹饪食谱。php等。

我已经创建了2个这样的文件并添加了

<?php
/*
Template Name: Art
*/
 ?>
还是没有运气:(

3 个回复
SO网友:s_ha_dum

听起来您正在谈论此页面显示模板:

page-{slug}.php - 如果页段塞为recent-news, WordPress将使用page-recent-news.php

你想要single-{cpt-slug}-{slug}.php.

如果是这样,我相信您可以使用以下方法近似处理该页面模板:

function cpt_slug_template_wpse_117630($template) {
  global $post;

  $templ = locate_template(\'single-\'.$post->post_type.\'-\'.$post->post_name.\'.php\');
  if (
    \'book\' == $post->post_type 
    && \'poem\' == $post->post_name
    &&  !empty($templ)) {
      $template = get_stylesheet_directory().\'/single-\'.$post->post_type.\'-\'.$post->post_name.\'.php\';
  }

  return $template;
}
add_filter(\'single_template\',\'cpt_slug_template_wpse_117630\');

SO网友:TheDeveloper

自定义帖子类型可以有页面等模板选项,但有点复杂,但我将尝试解释一下:

1) you need to register a new meta box with a drop down (custom meta field) of all the templates:

function register_post_cookingrecipes() {
    add_meta_box(\'cookingrecipes-details\', __(\'Template Details\'), \'add_cookingrecipes_meta_box\', \'cookingrecipes\', \'side\', \'high\');

    if ((\'delete_posts\'))
        add_action(\'delete_post\', \'delete_meta_cookingrecipes\', 10);
}

add_action(\'admin_init\', \'register_post_cookingrecipes\', 1);

function add_cookingrecipes_meta_box($post) {
        $page_template = get_post_meta($post->ID, \'_wp_page_template\', TRUE);
        ?>
        <label for="page_template"><?php _e(\'Template\') ?>: </label><br/> 
        <select style="width:100%" name="page_template" id="page_template">
            <option value=\'single-cookingrecipes.php\'><?php _e(\'Default\'); ?></option>
            <option  <?php if ($page_template === \'single-cookingrecipes-fullwidth.php\') echo \'selected="selected"\'; ?> value=\'single-cookingrecipes-fullwidth.php\'>full width</option>
        </select>   

     <?php
 }

2) Save/Delete the content of the new meta field when the post saved.

function save_cookingrecipes_meta($post_id) {
    $post = $_POST[\'post_type\'];
    if (defined(\'DOING_AUTOSAVE\') && DOING_AUTOSAVE)
        return;
    if (!current_user_can(\'edit_page\', $post_id))
        return;

    switch ($post) {
        case \'cookingrecipes\':
            $page_template = $_POST[\'page_template\'];
            if (!empty($page_template))
                update_post_meta($post_id, \'_wp_page_template\', $page_template);
            break;

        default:
            return;
    }
}

add_action(\'save_post\', \'save_cookingrecipes_meta\');


function delete_meta_cookingrecipes($post_id) {
    $post = $_POST[\'post_type\'];
    switch ($post) {
        case \'cookingrecipes\':
            delete_post_meta($post_id, \'_wp_page_template\');
            break;
        default:
            return;
    }
}

3) The key part for loading the custom template you created is here

function cookingrecipes_template_redirect() {
    global $post;
    $queried_post_type = get_query_var(\'post_type\');
    if (is_single() && \'cookingrecipes\' == $queried_post_type) {
        $page_template = get_post_meta($post->ID, \'_wp_page_template\', TRUE);
        if ($page_template !== \'\' && isset($page_template)) {
            include(get_stylesheet_directory() . \'/\' . $page_template);
            exit;
        }
    }
}
add_action("template_redirect", \'cookingrecipes_template_redirect\');
有任何问题,请告诉我

SO网友:Manipur

假设您创建了一个名为art的新页面。php

    <?php
/*
Template Name: Art
*/
 ?>
下一步您应该做的是转到您的管理仪表板。然后按照简单的步骤操作。

转到页面在右侧有“页面属性”模板。默认情况下,它具有“默认模板”。单击它就是这样。

结束

相关推荐

Naming custom page templates

我正在创建一个网站,主要由静态页面和一些动态内容以及博客页面组成。在命名文件方面,实现这一点的最佳方法是什么?我的第一个想法是简单地使用about.php, services.php, 等等,但我确信这对WP的系统不起作用。