Plug-in personalizado do tipo de postagem: onde coloco o modelo?

11

Estou escrevendo um plug-in de tipo de postagem personalizado. Parte disso, estou enviando para o modelo por meio de códigos de acesso. Mas outras partes precisam de um modelo de postagem personalizado, e eu descobri como usar a hierarquia de modelos para CPTs. Mas o modelo personalizado está no tema, e acho que o plug-in deve ser independente, pelo menos para começar.

Então, qual é a melhor prática aqui? Como incluímos arquivos de modelo em um plug-in CPT? Você pode me indicar exemplos especialmente bons de como isso é feito?

Obrigado pela ajuda.

NotoriousWebmaster
fonte
1
possível duplicação de modelos de tipo de postagem personalizados da pasta Plugin?
Johannes Pille
1
Não tenho certeza se é uma duplicata, mas é uma pergunta subjetiva. A melhor prática para mim seria deixar o tema lidar com isso. As melhores práticas para outras pessoas seriam tornar o plug-in completamente independente.
Chrisguitarguy
@JohannesPille Fiz uma pesquisa antes de perguntar. Mas obrigado pelo link. Eu estarei investigando.
precisa
1
@chrisguitarguy Concordou. Meu problema ao deixar o tema lidar com isso é que, se mudarmos de tema, precisamos fazer algumas customizações para acomodar o plug-in. Caso contrário, perdemos as coisas que o CPT traz para a festa.
NotoriousWebmaster

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 single_templatefiltro para mudar o modelo. No retorno de chamada, verifique se o tema forneceu um modelo para o tipo de postagem; caso isso ocorra, 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 desse método da melhor maneira. Combine isso com o fornecimento de um conjunto de sons de "tags de modelo" (por exemplo the_content, the_title) que suportem todos os dados personalizados que acompanham seu tipo de postagem e você oferece ao usuário final muita capacidade de personalização, além de alguns padrões de som. O Bbpress faz esse tipo de coisa muito bem: inclui modelos de usuário se os encontrar e fornece muitas tags de modelo.

Como alternativa, você pode usar um retorno de chamada com the_contentfiltro 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;
}
chrisguitarguy
fonte
Concordo com o @toscho que não existe uma solução limpa. Mas eu gosto do conceito de oferecer um conjunto de tags de categoria. Eu suspeito que, no final das contas, terei uma pasta de tema no meu plug-in, com um modelo de CPT de amostra, e recomendo que os usuários o adaptem às suas circunstâncias. Também gosto do filtro the_content, porque isso conecta meu conteúdo ao layout do usuário. Posso implementar os dois e permitir que o usuário escolha o caminho a seguir com uma opção de alternância.
precisa
3

Você pode conectar template_includee retornar seu arquivo de plug-in se a solicitação for para o seu 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 mudará a aparência drasticamente. Ainda não existe uma solução limpa.

fuxia
fonte
Sim, você está certo, isso mudaria a aparência, incluindo layout, widgets e outros. Muito radical para o meu gosto. Mas obrigada.
precisa