2011-08-30 31 views
5

Belirli bir sayfa için özel bir şablonun nasıl oluşturulacağını biliyorum. Ancak, belirli bir özel posta türü için bir şablon oluşturmak istiyorum. Bu mümkün mü ve eğer doğruysa bunu nasıl yapabilirim?Wordpress'te özel posta türleri için şablon oluştur

Yeni bir şablon oluşturursam, yalnızca sayfa eklerken yönetici olarak görünecek, ancak yeni bir posta türü eklerken belirli bir şablonu seçme seçeneğim yok.

Sorun çözüldü:

tek {cpT-sülük} .php örn:

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

'a gittiğinde, henüz deneme yapmadım, ancak özel bir post_type için TEMPLATE'i etkinleştirmek üzere bazı eklentiler var: http://wordpress.org/plugins/custom-post-template/ http: // wordpress .org/plugins/custom-post-type-page-template/ –

cevap

17

denir sayfa oluştur tek ürün.php

Özel posta türünün sayfalarını gösterirken kullanılır. Örneğin, birisi http://example.com/product/awesome-shoes/

+0

Hangi klasörde bu şablon dosyasını koymak zorundayım? –

+2

Tema kökü. Temanız 'wordpress/wp-content/themes/awesome-theme/single-product.php'' den daha harika bir temaysa. –

İlgili konular