Anulando el Loop con filtro o gancho

4

Estoy intentando reemplazar el objeto $wp_query para una categoría específica, sin tener que lidiar con la creación de una nueva plantilla y la creación de un nuevo objeto WP_Query allí.

Mi objetivo es cambiar los datos disponibles de The Loop del valor predeterminado para esa solicitud a una 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;
};

Eso no parece afectar a The Loop en absoluto, ¿qué estoy haciendo mal?

    
pregunta Andrei 13.10.2011 - 18:19

1 respuesta

1

Esto parece funcionar, pero me interesaría escuchar de otros si es la forma "correcta" de proporcionar este tipo de anulación. Supongo que está visitando una página de archivo de categorías, 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' );

Esto probablemente debería probar también $query->is_archive .

    
respondido por el Annika Backstrom 16.10.2011 - 16:45

Lea otras preguntas en las etiquetas