2011-08-30 17 views
5

So come creare un modello personalizzato per una pagina specifica. Tuttavia, vorrei creare un modello per un tipo di post personalizzato specifico. È possibile e se è vero come posso farlo?Crea modello per i tipi di post personalizzati in Wordpress

Se creo un nuovo modello, verrà visualizzato in admin solo quando aggiungo una pagina, ma quando aggiungo un nuovo tipo di post non ho la possibilità di selezionare un determinato modello.

Problema risolto:

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

Non ho ancora provato, ma ci sono alcuni plugin per abilitare TEMPLATE per un post_type personalizzato: http://wordpress.org/plugins/custom-post-template/ http: // wordpress .org/plugins/custom-post-type-page-template/ –

risposta

17

generazione pagina che si chiama:

singolo {cpt-slug} .php per esempio single-product.php

Sarà usato per mostrare una pagina di un tipo di messaggio personalizzato. cioè quando qualcuno va a http://example.com/product/awesome-shoes/

+0

In quale cartella devo inserire questo file modello? –

+2

Tema radice. Se il tuo tema è 'awesome-theme' di' wordpress/wp-content/themes/awesome-theme/single-product.php'. –

Problemi correlati