Pesquisei no Google e no WPSE e a única coisa que vejo repetidamente é o uso showposts
, que foi preterido.
Estou familiarizado com WP_Query
, e eu pensei que se eu definir posts_per_page
a minha limite (ie. 5), e nopaging
para true
, que se tornaria a algo como " Ok, eu vou dar-lhe apenas 5 mensagens ". Mas isso não funciona.
Como posso fazer isso?
'posts_per_page=5'
found_posts
propriedade, ele indica um número maior que 5. Quero que minha consulta mantenha apenas 5 postagens. É possível? @PieterGoosennopaging
parâmetro, definindo que para os verdadeiros meios para obter todas as mensagensnopaging
parâmetro, ele obtém o padrãofalse
, portanto, o frontpage mostra 5 postagens, mas a consulta mantém mais. Eu adiciono uma imagem à pergunta.Respostas:
Eu acho que agora eu entendo o que você está tentando fazer. Quando você executa uma consulta personalizada
WP_Query
e define o limite para obter apenas 5 postagens por página, apenas 5 postagens serão recuperadas pela consulta e essa consulta retém apenas 5 postagens, MAS , por uma questão de paginação,WP_Query
ainda é executada em todo o banco de dados e conta todas as postagens que correspondem aos critérios da consulta.Isso pode ser visto quando você olha para as propriedades
$found_posts
e$max_num_pages
da consulta. Vamos dar um exemplo:Você tem 20 postagens pertencentes ao tipo de postagem padrão
post
. Você só precisa das 5 últimas postagens sem paginação. Sua consulta tem esta aparênciavar_dump( $q->posts )
fornecerá as últimas 5 postagens conforme o esperadoecho $q->found_posts
Darei à você20
echo $q->max_num_pages
Darei à você4
O impacto desse trabalho extra é mínimo em sites com apenas algumas postagens, mas isso pode custar caro se você estiver executando um site com centenas ou milhares de postagens. Isso é um desperdício de recursos, se você precisar apenas das 5 últimas postagens
Existe um parâmetro não documentado chamado
no_found_rows
que usa valores booleanos que você pode usar para fazer sua consulta ser resgatada após encontrar as 5 postagens necessárias. Isso forçará aWP_Query
não procurar mais postagens que atendam aos critérios depois de recuperar a quantidade de postagens consultadas. Esse parâmetro já está incorporadoget_posts
, por issoget_posts
é um pouco mais rápido doWP_Query
que oget_posts
uso deWP_Query
Conclusão
Em conclusão, se você não usar a paginação em uma consulta, é sempre aconselhável
'no_found_rows=true'
em sua consulta acelerar as coisas e economizar em desperdiçar recursos.fonte
Após a conversa com @Pieter Goosen sobre os comentários da pergunta, acho que posso responder à pergunta e explicar meu erro.
A chave é que
found_posts
estava me confundindo. Eu acho que esse número são os posts recuperados, mas não o são. É o número de postagens que correspondem aos critérios . É como asWP_Query
duas partes: uma para encontrar (todas) as postagens e outra para buscar o conteúdo, quando verifica ospagination
parâmetros. Portanto, temos a$post_count
propriedade que é o número de postagens buscadas (diz o CodexThe number of posts being displayed
), que obviamente é igual ao número noposts_per_page
parâmetro e o número de itens na$posts
propriedade da matriz.Então
WP_Query
não está fazendo nenhum trabalho inútil, como eu pensei ^^Espero que isso ajude os outros!
fonte
Ok, permite que você tenha um tipo de postagem chamado 'blog_posts' e deseja buscar 5 postagens desse tipo de postagem. Aqui está o que você precisa fazer
A consulta acima retornará 5 postagens do tipo 'blog_posts', se não for um tipo de postagem personalizada, substitua-a assim
'post_type' => 'posts',
se você deseja buscar todas as postagens e substitua-a assim'posts_per_page' => '-1',
, para obter mais detalhes WP Queryfonte
Eu sei que @ user1750063 mencionou o código, mas tente isso
fonte
id
é inválido como umorderby
valor epagination
é um parâmetro inválidopagination
não é um parâmetro válido. Você quer dizer'nopaging' => true
? Se sim, receberei TODAS as postagens. Não é isso que eu quero. @PieterGoosen Acho que ele quis dizerID
.ID
, nãoid