Eu tenho uma página inicial exibindo o home.php
modelo, contendo 2 barras laterais com widgets.
A consulta principal ainda recebe as 10 postagens padrão, mas como não as estou exibindo, gostaria de eliminar completamente a consulta que está sendo feita no banco de dados. Se necessário, um loop de postagem vazio fará como eu não estiver usando o loop principal no meu home.php
modelo.
Como eu faria isso? Eu poderia usar pre_get_posts
para minimizar e reduzir a consulta, mas isso ainda me deixa com uma consulta muito rápida, como a elimino totalmente?
Respostas:
O
posts_request
filtroPercorrendo a página
WP_Query
, encontramos essa parte de interesse:Podemos tentar eliminar a solicitação inicial principal através do
posts_request
filtro. Aqui está um exemplo:onde forçamos a
'fields' => 'ids'
saída antecipada.O
posts_pre_query
filtro (WP 4.6+)Também poderíamos usar o novo filtro
posts_pre_query
src disponível no WordPress 4.6+Esse filtro permite ignorar as consultas usuais do banco de dados para implementar uma injeção de postagens personalizada.
Acabei de testar isso e notei que isso não impedirá postagens pegajosas, ao contrário da
posts_request
abordagem.Confira o ticket nº 36687 para obter mais informações e o exemplo de @boonebgorges.
fonte
WP_Query
cedo, por exemplo, através de um argumento como'skip_query' => true
ou mesmo através de um filtro, mas então eu percebo o quão facilmente isso poderia atrapalhar sites na Internet, então Várias maneiras ;-) @TomJNowellsplit_the_query
logo abaixo das linhas, faça exatamente o mesmo, mas será que isso não reduz o número de consultas!'fields' => 'ids'
, e eu usá-lo muito ;-)Aqui está um truque interessante que aprendi com o @birgire; podemos interromper a consulta principal anexando
AND where 0=1
àWHERE
cláusula da consulta SQL. Isso ainda pode resultar em uma consulta de banco de dados, mas certamente impedirá a consulta principal de consultar postagensVocê também pode apenas tentar substituir a
WHERE
cláusula porwhere 0 = 1
ao invés de
Infelizmente, não tenho tempo para testar nada, mas esse deve ser um bom ponto de partida
fonte
$q->set( 'ignore_sticky_posts', true );
por precaução.Para referência, antes: 45q, depois: 42q
O código é muito semelhante ao código usado por @birgire
fonte