Il parametro "tax_query" non funziona con WP_Query

16 apr 2012, 18:52:22
Visualizzazioni: 167K
Voti: 33

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.

0
Tutte le risposte alla domanda 3
6
72

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

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

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

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

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

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

djphinesse djphinesse
24 nov 2014 01:45:40

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

realgeek realgeek
13 apr 2018 00:22:15

Grazie mille!! Questo mi aiuta davvero!

Lai32290 Lai32290
19 mag 2020 23:14:57

"Array di array" ancora causa problemi nel 2022. Haha. Grazie per la risposta.

Ejaz Ejaz
18 mag 2022 13:17:18
Mostra i restanti 1 commenti
0

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

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.

12 apr 2023 10:30:09