✅ Notícias, temas e plug-ins da WEB e do WordPress. Aqui compartilhamos dicas e as melhores soluções para sites.

Guia: Como consultar postagens no WordPress

12

Quais métodos estão disponíveis para fazer uma consulta de postagem personalizada e quando é melhor usá-los? Este post visa estabelecer uma compreensão sólida de dois métodos de consulta de postagens, como acessar os resultados, como construir argumentos e, finalmente, como limpar depois. Os dois métodos que veremos são get_posts()e WP_Query.

Quando se trata de fazer uma nova consulta de postagem, existem realmente duas opções (no momento da redação). A escolha realmente depende da sua preferência (e de algum efeito menor no desempenho). Uma opção tem o potencial de atrapalhar o loop/consulta global em que você está atualmente, a menos que você a manipule corretamente. Com uma opção você manipula objetos e na outra opção você manipula um array. Os argumentos para personalizar a consulta de postagem são, no entanto, idênticos.

Consulta global?

Se você não tiver certeza do que quero dizer com "estragar a consulta global", é isso. O WordPress sempre faz uma consulta global, dependendo da página em que você está. Se um visitante visitar um arquivo de categoria, o WordPress fez uma consulta de postagem para isso O tema normalmente acessaria os posts da consulta usando o “loop" Quando fazemos uma nova consulta com seu próprio loop dentro desse loop, precisamos garantir que a consulta global do WordPress e nossa consulta sejam tratadas separadamente.

No entanto, se você deseja modificar a consulta de postagem do WordPress, isso é outra história. Eu tenho outro post que se aprofunda sobre como fazer isso.

Vejamos as duas opções que temos e como lidamos com elas. Depois disso, veremos os argumentos para personalizar a consulta. Tenha em mente que os argumentos são idênticos para ambos.

Os dois métodos de consulta de postagens

Você pode consultar posts com a função get_posts()ou fazendo uma nova instância de WP_Query.A primeira opção retorna um array de posts e na segunda você manipula um objeto. Como get_posts()retorna uma matriz apenas das postagens, geralmente é mais simples usar isso em qualquer lugar que você desejar. No entanto, se você deseja paginar sua consulta, definitivamente deve criar uma WP_Queryinstância.

A função get_postsé uma função wrapper, o WP_Queryque significa que ela aceita os mesmos argumentos, mas get_poststem alguns argumentos “alias” adicionais. A página de documentação do WordPress para get_posts não lista os argumentos possíveis (exceto os argumentos de alias), mas se refere à página de documentação para WP_Query para os argumentos. Veremos mais de perto os argumentos mais adiante.

Se o desempenho é um problema (ou seja, o site tem muitos posts), get_postsé mais rápido do que usar WP_Queryporque pula o cálculo para paginação.

O método de percorrer sua consulta de postagem personalizada difere dependendo do método escolhido. Você deve estar familiarizado com o loop comum do WordPress usado em quase todos os modelos de tema:

