Operatore tax_query "and" di WordPress non funziona come desiderato

24 ago 2016, 05:20:48
Visualizzazioni: 25.2K
Voti: 9

Ho un tipo di post personalizzato chiamato image con una tassonomia personalizzata chiamata image_tag (è gerarchica come le categorie). Ecco alcuni esempi dei tag che potrebbero essere utilizzati:

Struttura (id: 25)
- Casa (id: 56)
- Grattacielo
Natura
- Animale
- Pianta (id: 41)

Voglio filtrare le immagini selezionando più tag in congiunzione con l'operatore "and". Per esempio, trovare tutte le foto con piante e case.

$query_args = array(
  'post_type' => 'image',
  'tax_query' => array(
    array(
      'taxonomy' => 'image_tag',
      'terms' => array(41, 56),    // ID di "pianta" e "casa"
      'operator' => 'and',
    ),
  ),
);

Questo funziona bene, il problema inizia quando provo a includere i termini padre, per esempio:

$query_args = array(
  'post_type' => 'image',
  'tax_query' => array(
    array(
      'taxonomy' => 'image_tag',
      'terms' => array(25, 41),    // ID di "struttura" e "pianta"
      'operator' => 'and',
    ),
  ),
);

In questo caso non ottengo risultati. Suppongo che, poiché sto usando l'operatore "and", WordPress non includa i figli del termine "Struttura". Qualcuno ha un'idea su come farlo funzionare o qualche altra soluzione per ottenere questo risultato?

0
Tutte le risposte alla domanda 2
1
15

non testato ma prova questo

'tax_query' => array(
   'relation' => 'AND',
    array(
      'taxonomy' => 'image_tag', // tassonomia
      'field'    => 'term_id',   // campo
      'terms'    => 25,          // termini
      'operator' => 'IN',        // operatore
    ),
    array(
      'taxonomy' => 'image_tag',
      'field'    => 'term_id',
      'terms'    => 41,
      'operator' => 'IN',
    )
  ),

OPPURE

'tax_query' => array(
   'relation' => 'AND',
    array(
      'taxonomy' => 'image_tag',
      'field'    => 'term_id',
      'terms'    => array(25,41), // array di termini
      'operator' => 'IN',
    ),
  ),
24 ago 2016 06:09:02
Commenti

Grazie per il tuo tempo! Per chiunque altro possa trovarlo, la prima soluzione è quella corretta.

dkeeling dkeeling
26 ago 2016 22:01:22
0

Non posso ancora commentare, ma sulla risposta accettata, una leggera modifica alla seconda soluzione è 'operator' => 'AND', e la variabile relation può essere eliminata. Sembra che la variabile operator specifichi la relazione tra i termini all'interno del suo array, mentre la variabile relation specifica la relazione per gruppi di termini. Fonte

18 lug 2023 09:28:04