Plugin de tipo de postagem personalizado: onde coloco o modelo?

11

Estou escrevendo um plugin de tipo de postagem personalizado. Parte disso eu estou saindo para o template via códigos de acesso. Mas outras partes precisam de um modelo de postagem personalizado e descobri como usar a hierarquia de modelos para CPTs. Mas o modelo personalizado está no tema, e estou pensando que o plugin deve ser independente, pelo menos para começar.

Então, qual é a melhor prática aqui? Como podemos incluir arquivos de modelo em um plugin CPT? Você pode me apontar especialmente bons exemplos de como isso é feito?

Obrigado pela sua ajuda.

    
por NotoriousWebmaster 21.04.2013 / 17:55

2 respostas

8
  

Então, qual é a melhor prática aqui?

Eu diria uma combinação de deixar o tema lidar com isso e fornecer um padrão com o seu plugin.

Você pode usar o filtro single_template para alternar o modelo. Em seu retorno de chamada, veja se o tema forneceu um modelo para o tipo de postagem. Se isso ocorrer, não faça 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;
}

Eu gosto mais desse método. Combine isso com o fornecimento de um conjunto de "tags de modelo" (por exemplo, the_content , the_title ) que suporte todos os dados personalizados que acompanham o tipo de postagem e você dá ao usuário final muita personalização com algum som padrões. O Bbpress faz esse tipo de coisa muito bem: inclui modelos de usuário se os encontrar e fornecer muitas tags de modelo.

Como alternativa, você pode usar um retorno de chamada com the_content filtro e apenas alterar as coisas no próprio conteúdo.

<?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;
}
    
por chrisguitarguy 21.04.2013 / 18:12
3

Você pode ligar para template_include e retornar seu arquivo de plug-in se a solicitação for para o tipo de postagem:

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;
}

Mas isso vai mudar drasticamente o visual. Ainda não há solução limpa.

    
por fuxia 21.04.2013 / 18:01