Exibindo tipos de postagem personalizados - modelos e consultas
Publicados: 2016-09-26Este é o terceiro e último artigo da nossa série sobre Custom Post Types (CPT). Os tópicos que discutimos nos dois primeiros foram:
- Tipos de postagem personalizados (como criá-los)
- Taxonomias personalizadas
No primeiro e segundo artigos, registramos o tipo de postagem customizada de depoimentos e a taxonomia customizada depoimento_serviço . Agora temos que exibir os depoimentos em nosso site. Então, vamos dar uma olhada em como criar um modelo para nossos depoimentos, como consultá-los e como exibi-los em qualquer lugar do nosso site.
Modelos de tipo de postagem personalizados padrão
Criamos nosso CPT com o parâmetro has_archive
definido como true, que exibirá todos os depoimentos em uma página de arquivo .
O WordPress usa uma hierarquia de modelos para exibir diferentes tipos de conteúdo. Para o tipo de postagem personalizado, ele procurará:
arquivo-{post_type}.php
single-{post_type}.php
Se esses modelos não estiverem definidos no tema, ele procurará os modelos gerais:
arquivo.php
single.php
Se mesmo esses modelos não forem definidos, o padrão será o modelo index.php .
No nosso caso o tema Shaka tem o single.php , mas não tem o template archive.php . Isso significa que, por padrão, ele usará o modelo single.php para a página de depoimento único. Ele também usará o modelo index.php para exibir todos os depoimentos na página de arquivo de depoimentos.
Os depoimentos serão exibidos na página de arquivo de depoimentos , que estará localizada nesta página:
http://your-domain-goes-here.com/ ?post_type=testimonials
Se você tiver os belos permalinks ativados, também poderá acessar a página com este URL:
http://seu-domínio-vai-aqui.com/ depoimentos
(Nota: se os permalinks bonitos não estiverem funcionando para você, vá para wp-admin -> Configurações -> Permalinks e configure-os da maneira que você deseja e salve as configurações)
Primeiro, devemos escrever alguns depoimentos no CPT Testimonials recém-cadastrado, para que tenhamos alguns dados para exibir. Adicionei 3 depoimentos e é assim que o layout padrão da página de arquivo de depoimentos fica no nosso tema Shaka:
Como você pode ver o layout está ok, mas alguns dos dados exibidos não são necessários, como o “por autor” e a data. Além disso, a taxonomia personalizada testimonial_service não é exibida, portanto, adicionaremos isso em nossos modelos personalizados.
Criando modelos personalizados para nosso CPT
Como mencionado na seção anterior, temos que criar dois modelos. O archive-testimonials.php e o single-testimonials.php . Vamos criar apenas o template archive-testimonials.php para este exemplo.
Devemos criar esses arquivos em um tema filho, mas para simplificar, adicionarei o arquivo archive-testimonials.php diretamente no tema Shaka. Vou copiar o arquivo index.php, que servirá como ponto de partida, e renomeá-lo para archive-testimonials.php .
Eu removi o “por autor”, o código de data e a barra lateral. Eu adicionei as imagens em destaque e a taxonomia personalizada do serviço de depoimentos . Eu usei a função WP the_terms
que exibe uma lista de termos WP específicos, no nosso caso a taxonomia personalizada.

Eu sei que esteticamente não parece incrível, mas esse não é o ponto. Queríamos criar uma estrutura/layout diferente da página de arquivo de depoimentos com dados diferentes, e isso foi alcançado em poucos minutos.
Também poderíamos fazer o mesmo para a página de depoimentos únicos. Copiamos o arquivo single.php e o renomeamos para single-testimonials.php e alteramos o código a partir daí.
Eu não mostrei nenhum código aqui, pois os exemplos de código seriam diferentes para cada tema e alguns conhecimentos básicos de HTML e PHP são necessários para codificar modelos. Mas é sempre mais fácil modificar um template existente, por isso usamos o index.php como ponto de partida.
Como consultar tipos de postagem personalizados
Outra maneira de exibir tipos de postagem personalizados em seu site é usar a classe WP_Query para buscar os tipos de postagem personalizados (percorrer e exibi-los).
Digamos que você queira construir um widget que exiba todos os depoimentos em um carrossel. Ou que você gostaria de exibir depoimentos relacionados (mesma taxonomia de serviço de depoimento) na página de depoimento único. Você usaria a classe WP_Query
para recuperar os depoimentos relevantes.
Em nosso exemplo, buscaremos todos os depoimentos que estão na taxonomia personalizada do serviço de depoimentos “mergulho” e os exibiremos em uma lista:
<?php $args = array( 'post_type' => 'testimonials', 'post_status' => 'publish', 'tax_query' => array( array( 'taxonomy' => 'testimonial_service', 'field' => 'slug', 'terms' => 'diving' ) ) ); $testimonials = new WP_Query( $args ); if( $testimonials->have_posts() ) : ?> <ul> <?php while( $testimonials->have_posts() ) : $testimonials->the_post(); ?> <li><?php printf( '%1$s - %2$s', get_the_title(), get_the_content() ); ?></li> <?php endwhile; wp_reset_postdata(); ?> </ul> <?php else : esc_html_e( 'No testimonials in the diving taxonomy!', 'text-domain' ); endif; ?>
Como você pode ver no código acima, primeiro preparamos o array de configurações de argumento, que é usado posteriormente na inicialização do WP_Query
. Neste array, definimos para recuperar:
- "testemunhos" CPT,
- receba apenas os depoimentos publicados,
- obtenha apenas os depoimentos que estão na taxonomia personalizada de mergulho `testimonial_service`.
Quando o new WP_Query
é chamado, os depoimentos relevantes são recuperados e podemos percorrê-los. No loop, simplesmente produzimos o título (que usei para o nome do autor) e o conteúdo do depoimento em uma lista simples. Além disso, devemos sempre usar a função wp_reset_postdata
, para retornar ao loop original, quando usamos um loop WP_Query. Isso garantirá que tudo funcione depois que terminarmos com nossa consulta personalizada.
Esses foram os fundamentos dos Tipos de postagem personalizados e espero que agora você entenda como eles funcionam. Como em qualquer tópico, sempre há mais detalhes para entrar. Aconselho você a consultar a documentação oficial do WP para todas as funções e classes que usamos nesses exemplos. Deixe-me saber na seção de comentários abaixo, se você tiver alguma dúvida.