Parametrul "tax_query" nu funcționează cu WP_Query
Am un tip de postare personalizat numit 'episode'. Atașat la 'episode' am o taxonomie personalizată numită 'video_type' care conține doi termeni: "bonus-footage" și "episode"; "episode" conține doi termeni copil "season-1" și "season-2" (alte sezoane vor fi adăugate în viitor). Vreau să preiau doar cea mai recentă postare de tipul 'episode' dar să nu includ nicio postare din termenul 'bonus-footage'. Mai jos este codul pe care îl folosesc pentru aceasta:
<?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();
// Fă ceva cu această postare.
endif;
?>
Interogarea funcționează conform așteptărilor dacă o postare din unul dintre termenii 'season' este cea mai nouă, dar dacă o postare din "bonus-footage" este cea mai nouă, atunci o încarcă pe aceea. Cu alte cuvinte, parametrii mei "tax_query" par să nu aibă niciun efect asupra interogării. Nu formatez corect "tax_query" sau îmi scapă altceva?
Am încercat de asemenea să setez "tax_query" astfel:
'tax_query' => array(
'taxonomy' => 'video_type',
'terms' => 'episode',
'field' => 'slug',
'include_children' => true,
'operator' => 'IN'
),
dar obțin același rezultat.

Parametrul tax_query
este un array de array-uri, nu doar un simplu array.
Aceasta:
'tax_query' => array(
'taxonomy' => 'video_type',
'terms' => 'episode',
'field' => 'slug',
'include_children' => true,
'operator' => 'IN'
),
Ar trebui să fie în schimb astfel:
'tax_query' => array(
array(
'taxonomy' => 'video_type',
'terms' => 'episode',
'field' => 'slug',
'include_children' => true,
'operator' => 'IN'
)
),

Mulțumesc, Chip. Sunt curios de motivul pentru care WordPress a construit-o în acest fel?

Pentru a putea efectua mai multe interogări taxonomice, folosind operatori booleeni. Vezi articolul din Codex la care am făcut link, în secțiunea "Multiple Taxonomy Handling".

A funcționat perfect pentru mine! Mulțumesc, omule, mă loveam cu capul de perete din cauza asta!

Nu reușesc să înțeleg cum să transform asta într-un parametru URL și să-l folosesc efectiv în WP_Query. Pur și simplu este ignorat.

De asemenea, merită să fii atent la modul în care formatezi corect regulile:
new WP_Query([
'post_type' => 'vehicle',
'tax_query' => [
'relation' => 'OR',
[
'taxonomy' => 'brand',
'field' => 'slug',
'terms' => 'bmw',
],
[
'taxonomy' => 'brand',
'field' => 'slug',
'terms' => 'mercedes',
]
],
]);
În acest fel, vei prelua vehicule care au marca bmw
SAU mercedes
.
Dacă dorești să preiei vehicule care au marca bmw
ȘI mercedes
:
new WP_Query([
'post_type' => 'vehicle',
'tax_query' => [
[
'taxonomy' => 'brand',
'field' => 'slug',
'terms' => ['bmw', 'mercedes'],
],
],
]);

Adăugând la răspunsul lui @Lucas, am observat că a trebuit să adaug cheia: 'operator' => 'AND' sub termeni pentru a efectua operația de AND. În caz contrar, interogarea continuă să folosească OR.
