¿Puedo asignar una plantilla a un tipo de entrada personalizada?

21 jul 2011, 18:38:50
Vistas: 186K
Votos: 62

¿Puedo asignar un archivo de plantilla a un tipo de entrada personalizada?

He creado un tipo de entrada personalizada llamado items, y me gustaría asignar plantillas a los items como se puede hacer con las páginas.

1
Comentarios

http://www.wpbeginner.com/wp-themes/create-custom-single-post-templates-for-specific-posts-or-sections-in-wordpress/ (esto es para publicaciones pero puedes modificarlo para CPT's) http://www.nathanrice.net/blog/wordpress-single-post-templates/ (esto es para publicaciones pero puedes modificarlo para CPT's) En realidad es una buena idea para un plugin.

Wyck Wyck
22 jul 2011 04:43:23
Todas las respuestas a la pregunta 8
3
96

A partir de la versión 4.7 de WordPress, ahora puedes asignar plantillas personalizadas de páginas a otros tipos de entradas además de las páginas.

Para lograr esto, además del encabezado de archivo "Template Name", los tipos de entradas compatibles con una plantilla se pueden especificar usando "Template Post Type:" como se muestra a continuación.

<?php
/*
Template Name: Diseño de página de ancho completo
Template Post Type: post, page, product
*/

Puedes obtener más información sobre esto en las siguientes páginas.

https://wptavern.com/wordpress-4-7-brings-custom-page-template-functionality-to-all-post-types https://make.wordpress.org/core/2016/11/03/post-type-templates-in-4-7/

23 abr 2017 13:06:08
Comentarios

¡Perfecto! No sabía eso.

Tiago Tiago
8 dic 2020 16:44:05

¿Supongo que esto no aplica para temas/bloques (block themes/templates)?

Flimm Flimm
15 jul 2022 21:05:45

¿Hay algún enlace a esta técnica en el codex de WordPress?

klewis klewis
15 ago 2022 15:49:06
4
37

Puedes crear plantillas para tipos de posts personalizados creando archivos, como por ejemplo:

single-mycustomposttype.php

Consulta la Jerarquía de Plantillas en el codex.

Nota: esto ya ha sido respondido anteriormente.

21 jul 2011 18:44:39
Comentarios

Gracias por eso, pero lo que me gustaría saber es si es posible agregar plantillas personalizadas a tipos de publicaciones personalizadas. Por ejemplo, ¿puedo crear dos plantillas y asignar cada una a su respectiva publicación? Según entiendo, eso solo permite especificar un archivo de plantilla para manejar ese tipo de publicación específica.

Odyss3us Odyss3us
21 jul 2011 20:05:29

Entiendo, si necesitas diferentes plantillas para publicaciones individuales, es posible que desees crear varios tipos de publicaciones personalizadas, según cada plantilla necesaria. Supongo que eso depende de cuántas plantillas diferentes necesites. ¿Qué vas a hacer en las plantillas que necesita ser diferente en cada publicación?

mike23 mike23
22 jul 2011 13:03:37

Esta respuesta ahora está desactualizada. Consulta la respuesta de Vinod Dalvi.

Simon East Simon East
12 sept 2017 03:34:52

No está desactualizado. Todavía funciona perfectamente y sigue siendo una práctica estándar.

Tim Hallman Tim Hallman
1 mar 2020 23:45:07
0
12

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, dado un post de tipo de post personalizado foobar y un slug de hello-world, el código anterior cargaría la plantilla single-foobar-hello-world.php, si existiera.

11 jun 2015 22:12:48
0

Para aquellos que lleguen a este hilo a través de Google, WP 4.7 introdujo plantillas para todos los tipos de publicaciones. Consulta Make WP Core para una guía completa. Ya no estás restringido a una sola plantilla para todos tus CPT (Custom Post Types), puedes asignar plantillas individuales publicación por publicación, al igual que puedes hacer con las Páginas.

8 mar 2017 17:42:13
0

Esto es un poco antiguo pero también puedes probar esto:

Crea una plantilla para el tipo de contenido personalizado:

single-*slug-del-tipo-de-contenido-personalizado*.php

El archivo debe verificar el slug y comprobar si existe un archivo, si no, recurrir a un archivo de plantilla predeterminado:

<?php 
    $slug = get_post_field( 'post_name', get_post() );
    $slug = ( locate_template( 'templates/*slug-del-tipo-de-contenido-personalizado*/' . $slug . '.php' ) ) ? $slug : 'default';

    get_template_part( 'templates/*slug-del-tipo-de-contenido-personalizado*/' . $slug  );
?>

Reemplaza todas las instancias de custom-post-type-slug con el slug real de tu tipo de contenido personalizado.

Yo hago esto para facilitar el uso y por organización. Me parece más limpio que tener todos los archivos en la carpeta raíz del tema.

Ejemplo de estructura de carpetas:

raiz-del-tema
| |single-cases.php
|-templates
| --cases
|   |default.php
|   |case-one.php
|   |case-two.php
14 jul 2016 00:59:40
0

Esto es muy sencillo de hacer.

Crea un nuevo archivo PHP en el directorio raíz de tu tema y agrega esto al inicio:

<?php /*
 * Template Name: Mi vista personalizada
 * Template Post Type: Post_typename   // aquí necesitas añadir el nombre de tu tipo de entrada personalizado
 */ ?>

Un ejemplo completo sería el siguiente:

<?php /*
 * Template Name: Mi vista personalizada
 * Template Post Type: Post_typename   // aquí necesitas añadir el nombre de tu tipo de entrada personalizado
 */ ?>
<?php get_header();?>


<div class="container pt-5 pb-5">


    <?php if (has_post_thumbnail()):?>

      <img src="<?php the_post_thumbnail_url('largest');?>" class="img-fluid" alt="Miniatura del post" title="Miniatura destacada">

    <?php endif;?>
7 jun 2019 19:22:11
0

Primero crea una página llamada "Artículos" (o el nombre que prefieras) que muestre el contenido del tipo de entrada "items", luego crea un archivo de plantilla como el siguiente y nómbralo "template-items". Selecciona esa plantilla para la página que has 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>
13 jul 2015 11:06:22
0
-3

Trabajamos en otra solución utilizando el plugin de plantillas personalizadas para entradas

1 abr 2016 16:59:23