Overriding The Loop com filtro ou gancho

4

Estou tentando substituir o objeto $wp_query por uma categoria específica, sem precisar criar um novo modelo e criar um novo objeto WP_Query .

Meu objetivo é alterar os dados disponíveis para o The Loop do padrão para essa solicitação para uma consulta personalizada.

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;
};

Isso não parece afetar o Loop, o que estou fazendo de errado?

    
por Andrei 13.10.2011 / 18:19

1 resposta

1

Isso parece funcionar, mas eu estaria interessado em ouvir de outras pessoas se é a maneira "correta" de fornecer esse tipo de substituição. Suponho que você esteja visitando uma página de arquivo de categoria, como enlace .

// 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' );

Isso provavelmente deve testar $query->is_archive também.

    
por Annika Backstrom 16.10.2011 / 16:45