2011-08-30 105 views
5

我知道如何为特定页面创建自定义模板。不过,我想为特定的自定义帖子类型创建一个模板。这是可能的,如果是真的,我该怎么做?在Wordpress中为自定义帖子类型创建模板

如果我创建了一个新的模板,它只会在添加页面时显示在管理员中,但是当我添加新的帖子类型时,我没有选择某个特定模板的选项。

问题解决:

/* 
Show the list of available custom templates templates in the Custom Post Type admin section 
*/ 

/** 
* Post_type 
*/ 
define('MY_THEME_POST_TYPE', 'cases'); 
/** 
* Load the page template for any post object 
* having the appropriate meta key set. 
*/ 
add_action('template_redirect', 'mytheme_template_redirect'); 
function mytheme_template_redirect() { 
    global $wp_query; 
    $id = (int) $wp_query->get_queried_object_id(); 
    $template = get_post_meta($id, '_wp_page_template', true); 
    if ($template && 'default' !== $template) { 
     $file = STYLESHEETPATH . '/' . $template; 
     if(is_file($file)) { 
      require_once $file; 
      exit; 
     } 
    } 

} 
/** 
* Process the Meta Box 
* @todo Permissions check. 
* @todo Filter input. 
* @todo Nonces. 
*/ 
add_action('save_post', 'mytheme_process_resource_template'); 
function mytheme_process_resource_template() { 
    global $post; 

    /* Sanitize $_POST array. */ 
    $clean_id = (isset($_POST['ID'])) ? intval($_POST['ID']) : 0; 

    if (!empty($_POST['page_template']) && MY_THEME_POST_TYPE == $post->post_type) { 
     $page_templates = get_page_templates(); 
     if ('default' != $page_template && !in_array($_POST['page_template'], $page_templates)) { 
      if ($wp_error) 
       return new WP_Error('invalid_page_template', __('The page template is invalid.')); 
      else 
       return 0; 
     } 
     update_post_meta($clean_id, '_wp_page_template', $_POST['page_template']); 
    } 
} 
/** 
* Registers the Meta Box 
* @uses mytheme_page_attributes_meta_box() 
*/ 
add_action('admin_init', 'mytheme_register_meta_boxes', 10); 
function mytheme_register_meta_boxes() { 
    add_meta_box(
     'mytheme_post_type_template', 
     'Template', 
     'mytheme_page_attributes_meta_box', 
     MY_THEME_POST_TYPE, 
     'side', 
     'low' 
     ); 
} 
/** 
* Creates the Meta Box 
*/ 
function mytheme_page_attributes_meta_box() { 
    global $post; 
    $post_type_object = get_post_type_object($post->post_type);  
    if (0 != count(get_page_templates())) { 
     $template = get_post_meta($post->ID, '_wp_page_template', true); 
     ?> 
<p><strong><?php _e('Template') ?></strong></p> 
<label class="screen-reader-text" for="page_template"><?php _e('Page Template') ?></label><select name="page_template" id="page_template"> 
<option value='default'><?php _e('Default Template'); ?></option> 
<?php page_template_dropdown($template); ?> 
</select> 
<?php 
    } 
} 
+0

我还没有测试过,但有一些插件来启用TEMPLATE自定义post_type:http://wordpress.org/plugins/custom-post-template/ http:// wordpress .org/plugins/custom-post-type-page-template/ –

回答

17

创建被称为页:

单{CPT-蛞蝓} .PHP例如single-product.php

它将在显示自定义帖子类型的页面时使用。即当有人去http://example.com/product/awesome-shoes/

+0

在哪个文件夹中我必须放这个模板文件? –

+2

主题根。如果你的主题是'awesome-theme'而不是'wordpress/wp-content/themes/awesome-theme/single-product.php'。 –

相关问题