Agora que aprendemos quase tudo sobre o WP_Query
classe, é hora de experimentar alguns exemplos. Nesta parte, vamos trabalhar em 10 cenários diferentes para utilizar o WP_Query
classe e funções relacionadas.
Será um exercício divertido e espero que seja igualmente educativo. Vamos começar!
Um lembrete rápido sobre como criar um loop com WP_Query
Apenas para tornar este artigo compreensível separadamente da série “Mastering WP_Query”, devo fazer um nano-tutorial sobre como criar loops do WordPress com o WP_Query
classe.
Não é diferente de criar um loop regular, na verdade. Um loop típico do WordPress é assim:
E criando um loop com o WP_Query
classe tem apenas algumas diferenças:
'news', 'posts_per_page' => 3 ); $my_query = new WP_Query( $args ); if ( $my_query->have_posts() ) { while ( $my_query->have_posts() ) { $my_query->the_post(); // Post data goes here. } } // Reset the `$post` data to the current post in main query. wp_reset_postdata(); ?>
Vamos ver a diferença entre os dois:
- Estabelecemos alguns argumentos para nossa
WP_Query
instância, - Nós instanciamos o
WP_Query
classe, - Nós adicionamos
$my_query->
ao início dohave_posts()
ethe_post()
funções (então eles agora são os métodos doWP_Query
classe), - E nós redefinimos os dados de
$post
para que possa retornar à consulta principal.
Agora sabemos como criar um loop com WP_Query
e a diferença entre um loop regular e um loop criado com WP_Query
. Não vamos criar loops em todos os exemplos (para manter o tutorial curto e dentro do tópico), então você pode consultar esta seção se precisar criar um loop com os exemplos abaixo.
Exemplo nº 1: postagens de um autor neste ano
Digamos que você queira listar as postagens de um autor específico escritas no ano atual em uma seção especial “Postagens do autor este ano”. Uma simples combinação de dois WP_Query
parâmetros serão suficientes:
'john', // Get his posts from this year. 'year' => $current_year ); // Instantiate new query instance. $my_query = new WP_Query( $args ); ?>
Passe esta consulta em um loop e pronto!
Exemplo #2: “Últimas postagens desta categoria” (exceto a postagem atual)
Digamos que você queira criar um loop sob cada postagem em suas páginas de postagem única e listar as postagens mais recentes da categoria em que a postagem está. Claro, você deve excluir a postagem atual caso ela seja uma das últimas postagens dessa categoria. Veja como você cria a consulta com o 'cat'
e 'post__not_in'
parâmetros:
term_id; // Setup arguments. $args = array( // Get category's posts. 'cat' => $current_post_first_cat_id, // Exclude current post. 'post__not_in' => array( $current_post_id ) ); // Instantiate new query instance. $my_query = new WP_Query( $args ); ?>
Para o loop, sugiro criar três ou quatro colunas com miniaturas de postagens acima dos títulos das postagens. Vai ficar muito legal logo abaixo do post e antes da seção de comentários.
Exemplo nº 3: “Postagens mais populares” ordenadas por contagem de comentários
O WordPress não possui um sistema embutido de “contagem de visualizações de postagem”, e os plugins que fornecem essa funcionalidade são famosos por deixar o site mais lento (porque em cada visualização de postagem, os plugins gravam no banco de dados repetidamente para gravar a visualização conta). No entanto, há outro tipo de medida para determinar quais postagens são mais “populares”: contar comentários. E, diferentemente das contagens de visualizações, as contagens de comentários já estão no banco de dados – o WP_Query
class torna super fácil ordenar postagens por contagem de comentários:
'comment_count' ); // Instantiate new query instance. $my_query = new WP_Query( $args ); ?>
Veja como isso é fácil? Agora imagine criar um modelo de página personalizado com um loop executando essa consulta – uma página “Postagens mais comentadas”.
Exemplo nº 4: uma configuração simples de controle deslizante
Ao usar o WordPress para criar sites corporativos, portfólios ou revistas na web, os controles deslizantes se tornaram um padrão industrial “obrigatório”. Não sou muito fã de sliders (acho ruim UX), mas a web parece gostar, então não posso simplesmente dizer não aos meus clientes enquanto faço sites para eles. Se eles querem controles deslizantes, eu uso uma consulta simples usando o WP_Query
classe:
'slider', // Get a specific slider category. 'category_name' => 'home-slides', // Get all slides and don't paginate. 'nopaging' => true ); // Instantiate new query instance. $my_query = new WP_Query( $args ); ?>
o 'cat'
O argumento pode ser usado para recuperar slides de diferentes categorias para que você possa separar grupos de slides e usar vários controles deslizantes em várias páginas. Se você for usar apenas um controle deslizante em seu site, poderá excluir essa linha e pronto.
Exemplo #5: Uma cotação aleatória na barra lateral
Se você gosta de literatura ou religião, você pode querer ter algumas de suas citações favoritas na barra lateral – não é um desperdício de espaço se você usar a área com um propósito. Portanto, se você for listar uma citação aleatória em sua barra lateral em cada visualização de página, poderá usar o seguinte trecho de código para criar o tipo de postagem e usar a seguinte consulta para criar um loop em sua barra lateral:
'Quotes', 'public' => true ); register_post_type( 'quotes', $args ); } add_action( 'init', 'quote_post_type' ); // Setup arguments. $args = array( // Get the "quotes" psot type. 'post_type' => 'quotes', // Randomize the order. 'orderby' => 'rand', // Get only one item. 'posts_per_page' => 1, ); // Instantiate new query instance. $my_query = new WP_Query( $args ); ?>
Uma solução fácil e elegante.
Exemplo nº 6: listando produtos entre uma faixa de preço
Encontrei este exemplo no Scribu.net e devo dizer que pode ser o melhor WP_Query
truque neste tutorial. É um pouco mais técnico do que os outros também, porque pode ser aplicado a um site de comércio eletrônico com WordPress neste contexto.
Aqui está o snippet de código que você usará se quiser listar itens de um tipo de postagem “Produto” personalizado e filtrar os resultados com os campos personalizados “preço”:
'product', // Setup the "meta query". 'meta_query' => array( array( // Get the "price" custom field. 'key' => 'price', // Set the price values. 'value' => array( 100, 200 ), // Set the compare operator. 'compare' => 'BETWEEN', // Only look at numeric fields. 'type' => 'numeric', ) ) ); // Instantiate new query instance. $my_query = new WP_Query( $args ); ?>
Um grande abraço a Silviu-Cristian Burca!
Exemplo nº 7: um código de acesso para incorporar postagens dentro de postagens
Aqui está um exercício divertido – e podemos usar a API Shortcode também! Neste exemplo, vamos criar um shortcode que pode incorporar uma postagem em uma postagem. (Eu mal me contive ao nomear o shortcode [postception]
.) No trecho de código a seguir, criamos uma função shortcode que nos permite incorporar postagens (ou qualquer tipo de postagem personalizada) e nos permite escolher se queremos mostrar a postagem completa ou apenas um trecho:
'post', 'slug' => '', 'full' => true ), $attributes ) ); // Setup arguments. $args = array( // Get post type ("post" by default). 'post_type' => $type, // Get post by slug. 'name' => $slug ); // Instantiate new query instance. $my_query = new WP_Query( $args ); // Check that we have query results. if ( $my_query->have_posts() ) { // Begin generating markup. $output="'; } else { // Output message to let user know that no posts were found. $output=" '; } wp_reset_postdata(); return $output; } add_shortcode( 'embed_post', 'tutsplus_embedded_post_shortcode' ); ?>
Exemplo nº 8: Lista de postagens agendadas atuais (com trechos opcionais)
Aqui está uma ideia: por que você não exibe alguns “sneak peeks” de suas próximas postagens para seus visitantes? Você pode usar a seguinte função para listar suas postagens agendadas com ou sem trechos após os títulos:
* * Usage without Excerpts: * * */ function tutsplus_show_drafts( $show_excerpts = true ) { // Setup arguments. $args = array( 'post_status' => 'future', 'nopaging' => true ); // Instantiate new query instance. $my_query = new WP_Query( $args ); // Check that we have query results. if ( $my_query->have_posts() ) { // Begin generating markup. $output=""; // Start looping over the query results. while ( $my_query->have_posts() ) { $my_query->the_post(); // Output draft post title and excerpt (if enabled). $output .= ' '; } else { // Let user know that nothing was found. $output="'; $output .= ''; } // End generating markup. $output .= '' . get_the_title() . '
'; $output .= get_the_title(); $output .= ''; if ( $show_excerpts ) { $output .= ''; $output .= get_the_excerpt(); $output .= ''; } $output .= '"; $output .= ' '; } wp_reset_postdata(); return $output; } ?>' . __( 'Nothing found', 'tutsplus' ) . '
'; $output .= '
Exemplo #9: “Post de um ano atrás hoje”
Se o seu blog tiver mais de um ano e seu conteúdo for atemporal (o que significa que uma pessoa de 2015 e 2025 achará o artigo relevante), adicionar uma seção “Postar de um ano atrás hoje” pode aumentar suas visualizações de página. Aqui está como você faz isso:
date( 'j' ), // Month (1 - 12). 'monthnum' => date( 'n' ), // Year (minus 1). 'year' => date( 'Y' ) - 1, // Show only one post. 'posts_per_page' => 1 ); // Instantiate new query instance. $my_query = new WP_Query( $args ); ?>
Use esta consulta para criar um loop que exibe uma única postagem do passado.
Exemplo nº 10: Mostrar filhos da página atual
Você não tem nada além de títulos de subpáginas para colocar dentro de sua página “Serviços”, “Nossos Trabalhos” ou “Meu Portfólio”? Talvez um parágrafo de introdução, mas você está certo, essas páginas estão fadadas a serem “espaços reservados”. Ainda assim, é uma boa ideia colocar subpáginas lá – talvez uma grade com miniaturas quadradas e títulos abaixo. Vamos ver qual consulta devemos usar ao criar esse modelo de página:
$current_page_id, // Disable pagination. 'nopaging' => true ); // Instantiate new query instance. $my_query = new WP_Query( $args ); ?>
Empacotando
Espero que tenham gostado desses exemplos tanto quanto eu gostei ao prepará-los. Eu prestei atenção especial em dar exemplos variados tanto para ser divertido quanto para estimular sua criatividade.
Se você pensou em exemplos melhores ao ler estes, ou tiver dúvidas, não hesite em fazer um comentário abaixo. E se você gostou do artigo, não se esqueça de compartilhar com seus amigos!
Na próxima parte, falaremos sobre WP_User_Query
uma das classes irmãs de WP_Query
. Vejo você então!
Originally posted 2022-06-15 15:42:43.