El parámetro "tax_query" no funciona con WP_Query

17

Tengo un tipo de publicación personalizado llamado 'episodio'. Adjunto a 'episodio' tengo una taxonomía personalizada llamada 'video_type' que contiene dos términos: "bonus-footage" y "episode"; "episodio" contiene dos términos secundarios "temporada 1" y "temporada 2" (se agregarán otras temporadas en el futuro). Quiero obtener solo la publicación más reciente del tipo 'episodio', pero no incluir ninguna publicación del término 'material extra'. A continuación se muestra el código que estoy usando para esto:

<?php
$some_args = array(
    'tax_query' => array(
        'taxonomy' => 'video_type',
        'terms' => 'bonus-footage',
        'field' => 'slug',
        'include_children' => true,
        'operator' => 'NOT IN'
     ),
    'posts_per_page' => 1,
    'post_type' => 'episode',
);

$s = new WP_Query( $some_args );

if ( $s->have_posts() ) : $s->the_post();
    // Do something with this post.
endif;
?>

La consulta funciona como se espera si una publicación en uno de los términos de 'temporada' es la más nueva, pero si una publicación en "bonus-footage" es la más nueva, entonces está cargando esa. En otras palabras, mis parámetros "tax_query" parecen no tener ningún efecto en la consulta. ¿No estoy formateando "tax_query" correctamente o me falta algo más?

También he intentado configurar "tax_query" como se muestra a continuación:

'tax_query' => array(
        'taxonomy' => 'video_type',
        'terms' => 'episode',
        'field' => 'slug',
    'include_children' => true,
        'operator' => 'IN'
),

pero sigo obteniendo el mismo resultado.

Josh Farneman
fuente

Respuestas:

41

El tax_queryparámetro es una matriz de matrices , no solo una matriz.

Esta:

'tax_query' => array(
        'taxonomy' => 'video_type',
        'terms' => 'episode',
        'field' => 'slug',
        'include_children' => true,
        'operator' => 'IN'
),

En cambio debería ser esto:

'tax_query' => array(
    array(
        'taxonomy' => 'video_type',
        'terms' => 'episode',
        'field' => 'slug',
        'include_children' => true,
        'operator' => 'IN'
    )
),
Chip Bennett
fuente
1
Gracias chip. Tengo curiosidad por saber por qué Wordpress lo ha construido de esta manera.
Josh Farneman
3
Para que se puedan realizar múltiples consultas de impuestos, utilizando booleanos. Consulte la entrada del Codex vinculada, en la sección " Manejo de taxonomía múltiple ".
Chip Bennett
1
¡Funcionó como un encanto para mí! ¡Gracias hombre, estaba golpeando mi cabeza contra la pared con este!
Charles Blackwell
Parece que no puedo entender cómo traducir esto en un parámetro de URL y que WP_Query lo use realmente. Simplemente sigue siendo ignorado.
realgeek