if (have_posts()) { while (have_posts()): the_post(); // Access to each post; you can use template tags here endwhile; }

Loop usando WP_Query

Fazer um loop dos resultados de using WP_Queryé exatamente o mesmo, exceto que nos referimos especificamente ao objeto de instância no loop. Também precisamos nos lembrar de “redefinir o estado” depois que terminarmos o loop para que o objeto global post volte ao que era antes. Para isso usamos wp_reset_postdata().

Se você despejar o objeto instanciado por WP_Query( $custom_queryno exemplo acima), você encontrará a consulta completa e os argumentos usados. As partes interessantes aqui são as propriedades ‘ found_posts‘ e ‘ posts‘. A postspropriedade ‘ ‘ contém o resultado dos objetos post pelos quais o loop será executado. O número de postagens que corresponderam à sua consulta é retornado em ‘ found_posts‘ e é útil se você deseja fazer uma paginação personalizada. Divida este valor com a configuração do WordPress para o número de posts por página para descobrir quantas páginas você precisa para sua consulta, ou simplesmente consulte a propriedade ‘ max_num_pages‘.

Nota: Quando você usa o get_postsWordPress retorna apenas a postspropriedade ‘ ‘ (que é um array) do WP_Queryobjeto.

Loop usando get_posts

Ao usar get_posts, não usamos o usual “loop do WordPress”, em vez disso, usamos um loop de array PHP normal. Cada elemento no array são objetos post, e nenhuma redefinição é necessária depois que você terminar o loop. Tenha em mente que as tags de modelo (como the_title(), the_permalink()etc) não estão disponíveis dentro deste loop. Você precisará consultar as propriedades do objeto post (por exemplo $custom_post->ID, ).

Eu recomendo que você nomeie seus objetos de postagem com algo diferente de $post. Você pode encontrar problemas ao tentar acessar as propriedades do post (pode se referir ao objeto global do post e não ao post no loop).

Se você quiser usar tags de modelo para facilitar o acesso às informações da postagem (como the_title()e the_permalink()), poderá fazê-lo. Faça isso dizendo ao WordPress para configurar o objeto de postagem global dentro do loop com setup_postdata(). Se você fizer isso, precisará redefinir o estado wp_reset_postdata()após o loop.

$custom_query = get_posts([/ Arguments here /]); foreach ($custom_query as $post) { setup_postdata($post); // Template tags are available here, for example: the_title(); } wp_reset_postdata();

Tenha em mente que setup_postdatarequer que os objetos pelos quais você está fazendo o loop (a asparte ” ” no loop foreach) sejam nomeados $post! No primeiro exemplo eu nomeei os objetos post $custom_poste isso não funcionaria com setup_postdata().

No entanto, se você só precisa de acesso às informações básicas do post, você pode pular a configuração do objeto global do post e usar as get_tags " "-template correspondentes e o ID do post. Por exemplo, a tag the_permalink()só funciona corretamente se o objeto de postagem global estiver configurado, mas você pode solicitar o link permanente de postagem sem o objeto de postagem global simplesmente usando echo get_the_permalink($custom_post->ID).

Argumentos da consulta

Você pode encontrar a lista completa de todos os argumentos possíveis na página de documentação do WP_Query. Exemplos de parâmetros são postagens com termo(s) específico(s) de uma taxonomia, meta valores de postagem, tipos de postagem, inclusão ou exclusão de postagens específicas e toda uma gama de opções para ordenar os resultados. Há muitos para analisar cada um em detalhes, mas aqui estão alguns exemplos comuns de argumentos para consultar postagens.

Exemplo 1: postagens relacionadas da mesma categoria

Digamos que você queira mostrar “posts relacionados” no final de um único post. Deve mostrar uma seleção aleatória de 3 posts que estão na mesma categoria do post atual e deve excluir o post atual do resultado.

Os argumentos são bastante autoexplicativos. Peço apenas ‘ post‘ em ‘ post_typee no máximo 3 posts em ‘ posts_per_page'.

Para consultar posts em categorias, você pode construir uma tax_query ou usar o mais simples ‘ category__in‘ (NB: Só funciona para categoria de post). No exemplo acima eu uso wp_get_post_categories()para obter uma matriz de IDs de termo atribuídos ao post fornecido e uso isso para o argumento ‘ category__in‘.

Você pode excluir IDs de postagem com ‘ post__not_in‘ enquanto eu forneci o ID de postagem atual. Por fim, pedi uma ordem aleatória de posts configurando ‘ rand’em’ orderby‘. Você pode fornecer, por exemplo, ‘ title‘ ou ‘ date‘ para ordená-los de maneira diferente. Dê uma olhada na documentação para encomendar para ver o que é possível.

Exemplo 2: todas as postagens de um tipo de postagem personalizado com vários argumentos de ordenação

Neste exemplo, assumimos que você tem um tipo de postagem personalizado ‘ book‘ e em um modelo de página personalizado você deseja exibir todos os livros publicados. Você deseja ordenar as postagens principalmente por menu_order (o atributo da página, é um número que você pode definir por postagem) e, em segundo lugar, pelo título da postagem.

Novamente, os argumentos são bastante autoexplicativos. Solicito o tipo de postagem ‘ book‘ como ‘ post_type‘. Quando você definir ‘ posts_per_page‘ para -1 ele irá buscar todos (posts publicados, a menos que você especifique algo diferente no post_statusargumento ‘ ). Finalmente, forneço um array para ‘ orderby‘ para dizer ao WordPress para classificar as postagens principalmente por ordem de menu em ordem crescente e, em segundo lugar, título de postagem em ordem decrescente.

Exemplo 3: postagens com metadados personalizados

Vamos supor que você tenha um tipo de postagem personalizado ‘ book‘ e deseja consultar todos os livros inéditos ou um livro publicado entre os anos de 1990 e 2019.

Construir uma consulta usando post meta é melhor feito com meta_query(para argumentos meta muito simples, você pode usar meta_keye meta_valuediretamente). O meta_queryargumento ‘ ‘ requer um array, onde cada argumento é um array. Você pode controlar a relação entre cada argumento com ‘ relation‘, que eu configurei para ‘ OR‘ no exemplo acima.

Eu forneço dois argumentos de metadados para ‘ meta_query‘. A primeira simplesmente compara a meta-chave ‘ book_status‘ com o texto ‘ unpublished, e se for igual ela será incluída. No segundo argumento eu digo ao WordPress para obter qualquer valor na meta-chave ‘ year_published‘ que esteja entre os números 1990 e 2019.

Conclusão

Agora você deve ter uma compreensão básica dos dois métodos de consulta de postagens. Não há uma grande diferença, pois você pode criar a mesma consulta usando os dois, mas a maneira de lidar com os dois é diferente. Os três exemplos fornecidos de argumentos de consulta apenas tocam na superfície de quais consultas você pode criar. Consulte a documentação do WP_Query para obter uma visão geral completa com muitos exemplos.

Se você está curioso sobre como modificar a consulta global que o WordPress executa, tenho um post separado detalhando isso.

Fonte de gravação: awhitepixel.com

Este site usa cookies para melhorar sua experiência. Presumiremos que você está ok com isso, mas você pode cancelar, se desejar. Aceitar Consulte Mais informação