Il parametro "tax_query" non funziona con WP_Query
Ho un tipo di post personalizzato chiamato 'episode'. Ad 'episode' ho collegato una tassonomia personalizzata chiamata 'video_type' che contiene due termini: "bonus-footage" e "episode"; "episode" contiene due termini figli "season-1" e "season-2" (altre stagioni verranno aggiunte in futuro). Voglio recuperare solo il post più recente del tipo 'episode' ma non includere nessun post dal termine 'bonus-footage'. Di seguito il codice che sto utilizzando:
<?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();
// Fai qualcosa con questo post.
endif;
?>
La query funziona come previsto se un post in uno dei termini 'season' è il più recente, ma se un post in "bonus-footage" è il più recente, allora carica quello. In altre parole, i miei parametri "tax_query" sembrano non avere effetto sulla query. Non sto formattando correttamente la "tax_query" o mi sta sfuggendo qualcos'altro?
Ho anche provato a impostare "tax_query" come segue:
'tax_query' => array(
'taxonomy' => 'video_type',
'terms' => 'episode',
'field' => 'slug',
'include_children' => true,
'operator' => 'IN'
),
ma ottengo ancora lo stesso risultato.

Il parametro tax_query
è un array di array, non solo un array.
Questo:
'tax_query' => array(
'taxonomy' => 'video_type',
'terms' => 'episode',
'field' => 'slug',
'include_children' => true,
'operator' => 'IN'
),
Dovrebbe invece essere così:
'tax_query' => array(
array(
'taxonomy' => 'video_type',
'terms' => 'episode',
'field' => 'slug',
'include_children' => true,
'operator' => 'IN'
)
),

Grazie Chip. Sono curioso di sapere perché Wordpress è strutturato in questo modo?

Per poter eseguire più query tassonomiche, utilizzando operatori booleani. Vedi la voce del Codex collegata, nella sezione "Gestione di Tassonomie Multiple".

Ha funzionato perfettamente per me! Grazie mille, mi stavo scervellando su questo problema!

Non riesco a capire come convertire questo in un parametro URL e farlo effettivamente utilizzare da WP_Query. Continua semplicemente a essere ignorato.

È anche importante prestare attenzione alla corretta formattazione delle regole:
new WP_Query([
'post_type' => 'vehicle',
'tax_query' => [
'relation' => 'OR',
[
'taxonomy' => 'brand',
'field' => 'slug',
'terms' => 'bmw',
],
[
'taxonomy' => 'brand',
'field' => 'slug',
'terms' => 'mercedes',
]
],
]);
In questo modo stai recuperando i veicoli che hanno come marca bmw
OPPURE mercedes
.
Se invece vuoi recuperare i veicoli che hanno come marca bmw
E mercedes
:
new WP_Query([
'post_type' => 'vehicle',
'tax_query' => [
[
'taxonomy' => 'brand',
'field' => 'slug',
'terms' => ['bmw', 'mercedes'],
],
],
]);

Aggiungendo alla risposta di @Lucas, ho notato che dovevo aggiungere la chiave: 'operator' => 'AND' sotto terms per eseguire l'operazione AND. Altrimenti, la query continua a fare l'OR.
