Posso atribuir um arquivo de modelo a um tipo de postagem personalizado?
Criei um tipo de postagem personalizado chamado items
e gostaria de atribuir modelos aos itens, como você pode fazer com as páginas.
Posso atribuir um arquivo de modelo a um tipo de postagem personalizado?
Criei um tipo de postagem personalizado chamado items
e gostaria de atribuir modelos aos itens, como você pode fazer com as páginas.
Respostas:
A partir da versão 4.7 do WordPress, agora você pode atribuir modelos de página personalizados a outros tipos de postagens junto com a página.
Para isso, além do cabeçalho do arquivo Nome do modelo, os tipos de postagem suportados por um modelo podem ser especificados usando o Tipo de postagem do modelo: da seguinte maneira.
<?php
/*
Template Name: Full-width page layout
Template Post Type: post, page, product
*/
Você pode obter mais informações sobre isso nas páginas seguintes.
https://wptavern.com/wordpress-4-7-brings-custom-page-template-functionality-to-all-post-types https://make.wordpress.org/core/2016/11/03/post -type-templates-in-4-7 /
Você pode criar modelos para tipos de postagem personalizados criando arquivos, como por exemplo:
single-mycustomposttype.php
Consulte Hierarquia de modelos no codex.
PS : isso já foi respondido.
Aqui está o que funciona para mim:
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;
});
Assim, uma postagem do tipo de postagem personalizada foobar
e uma lesma do hello-world
código acima carregariam o single-foobar-hello-world.php
modelo, se ele existisse.
Para aqueles que alcançam esse segmento pelo Google, o WP 4.7 introduziu modelos para todos os tipos de postagem. Consulte Make WP Core para obter uma explicação completa. Você não está mais restrito a um modelo para todo o seu CPT. Você pode atribuir modelos individuais post por post, da mesma forma que nas Páginas.
Isso é um pouco antigo, mas você também pode tentar o seguinte:
Crie um modelo para o tipo de postagem personalizada:
single-*custom-post-type-slug*.php
O arquivo deve verificar a lesma e verificar se existe um arquivo, se não houver, fallback para um arquivo de modelo padrão:
<?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 );
?>
Substitua todas as instâncias da lesma pós-tipo personalizada pela lesma real do seu tipo de postagem personalizado.
Faço isso para facilitar o uso e para fins organizacionais. Parece mais limpo para mim do que ter todos os arquivos na pasta raiz do tema.
estrutura de pastas de exemplo:
themeroot
| |single-cases.php
|-templates
| --cases
| |default.php
| |case-one.php
| |case-two.php
Primeiro crie na página denominada Itens conforme o seu desejo, que exibe o conteúdo dos tipos de postagem de itens, depois crie um arquivo de modelo como abaixo e nomeie esses itens de modelo. Selecione esse modelo para a página que você criou.
<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>
Isso é muito simples de fazer.
Crie um novo arquivo PHP no diretório raiz do tema e adicione-o ao topo:
<?php /*
* Template Name: My custom view
* Template Post Type: Post_typename // here you need to add the name of your custom post type
*/ ?>
O exemplo completo será o seguinte:
<?php /*
* Template Name: My custom view
* Template Post Type: Post_typename // here you need to add the name of your custom post type
*/ ?>
<?php get_header();?>
<div class="container pt-5 pb-5">
<?php if (has_post_thumbnail()):?>
<img src="<?php the_post_thumbnail_url('largest');?>" class="img-fluid">
<?php endif;?>
<?php if (have_posts()) : while (have_posts()) : the_post();?>
<?php the_content();?>
<?php endwhile; endif;?>
</div>
<?php get_footer();?>
Desenvolvemos outra solução usando o plug-in de modelo de postagem personalizado