Posso atribuir um arquivo de modelo a um tipo de postagem personalizado?
Criei um tipo de postagem personalizado chamado itemse 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 itemse 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 foobare uma lesma do hello-worldcódigo acima carregariam o single-foobar-hello-world.phpmodelo, 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