ti-enxame.com

Posso atribuir um modelo a um tipo de postagem personalizado?

Posso atribuir um arquivo de modelo a um tipo de postagem personalizado?

Eu criei um tipo de post personalizado chamado items e gostaria de atribuir modelos aos itens como você pode fazer com as páginas.

31
Odyss3us

De WordPress versão 4.7 agora você pode atribuir modelos de página personalizados para outros tipos de postagem junto com a página.

Para isso, além do cabeçalho do arquivo Nome do modelo, os tipos de post suportados por um modelo podem ser especificados usando o tipo de postagem do modelo: como a seguir.

<?php
/*
Template Name: Full-width page layout
Template Post Type: post, page, product
*/

Você pode obter mais informações sobre isso nas próximas páginas.

https://wptavern.com/wordpress-4-7-brings-custom-page-template-functionality-to-all-post-typeshttps://make.wordpress.org/core/2016/11/03/post-type-templates-in-4-7/

45
Vinod Dalvi

Você pode criar um modelo para tipos de postagem personalizados criando arquivos, como por exemplo:

single-mycustomposttype.php

Veja Template Hierarchy no codex.

PS: isto tem foi respondido.

20
mike23

Veja 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, dado um post de tipo de mensagem personalizada foobar e um slug de hello-world o código acima iria carregar o template single-foobar-hello-world.php, se ele existisse.

8
Chris Carson

Para aqueles que alcançam esse segmento por meio do Google, WP 4.7 introduziu modelos para todos os tipos de postagem. Veja Make WP Core para um passo a passo completo. Você não está mais restrito a um modelo para todo o seu CPT. Você pode atribuir modelos individuais por postagem, assim como faz com o Pages.

4
WebElaine

Primeiro, crie na página denominada Itens como seu desejo, que exiba o conteúdo dos tipos de postagem de itens, em vez de criar 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>
1
clap

Isso é um pouco antigo, mas você também pode tentar isto:

Crie um modelo para o tipo de postagem personalizado:

single-*custom-post-type-slug*.php

O arquivo deve verificar o slug e verificar se existe um arquivo, se não, 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 de custom-post-type-slug com o slug real do seu tipo de postagem personalizado.

Eu faço isso para facilidade de uso e propósitos organizacionais. Parece-me mais limpo do que ter todos os arquivos na pasta raiz do tema.

exemplo de estrutura de pastas:

themeroot
| |single-cases.php
|-templates
| --cases
|   |default.php
|   |case-one.php
|   |case-two.php
1
eballeste