¿Puedo asignar una plantilla a un tipo de publicación personalizada?

30

¿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.

    
pregunta Odyss3us 21.07.2011 - 17:38

7 respuestas

43

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.

enlace enlace

    
respondido por el Vinod Dalvi 23.04.2017 - 12:06
19

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.

    
respondido por el mike23 21.07.2011 - 17:44
6

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.

    
respondido por el Chris Carson 11.06.2015 - 21:12
4

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.

    
respondido por el WebElaine 08.03.2017 - 16:42
1

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
    
respondido por el eballeste 13.07.2016 - 23:59
0

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>
    
respondido por el clap 13.07.2015 - 10:06
-3

Hemos desarrollado otra solución utilizando el complemento de plantilla de publicación personalizada

    
respondido por el Leon Rainbow 01.04.2016 - 15:59

Lea otras preguntas en las etiquetas