pre_get_posts with tax_query produce un resultado vacío

4

Necesito ajustar el bucle principal para todas las páginas de archivo de la siguiente manera. He registrado una taxonomía personalizada "myposttypes". Cada publicación individual se asigna exactamente a un término de "myposttypes".

Si se trata de una categoría o página de archivo de etiquetas, solo las publicaciones con "myposttypes- > term1" deberían incluirse en el resultado de la consulta.

Si es una página de archivo de taxonomía personalizada, solo las publicaciones con "myposttypes- > term2" deben incluirse en el resultado de la consulta.

Ya he implementado el correspondiente pre_get_posts hook pero no obtengo ningún resultado para todas mis páginas de archivo. Tengo muchas publicaciones con las taxonomías correspondientes en mi blog, por lo que debería haber resultados.

Aquí está mi enfoque:

function wpmw_adjust_archive_queries( $query ) {
    if ( ! is_admin() && is_archive() && $query->is_main_query() ) {
        if ( is_category() || is_tag() ) $term_slug  = 'term1';
        if ( is_tax( 'beitragsarten', 'news' ) ) $term_slug = 'term2';

        $taxquery = array(
            'tax_query' => array(
                array(
                    'taxonomy' => 'myposttypes',
                    'field'    => 'slug',
                    'terms'    => $term_slug
                ),
            ),
        );

        $query->set( 'tax_query', $taxquery );
    }
}

add_action( 'pre_get_posts', 'wpmw_adjust_archive_queries' );

ACTUALIZACIÓN: Aquí está mi enfoque ajustado y simplificado, que todavía no funciona, lamentablemente. Obtengo un resultado vacío. I var_dump'ed $ query y tax_query parecen ser agregados correctamente a query_vars.

function wpmw_adjust_archive_queries( $query ) {
    if ( ! is_admin() && $query->is_archive() && $query->is_main_query() ) {

        $tax_query = $query->get( 'tax_query' ) ? : array();

        $tax_query[] = array(
            'taxonomy' => 'myposttypes',
            'field'    => 'slug',
            'terms'    => array( 'term1' ),
            'operator' => 'IN'
        );

        $query->set( 'tax_query', $tax_query );
    }
}

add_action( 'pre_get_posts', 'wpmw_adjust_archive_queries' );

Aquí está la parte correspondiente de $ consulta

[tax_query] => Array
                (
                    [0] => Array
                        (
                            [taxonomy] => myposttypes
                            [field] => slug
                            [terms] => Array
                                (
                                    [0] => term1
                                )

                            [operator] => IN
                        )

                )
    
pregunta EmWe 21.08.2018 - 11:12

1 respuesta

2

Usas tax_query incorrectamente. Echa un vistazo a Página del Codex

tax_query debe ser una matriz que puede contener:

  • relation : debe ser una cadena (AND / OR)
  • término de taxonomía: conjunto con taxonomía, campo, términos, etc. definidos.

En tu código, tu configuración tax_query para:

$taxquery = array(
    'post_type' => 'post',
    'tax_query' => array(
        array(
            'taxonomy' => 'myposttypes',
            'field'    => 'slug',
            'terms'    => $term_slug
        ),
     ),
);

Y debería ser:

$taxquery = array(
    array(
        'taxonomy' => 'myposttypes',
        'field'    => 'slug',
        'terms'    => $term_slug
    ),
);

post_type es otro parámetro, por lo que no puedes configurarlo dentro de tax_query .

Pero ... Aún debes tener cuidado, si cambias tax_query , puede que ya tenga un valor. Entonces, si quieres ser respetuoso con eso, debes usar algo como esto:

$tax_query = $query->get( 'tax_query' );
if ( ! is_array( $tax_query ) ) {
    $tax_query = array();
}
$taxquery[] = array(
    'taxonomy' => 'myposttypes',
    'field'    => 'slug',
    'terms'    => $term_slug
);
$query->set( 'tax_query', $taxquery );

De esta manera, agregará su consulta de impuestos a las consultas existentes y no las anulará.

    
respondido por el Krzysiek Dróżdż 21.08.2018 - 11:37

Lea otras preguntas en las etiquetas