Filtrarea rezultatului WP_Query după categorie
Folosind WP_Query, am nevoie să adun o selecție de postări care sunt atât în Categoria1 cât și în Categoria2. Vreau ca această selecție să includă Categoria1 și toate subcategoriile sale (Categoria3 și Categoria4), atâta timp cât acestea sunt etichetate și cu Categoria2, chiar dacă nu sunt etichetate cu Categoria1.
Categorii: Nume ID Părinte Categoria1 1 Categoria2 2 Categoria3 3 1 Categoria4 4 1 Postări: ID Categorii 1 1,2 2 2,3 3 2,4
Acum, dacă aș folosi WP_Query pentru a găsi postări doar în Categoria1, pare să găsească toate cele trei postări, inclusiv Postarea2 și Postarea3, deoarece Categoria3 și Categoria4 sunt subcategorii ale Categoriei1, chiar dacă postările nu sunt în Categoria1.
new WP_Query(
array(
'cat' => 1
)
Totuși, dacă folosesc 'category__and' pentru a găsi postări care sunt atât în Categoria1 cât și în Categoria2
new WP_Query(
array(
'category__and' => array(1, 2)
)
găsește doar Postarea1 care are atât Categoria1 cât și Categoria2, dar nu va găsi Postarea2 care este în Categoria2 și Categoria3 sau Postarea3, chiar dacă Categoria3 și Categoria4 sunt subcategorii ale Categoriei1.
Există vreo modalitate prin care pot lua rezultatul acestei interogări:
new WP_Query(
array(
'cat' => 1
)
Care găsește postări ce sunt în Categoria1 ȘI subcategorii ale Categoriei1, chiar dacă nu sunt și în Categoria1...
Și apoi să o filtrez pentru a include doar acele postări care sunt și în Categoria2?
Mulțumesc pentru orice sugestii.

Descrierea de mai jos explică modul în care ar trebui să funcționeze:
cat_id
nu este un argument valid, așadar veți primi articole din toate categoriile. Folosițicat
pentru a seta un ID de categorie sau un array de ID-uri de categorii. De exemplu:
Obțineți articole din categoria 1:
new WP_Query(
array(
'cat' => 1
)
Obțineți articole din categoria 1 și din categoria 2 (nu neapărat din ambele simultan)
new WP_Query(
array(
'cat' => array( 1, 2 )
)
category__and
găsește articole care aparțin tuturor categoriilor specificate. De exemplu:
Obțineți articole care se află în ambele categorii, 1 și 2:
new WP_Query(
array(
'category__and' => array( 1, 2 )
)
Mai multe detalii în WP Query, parametrii pentru categorii.

Scuze, am greșit tastând 'cat' ca 'cat_id' în întrebarea de mai sus, dar 'cat' este ceea ce folosesc de fapt în codul meu funcțional. Deci asta nu răspunde încă la întrebarea mea. Vreau să găsesc toate articolele care sunt în Category2 ȘI (Category1 SAU Subcategoriile din Category1). Codul tău cu 'category__and' nu găsește subcategoriile.

Parametrii de categorie ai WP_Query
nu au acest tip de logică. category__and
și category__in
nu returnează postări din categoriile copil ale categoriilor setate.
Aș sugera să folosești parametrii tax_query
în WP_Query
, care au logica pe care o cauți. Parametrul relation
are două valori posibile, AND
și OR
relation (string) - Relația logică între fiecare array de taxonomie internă atunci când există mai multe. Valorile posibile sunt 'AND', 'OR'. Nu utilizați cu un singur array de taxonomie internă.
De asemenea, în mod implicit, termenii copil sunt incluși într-un tax_query
, iar asta este ceea ce ai nevoie.
include_children (boolean) - Dacă să includă sau nu copiii pentru taxonomiile ierarhice. Valoarea implicită este true.
Poți face ceva de genul acesta:
$args = array(
'post_type' => 'post',
'tax_query' => array(
'relation' => 'AND',
array(
'taxonomy' => 'category',
'field' => 'term_id',
'terms' => 1,
),
array(
'taxonomy' => 'category',
'field' => 'term_id',
'terms' => 2,
'include_children' => false,
),
),
);
$query = new WP_Query( $args );
Ce face acest cod, caută postări care sunt în categoria 1 și în categoriile sale copil, de asemenea, verifică dacă aceste postări din categoria 1 și categoriile sale copil sunt de asemenea în categoria 2. Lista de postări returnate va fi formată din postările care sunt în categoria 1 sau oricare dintre categoriile sale copil și care sunt de asemenea în categoria 2.
Am exclus categoriile copil din categoria 2, dar poți elimina această opțiune dacă este necesar.
