2011-08-30 17 views
5

Sé cómo crear una plantilla personalizada para una página específica. Sin embargo, me gustaría crear una plantilla para un tipo específico de publicación personalizada. ¿Es eso posible y, si es cierto, cómo puedo hacer eso?Crear plantilla para tipos de publicación personalizados en Wordpress

Si creo una nueva plantilla, se mostrará en admin solo cuando agregue una página, pero cuando agregue un nuevo tipo de publicación no tengo la opción de seleccionar una determinada plantilla.

Problema resuelto:

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

Todavía no lo he probado, pero hay algunos complementos para habilitar TEMPLATE para un post_type personalizado: http://wordpress.org/plugins/custom-post-template/ http: // wordpress .org/plugins/custom-post-type-page-template/ –

Respuesta

17

Crear página que se llama:

sola {CPT-babosa} .php por ejemplo, single-product.php

Se utilizará al mostrar una página de un tipo de publicación personalizada. es decir, cuando alguien va al http://example.com/product/awesome-shoes/

+0

¿En qué carpeta tengo que poner este archivo de plantilla? –

+2

Tema raíz. Si su tema es 'awesome-theme' que' wordpress/wp-content/themes/awesome-theme/single-product.php'. –

Cuestiones relacionadas