web-dev-qa-db-fra.com

Remplacer la boucle avec un filtre ou un crochet

J'essaie de remplacer l'objet $wp_query pour une catégorie spécifique, sans avoir à créer un nouveau modèle et à créer un nouvel objet WP_Query à cet endroit.

Mon objectif est de changer les données disponibles pour The Loop de la valeur par défaut pour cette demande en une requête personnalisée.

add_filter( 'pre_get_posts', 'custom_wpquery' );

function custom_wpquery( $query ){
global $wp_query;
   if (is_category(121)) {
             if ($wp_query === $query) {
                   $query = new WP_Query('page_id=146');
                   $query->set('page_id', 146);
             }
   }
  return $query;
};

Cela ne semble pas du tout affecter The Loop, qu'est-ce que je fais mal?

4
Andrei

Cela semble fonctionner, mais j'aimerais entendre d'autres personnes si c'est la "bonne" façon de fournir ce type de dérogation. Je suppose que vous visitez une page d’archive des catégories, telle que http://www.example.com/category/computers/ .

// landing page = 188
// category = "computers" (#8)

function custom_wpquery( $query ){
    // the main query
    global $wp_the_query;

    if ( 'computers' === $query->get( 'category_name' ) ) {
        if ( $wp_the_query === $query) {
            // reset and override the active query
            $query->init();
            $query->query( 'page_id=188' );
        }
    }
};
add_filter( 'pre_get_posts', 'custom_wpquery' );

Cela devrait probablement tester $query->is_archive également.

1
Annika Backstrom