Parametrul "tax_query" nu funcționează cu WP_Query

16 apr. 2012, 18:52:22
Vizualizări: 167K
Voturi: 33

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.

0
Toate răspunsurile la întrebare 3
6
72

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'
    )
),
16 apr. 2012 18:58:10
Comentarii

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

Josh Farneman Josh Farneman
16 apr. 2012 19:19:10

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".

Chip Bennett Chip Bennett
16 apr. 2012 19:21:03

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

djphinesse djphinesse
24 nov. 2014 01:45:40

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.

realgeek realgeek
13 apr. 2018 00:22:15

Mulțumesc frumos!! Chiar m-ai ajutat!

Lai32290 Lai32290
19 mai 2020 23:14:57

"Array de array-uri" încă creează probleme în 2022. Haha. Mulțumesc pentru răspuns.

Ejaz Ejaz
18 mai 2022 13:17:18
Arată celelalte 1 comentarii
0

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'],
        ],
    ],
]);
10 dec. 2021 19:20:54
0

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.

12 apr. 2023 10:30:09