2011-08-30 15 views
5

特定のページのカスタムテンプレートを作成する方法を知っています。しかし、私は特定のカスタムの投稿の種類のテンプレートを作成したいと思います。それが可能なのか、それが本当なら、どうすればいいのでしょうか?Wordpressでカスタム投稿のテンプレートを作成する

新しいテンプレートを作成した場合は、ページを追加するときにのみ管理者に表示されますが、新しい投稿タイプを追加するときに、特定のテンプレートを選択するオプションはありません。解決

問題:

シングル{CPT-スラグ} .PHP例えば:

/* 
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

私はまだテストしていませんが、カスタムpost_typeのためにTEMPLATEを有効にするいくつかのプラグインがあります:http://wordpress.org/plugins/custom-post-template/ http:// wordpress .org/plugins/custom-post-type-page-template/ –

答えて

17

呼ばれるページを作成single-product.php

カスタムポストタイプのページを表示するときに使用されます。誰かが行くときhttp://example.com/product/awesome-shoes/

+0

このテンプレートファイルはどのフォルダに置く必要がありますか? –

+2

テーマルート。あなたのテーマが 'wordpress/wp-content/themes/awesome-theme/single-product.php'よりも「素晴らしいテーマ」の場合。 –

関連する問題