¿Puedo asignar un archivo de plantilla a un tipo de publicación personalizada?
He creado un tipo de publicación personalizada llamada items
, y me gustaría asignar plantillas a los elementos que puedes hacer con las páginas.
¿Puedo asignar un archivo de plantilla a un tipo de publicación personalizada?
He creado un tipo de publicación personalizada llamada items
, y me gustaría asignar plantillas a los elementos que puedes hacer con las páginas.
Desde WordPress versión 4.7 ahora puede asignar plantillas de página personalizadas a otros tipos de publicaciones junto con la página.
Para lograr esto, además del encabezado del archivo de Nombre de la plantilla, los tipos de publicación admitidos por una plantilla se pueden especificar usando el Tipo de publicación de plantilla: de la siguiente manera.
<?php
/*
Template Name: Full-width page layout
Template Post Type: post, page, product
*/
Puede obtener más información al respecto en las siguientes páginas.
Puede crear plantillas para tipos de publicaciones personalizadas creando archivos, como por ejemplo:
single-mycustomposttype.php
Consulte Jerarquía de plantillas en el códice.
PS : esto tiene ya ha sido respondido.
Esto es lo que funciona para mí:
add_filter('single_template', function($original){
global $post;
$post_name = $post->post_name;
$post_type = $post->post_type;
$base_name = 'single-' . $post_type . '-' . $post_name . '.php';
$template = locate_template($base_name);
if ($template && ! empty($template)) return $template;
return $original;
});
Por lo tanto, dada una publicación del tipo de publicación personalizada foobar
y una bala de hello-world
, el código anterior cargaría la plantilla single-foobar-hello-world.php
, si existiera.
Para aquellos que llegan a este hilo a través de Google, WP 4.7 introdujo plantillas para todos los tipos de publicaciones. Vea Make WP Core para un tutorial completo. Ya no estás restringido a una sola plantilla para todo tu CPT, puedes asignar plantillas individuales por publicación como lo puedes hacer con las páginas.
Esto es un poco viejo, pero también puedes probar esto:
Crea una plantilla para el tipo de publicación personalizada:
single-*custom-post-type-slug*.php
El archivo debe verificar el slug y verificar si existe un archivo, si no, retroceder a un archivo de plantilla predeterminado:
<?php
$slug = get_post_field( 'post_name', get_post() );
$slug = ( locate_template( 'templates/*custom-post-type-slug*/' . $slug . '.php' ) ) ? $slug : 'default';
get_template_part( 'templates/*custom-post-type-slug*/' . $slug );
?>
Reemplaza todas las instancias de custom-post-type-type-slug con el slug real de tu tipo de post personalizado.
Hago esto por facilidad de uso y propósitos organizativos. Me parece más limpio que tener todos los archivos en la carpeta raíz del tema.
estructura de carpetas de ejemplo:
themeroot
| |single-cases.php
|-templates
| --cases
| |default.php
| |case-one.php
| |case-two.php
Primero cree en la página denominada Elementos como su deseo, que muestre el contenido de los tipos de publicaciones de los artículos, luego cree un archivo de plantilla como se indica a continuación y nombre esos elementos de plantilla. Seleccione esa plantilla para la página que ha creado.
<div class="container">
<div class="row">
<div class="col-md-9">
<div class="panel panel-default text-center">
<?php $loop = new WP_Query( array( 'post_type' => 'items', 'posts_per_page' => 5 ) ); ?>
<?php while ( $loop->have_posts() ) : $loop->the_post(); ?>
<?php the_title();?>
<?php if(has_post_thumbnail() ) { the_post_thumbnail(); } ?>
<?php the_content();?>
<?php endwhile; ?>
<?php wp_reset_query(); ?>
</div>
</div>
</div>
</div>
Hemos desarrollado otra solución utilizando el complemento de plantilla de publicación personalizada
Lea otras preguntas en las etiquetas custom-post-types templates