Complemento de tipo de publicación personalizada: ¿Dónde coloco la plantilla?

11

Estoy escribiendo un complemento de tipo de publicación personalizado. Parte de ello estoy enviando a la plantilla a través de códigos cortos. Pero otras partes necesitan una plantilla de publicación personalizada, y me di cuenta de cómo utilizar la jerarquía de plantillas para CPT. Pero la plantilla personalizada está en el tema, y estoy pensando que el complemento debería ser autónomo, al menos para empezar.

Entonces, ¿cuál es la mejor práctica aquí? ¿Cómo incluimos los archivos de plantilla en un complemento CPT? ¿Me puede indicar ejemplos especialmente buenos de cómo se hace esto?

Gracias por tu ayuda.

    
pregunta NotoriousWebmaster 21.04.2013 - 17:55

2 respuestas

8
  

Entonces, ¿cuál es la mejor práctica aquí?

Diría una combinación de dejar que el tema lo maneje y proporcionar un valor predeterminado con su complemento.

Puede usar el filtro single_template para cambiar la plantilla. En su devolución de llamada, vea si el tema proporcionó una plantilla para el tipo de publicación, si lo hizo, no haga nada.

<?php
add_filter('single_template', 'wpse96660_single_template');
function wpse96660_single_template($template)
{
    if ('your_post_type' == get_post_type(get_queried_object_id()) && !$template) {
        // if you're here, you're on a singlar page for your costum post 
        // type and WP did NOT locate a template, use your own.
        $template = dirname(__FILE__) . '/path/to/fallback/template.php';
    }
    return $template;
}

Me gusta este método lo mejor. Combínelo con la provisión de un conjunto de "etiquetas de plantilla" (por ejemplo, the_content , the_title ) que admita los datos personalizados que acompañan a su tipo de publicación y le da al usuario final mucha capacidad de personalización junto con cierto sonido. por defecto Bbpress hace este tipo de cosas realmente bien: incluye plantillas de usuario si las encuentra y proporciona muchas etiquetas de plantilla.

Alternativamente, puedes usar una devolución de llamada con the_content filter, y simplemente cambiar las cosas en el contenido mismo.

<?php
add_filter('the_content', 'wpse96660_the_content');

function wpse96660_the_content($content)
{
    if (is_singular('your_post_type') && in_the_loop()) {
        // change stuff
        $content .= '<p>here we are on my custom post type</p>';
    }

    return $content;
}
    
respondido por el chrisguitarguy 21.04.2013 - 18:12
3

Puede enlazar con template_include y devolver su archivo de complemento si la solicitud es para su tipo de publicación:

add_filter( 'template_include', 'insert_my_template' );

function insert_my_template( $template )
{
    if ( 'my_post_type' === get_post_type() )
        return dirname( __FILE__ ) . '/template.php';

    return $template;
}

Pero esto cambiará el aspecto drásticamente. Todavía no hay una solución limpia.

    
respondido por el fuxia 21.04.2013 - 18:01

Lea otras preguntas en las etiquetas