Operatorul tax_query "and" din Wordpress nu funcționează conform așteptărilor

24 aug. 2016, 05:20:48
Vizualizări: 25.2K
Voturi: 9

Am un tip de postare personalizată de tip image cu o taxonomie personalizată numită image_tag (este ierarhică asemenea categoriilor). Iată câteva exemple de etichete care ar putea fi utilizate:

Structură (id: 25)
- Casă (id: 56)
- Zgârie-nori
Natură
- Animal
- Plantă (id: 41)

Așadar, vreau să filtrez imaginile selectând mai multe etichete în conjuncție cu operatorul "and". De exemplu, să găsesc toate fotografiile cu plante și case.

$query_args = array(
  'post_type' => 'image',
  'tax_query' => array(
    array(
      'taxonomy' => 'image_tag',
      'terms' => array(41, 56),    // ID-urile pentru "plantă" și "casă"
      'operator' => 'and',
    ),
  ),
);

Asta funcționează bine, problema apare când încerc să includ termenii părinte, de exemplu:

$query_args = array(
  'post_type' => 'image',
  'tax_query' => array(
    array(
      'taxonomy' => 'image_tag',
      'terms' => array(25, 41),    // ID-urile pentru "structură" și "plantă"
      'operator' => 'and',
    ),
  ),
);

Atunci nu obțin niciun rezultat. Presupun că deoarece folosesc operatorul "and", WordPress nu include copiii termenului "Structură". Are cineva vreo idee cum pot face acest lucru să funcționeze sau o altă soluție pentru a obține acest rezultat?

0
Toate răspunsurile la întrebare 2
1
15

netestat, dar încearcă această variantă

'tax_query' => array(
   'relation' => 'AND',
    array(
      'taxonomy' => 'image_tag',
      'field'    => 'term_id',
      'terms'    => 25,
      'operator' => 'IN',
    ),
    array(
      'taxonomy' => 'image_tag',
      'field'    => 'term_id',
      'terms'    => 41,
      'operator' => 'IN',
    )
  ),

SAU

'tax_query' => array(
   'relation' => 'AND',
    array(
      'taxonomy' => 'image_tag',
      'field'    => 'term_id',
      'terms'    => array(25,41),
      'operator' => 'IN',
    ),
  ),
24 aug. 2016 06:09:02
Comentarii

Mulțumesc pentru timpul acordat! Pentru oricine altcineva care ar putea găsi acest lucru, prima soluție este cea corectă.

dkeeling dkeeling
26 aug. 2016 22:01:22
0

Încă nu pot comenta, dar în răspunsul acceptat, o ușoară modificare a celei de-a doua soluții este 'operator' => 'AND', iar variabila relation poate fi eliminată. Se pare că variabila operator specifică relația dintre termenii din interiorul array-ului său, în timp ce variabila relation specifică relația pentru grupurile de termeni. Sursa

18 iul. 2023 09:28:04