O parâmetro "tax_query" não está funcionando com WP_Query


17

Eu tenho um tipo de postagem personalizado chamado 'episode'. Anexado a 'episode', tenho uma taxonomia personalizada chamada 'video_type' que contém dois termos: "bonus-footage" e "episode"; "episode" contém dois termos filhos "season 1" e "season 2" (outras temporadas serão adicionadas no futuro). Quero pegar apenas a postagem mais recente do tipo 'episódio', mas não incluir nenhuma postagem do termo 'metragem de bônus'. Abaixo está o código que estou usando para isso:

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

A consulta funciona conforme o esperado, se uma postagem em um dos termos da 'temporada' for a mais nova, mas se uma postagem em "bônus-metragem" for a mais nova, será carregada. Em outras palavras, meus parâmetros "tax_query" parecem não ter efeito na consulta. Não estou formatando o "tax_query" corretamente ou estou perdendo outra coisa?

Eu também tentei definir "tax_query" como abaixo:

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

mas ainda estou obtendo o mesmo resultado.

Respostas:


41

O tax_queryparâmetro é uma matriz de matrizes , não apenas uma matriz.

Este:

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

Em vez disso deve ser o seguinte:

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

1
Obrigado Chip. Estou curioso para saber o motivo pelo qual o Wordpress foi construído dessa maneira.
Josh Farneman

3
Para que várias consultas fiscais possam ser realizadas, usando booleanos. Consulte a entrada do Codex vinculada, na seção " Manipulação de taxonomia múltipla ".
Chip Bennett

1
Caiu como uma luva para mim! Obrigado cara, eu estava batendo com a cabeça na parede!
Charles Blackwell

Não consigo descobrir como traduzir isso em um parâmetro de url e usá-lo realmente pelo WP_Query. Ele continua sendo ignorado.
realgeek
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.