Filtrare i risultati di WP_Query per categoria
Usando WP_Query, ho bisogno di raccogliere una selezione di post che sono sia Categoria1 che Categoria2. Voglio che questa selezione includa Categoria1 e tutte le sue sottocategorie (Categoria3 e Categoria4), purché siano anche etichettate come Categoria2, anche se non sono etichettate come Categoria1.
Categorie: Nome ID Genitore Categoria1 1 Categoria2 2 Categoria3 3 1 Categoria4 4 1 Post: ID Categorie 1 1,2 2 2,3 3 2,4
Ora, se usassi WP_Query per trovare post solo in Categoria1, sembra trovare tutti e tre i post includendo Post2 e Post3 poiché Categoria3 e Categoria4 sono sottocategorie di Categoria1 anche se i post non appartengono a Categoria1.
new WP_Query(
array(
'cat' => 1
)
Tuttavia, se uso 'category__and' per trovare post che sono sia Categoria1 che Categoria2
new WP_Query(
array(
'category__and' => array(1, 2)
)
trova solo Post1 che ha sia Categoria1 che Categoria2, ma non troverà Post2 che è Categoria2 e Categoria3 o Post3, anche se Categoria3 e Categoria4 sono sottocategorie di Categoria1.
C'è un modo per prendere il risultato di questo:
new WP_Query(
array(
'cat' => 1
)
Che trova post che sono Categoria1 E sottocategorie di Categoria1, anche se non sono anche Categoria1...
E poi filtrarlo per includere solo quei post che sono anche Categoria2?
Grazie per qualsiasi suggerimento.

Quello che viene descritto è il modo in cui dovrebbe funzionare:
cat_id
non è un argomento valido, quindi ottieni post da tutte le categorie. Usacat
per impostare un ID di categoria o un array di ID di categorie. Per esempio:
Ottieni post dalla categoria 1:
new WP_Query(
array(
'cat' => 1
)
Ottieni post dalla categoria 1 e dalla categoria 2 (non necessariamente in entrambe)
new WP_Query(
array(
'cat' => array( 1, 2 )
)
category__and
trova i post che appartengono a tutte le categorie specificate. Per esempio:
Ottieni post che sono sia nella categoria 1 che nella 2:
new WP_Query(
array(
'category__and' => array( 1, 2 )
)
Maggiori dettagli su WP Query, parametri delle categorie.

Scusa, ho digitato erroneamente 'cat' come 'cat_id' nella domanda precedente, ma in realtà sto usando 'cat' nel mio codice funzionante. Quindi questo non risponde ancora alla mia domanda. Voglio trovare tutti i post che sono in Category2 E (Category1 O Sottocategorie di Category1). Il tuo codice 'category__and' non trova le sottocategorie

I parametri delle categorie di WP_Query
non hanno questo tipo di logica. category__and
e category__in
non restituiscono i post nelle categorie figlie delle categorie impostate.
Suggerirei di utilizzare i parametri tax_query
in WP_Query
, che hanno la logica che stai cercando. Il parametro relation
ha due possibili valori, AND
e OR
relation (string) - La relazione logica tra ogni array di tassonomia interno quando ce n'è più di uno. I valori possibili sono 'AND', 'OR'. Non utilizzare con un singolo array di tassonomia interno.
Inoltre, per impostazione predefinita, i termini figli sono inclusi in un tax_query
, ed è proprio ciò di cui hai bisogno.
include_children (boolean) - Se includere o meno i figli per tassonomie gerarchiche. Il valore predefinito è true.
Puoi fare qualcosa del genere:
$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 );
Questo codice cerca i post che si trovano nella categoria 1 e nelle sue categorie figlie, inoltre verifica se questi post della categoria 1 e delle sue categorie figlie sono anche nella categoria 2. L'elenco dei post restituiti sarà composto da post che si trovano nella categoria 1 o in una qualsiasi delle sue categorie figlie e che sono anche nella categoria 2.
Ho escluso le categorie figlie dalla categoria 2, ma puoi rimuovere questa impostazione se necessario.
