Alternative à query_posts pour la boucle principale? [dupliquer]

14

Je viens de remarquer aujourd’hui que la documentation de query_posts () mentionne quelques "inconvénients" liés à l’utilisation de query_posts pour modifier le paramètre principal. Boucle, notamment: "provoque des requêtes SQL supplémentaires".

Cela semble impliquer qu’il existe un autre moyen / un meilleur moyen. Bien sûr, il y a get_posts () et WP_Query pour les boucles secondaires, mais je ne les vois pas pour remédier aux "inconvénients" énumérés dans la documentation du Codex.

Je peux voir qu'en attendant d'avoir le modèle en main pour exécuter query_posts, WordPress a déjà lancé une requête et qu'il s'agit maintenant d'une deuxième requête qui masque la première (la première étant pratiquement ignorée). Cela sonne vraiment inefficace (mais peut-être pas un gros problème, qui sait?)

Ma question est la suivante: existe-t-il une alternative à query_posts qui N'Ajoute PAS de "requêtes SQL supplémentaires" ou la documentation du Codex est-elle simplement trompeuse?

    
posée Tom Auger 28.06.2011 - 19:48

1 réponse

18

Lorsque j'ai ajouté les inconvénients au Codex, je pensais principalement à utiliser le filtre "request" comme alternative à query_posts ().

Ce filtre n'est exécuté que pour la requête principale, ce qui résout le problème lié à 'pre_get_posts', qui se déclenche pour chaque requête.

L'inconvénient est que vous n'avez pas accès aux indicateurs de requête tels que is_single (), etc.

Voici un moyen d’y accéder sans passer par les requêtes 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' );
    
réponse donnée scribu 29.06.2011 - 04:21

Lire d'autres questions sur les étiquettes