Tengo una página de inicio que muestra la home.php
plantilla, que contiene 2 barras laterales con widgets en ellas.
La consulta principal todavía incluye las 10 publicaciones estándar, pero como no las estoy mostrando, me gustaría eliminar por completo la consulta que se realiza en la base de datos. Si es necesario, un bucle de publicación vacío funcionará ya que no estoy usando el bucle principal en mi home.php
plantilla.
¿Cómo haría esto? Podría usar pre_get_posts
para minimizar y reducir la consulta, pero eso todavía me deja con una consulta muy rápida, ¿cómo la elimino por completo?
Respuestas:
El
posts_request
filtroHojeando a través del
WP_Query
encontramos esta parte de interés:Podríamos intentar eliminar la solicitud de inicio principal a través del
posts_request
filtro. Aquí hay un ejemplo:donde forzamos la
'fields' => 'ids'
salida anticipada.El
posts_pre_query
filtro (WP 4.6+)También podríamos usar el nuevo filtro
posts_pre_query
src disponible en WordPress 4.6+Este filtro permite omitir las consultas habituales de la base de datos para implementar una inyección de publicaciones personalizada.
Acabo de probar esto y noté que esto no evitará publicaciones pegajosas, opuestas al
posts_request
enfoque.Mira el boleto # 36687 para obtener más información y el ejemplo de @boonebgorges.
fuente
WP_Query
temprano, por ejemplo, a través de un argumento como'skip_query' => true
o incluso a través de un filtro, pero luego me doy cuenta de lo fácil que podría estropear los sitios en Internet, por lo que muchas maneras ;-) @TomJNowellsplit_the_query
justo debajo de las líneas, haga exactamente lo mismo, ¡pero me pregunto si no reduce la cantidad de consultas!'fields' => 'ids'
, y la uso mucho ;-)Aquí hay un buen truco que aprendí de @birgire, podemos detener la consulta principal agregando
AND where 0=1
a laWHERE
cláusula de la consulta SQL. Esto aún puede generar una consulta de base de datos, pero seguramente detendrá la consulta principal de las publicaciones.También puede intentar reemplazar la
WHERE
cláusula conwhere 0 = 1
en vez de
Desafortunadamente, no tengo tiempo para probar nada, pero este debería ser un buen punto de partida
fuente
$q->set( 'ignore_sticky_posts', true );
si acaso.Para referencia, antes: 45q, después: 42q
El código es muy similar al código utilizado por @birgire
fuente