Estou escrevendo um plugin que cria um tipo de postagem personalizado chamado "my_plugin_lesson":
$args = array (
'public' => true,
'has_archive' => true,
'rewrite' => array('slug' => 'lessons', 'with_front' => false)
);
register_post_type ('my_plugin_lesson', $args);
O tipo de postagem personalizada possui um arquivo e a URL do arquivo é:
http://example.com/lessons
Quero personalizar a aparência deste arquivo; Quero listar as postagens em um formato de tabela, em vez do arquivo padrão de postagem do blog WordPress. Entendo que um modelo de arquivo personalizado pode ser criado no tema criando o archive-my_plugin_lesson.php
arquivo; no entanto, gostaria que o plugin funcionasse com qualquer tema.
Como posso alterar o conteúdo da página de arquivo sem adicionar ou modificar arquivos de tema?
Edit:
Eu entendo que eu poderia usar o archive_template
gancho de filtro. No entanto, tudo isso faz é substituir o modelo de tema, que ainda precisa ser específico do tema. Por exemplo, apenas sobre cada tema modelo terá os get_header
, get_sidebar
e get_footer
funções, mas o que deve o id do conteúdo <div>
ser? Isso é diferente em todos os temas.
O que eu gostaria de fazer é substituir o conteúdo em si pelo meu próprio conteúdo e usá-lo no lugar da página de arquivo para o meu tipo de postagem personalizado.
fonte
Você pode usar o
archive_template
gancho para processar o conteúdo do modelo de arquivo morto de um tema, usando o esquema abaixo, mas obviamente você só poderá processar uma fração dos temas existentes, já que um modelo pode conter basicamente qualquer coisa antiga .O esquema é carregar o modelo em uma string (
$tpl_str
) noarchive_template
filtro, substituir seu conteúdo, incluir a string (usando o truqueeval( '?>' . $tpl_str );
) e retornar um arquivo em branco para que oinclude
item "wp-includes / template-loader.php" torna-se um não-op.Abaixo está uma versão hackeada do código que uso em um plug-in, que tem como alvo modelos "clássicos" que usam
get_template_part
e se preocupa mais com o processamento de modelos únicos do que com o arquivo morto , mas deve ajudar você a começar. A configuração é que o plug-in possui um subdiretório chamado "modelos", que contém um arquivo em branco ("null.php") e modelos de conteúdo (por exemplo, "content-single-posttype1.php", "content-archive-postype1.php") bem como um modelo alternativo "single.php" para o caso único e utiliza uma versão personalizada daget_template_part
aparência neste diretório.O costume
get_template_part
:Para completar, aqui está o "single.php", que usa o costume
get_template_part
:fonte
Eu tenho pensado na mesma pergunta, e esta é a solução hipotética que eu vim com:
Após a ativação do plug-in, crie uma página usando wp_insert_post com o nome no tipo de postagem e o conteúdo no código de acesso.
Você pode fornecer opções no código de acesso para considerações adicionais sobre o estilo ou adicionar classes ao contêiner de postagem para corresponder aos estilos específicos ou personalizados do tema. O usuário também pode adicionar conteúdo adicional antes / depois do loop, editando a página.
fonte
Você pode usar o filtro
single_template
. Um exemplo básico retirado do Codex :fonte
archive_template
, mas não acho que isso funcione para o que estou tentando fazer. Editei minha pergunta com mais informações.