¿Alternativa a query_posts para el ciclo principal? [duplicar]

14

Acabo de darme cuenta de que la documentación de query_posts () menciona algunas "desventajas" de usar query_posts para modificar la principal Bucle, en particular: 'provoca consultas SQL adicionales'.

Esto parece implicar que hay otra manera / una forma mejor. Obviamente, hay get_posts () y WP_Query para los bucles secundarios, pero no veo que aborden las "desventajas" enumeradas en la documentación del Codex.

Puedo ver que al esperar hasta que esté en la plantilla para ejecutar query_posts, WordPress ya ejecutó una consulta una vez y ahora es una segunda consulta que golpea a la primera (básicamente se ignora la primera). Esto definitivamente suena ineficiente (aunque quizás no sea un gran problema, ¿quién sabe?)

Mi pregunta es: ¿existe una alternativa a la consulta que no agrega "consultas SQL adicionales" o la documentación de Codex simplemente engaña?

    
pregunta Tom Auger 28.06.2011 - 19:48

1 respuesta

18

Cuando agregué los inconvenientes al Codex, estaba pensando principalmente en usar el filtro de 'solicitud' como una alternativa a query_posts ().

Ese filtro solo se ejecuta para la consulta principal, por lo que resuelve el problema con 'pre_get_posts', que se activa para cada consulta.

El inconveniente es que no tienes acceso a los indicadores de consulta como is_single () etc.

Esta es una forma en la que podría obtener acceso a ellos, sin hacer realmente las consultas SQL:

function alter_the_query( $request ) {
    $dummy_query = new WP_Query();  // the query isn't run if we don't pass any query vars
    $dummy_query->parse_query( $request );

    // this is the actual manipulation; do whatever you need here
    if ( $dummy_query->is_home() )
        $request['category_name'] = 'news';

    return $request;
}
add_filter( 'request', 'alter_the_query' );
    
respondido por el scribu 29.06.2011 - 04:21

Lea otras preguntas en las etiquetas