Tengo la siguiente consulta que llamo en mi plantilla taxonomy.php a través de query_brands_geo('dealers', 'publish', '1', $taxtype, $geo, $brands);
Esta función funciona perfectamente. Sin embargo, después de leer el códice para publicaciones de consultas, mencionó pre_get_posts como una forma preferida de alterar la consulta predeterminada. ¿Pre_get_posts sería más eficiente que mi función wp_query a continuación?
Si es así, ¿cómo construiría pre_get_posts y pasaría mi variable y consulta a continuación?
function my_custom_query($posttype, $poststatus, $paidvalue, $taxtype, $geo, $brands) {
global $wp_query;
$wp_query = new WP_Query();
$args = array(
'post_type' => $posttype,
'post_status' => array($poststatus),
'orderby' => 'rand',
'posts_per_page' => 30,
'meta_query' => array(
array(
'key' => 'wpcf-paid',
'value' => array($paidvalue),
'compare' => 'IN',
)
),
'tax_query' => array(
'relation' => 'AND',
array(
'taxonomy' => $taxtype,
'field' => 'slug',
'terms' => $geo
),
array(
'taxonomy' => 'brands',
'field' => 'slug',
'terms' => $brands
)
)
);
return $wp_query->query($args);
}
fuente
$wp_query
objeto y las cosas fallarán por completo. Aparte de eso, simplemente no es cierto quepre_get_posts
se ejecutará una consulta adicional ...La respuesta tardía como la respuesta más votada interrumpirá su consulta y simplemente no es cierto en algunos puntos importantes.
El principal WP_Query y sus filtros
Primero, WordPress usa internamente
query_posts()
(un envoltorio delgadoWP_Query
que no debe usarse en temas o complementos) para hacer unaWP_Query
. EstoWP_Query
está actuando como el bucle principal / consulta. Esta consulta se ejecutará a través de muchos filtros y acciones hasta que se construya la cadena de consulta SQL real. Uno de esos espre_get_posts
. Otros sonposts_clauses
,posts_where
etc., que también le permiten interceptar el proceso de creación de cadenas de consulta.Una mirada en profundidad a lo que sucede dentro del núcleo
Conclusión
Si realmente desea modificar la consulta principal, puede usar una amplia variedad de filtros. Simplemente use
$query->set( 'some_key', 'some_value' );
para cambiar datos allí o use$query->get( 'some_key' );
para recuperar datos para hacer verificaciones condicionales. Esto le ahorrará hacer una segunda consulta, ya que solo está alterando la consulta SQL.Si tiene que hacer una consulta adicional , vaya con un
WP_Query
objeto. Esto agregará otra consulta a la base de datos.Ejemplo
Como las respuestas siempre funcionan mejor con un ejemplo, aquí tienes uno realmente bueno (accesorios para Brad Touesnard), que simplemente extiende el objeto central y, por lo tanto, es bastante reutilizable (crea un complemento):
Luego puede ejecutar su segunda consulta / adicional como puede ver en el siguiente ejemplo. No olvide restablecer su consulta después.
fuente
Consulte las respuestas en Cuándo usar WP_query (), query_posts () y pre_get_posts .
Es un gran recurso si tiene alguna duda en mente.
fuente