Filtrare i risultati di WP_Query per categoria

14 set 2014, 05:58:27
Visualizzazioni: 33.6K
Voti: 2

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.

3
Commenti

Ho digitato erroneamente 'cat' come 'cat_id' nella domanda precedente, ma in realtà nel mio codice funzionante sto usando 'cat'. Il codice della domanda è stato corretto.

user79283 user79283
14 set 2014 17:08:13

ho aggiunto alcune chiarificazioni aggiuntive

user79283 user79283
14 set 2014 17:15:10

Benvenuto su WPSE. Se non l'hai già fatto, ti invitiamo a consultare [ask] e a visitare la nostra pagina [tour]. È importante assicurarsi di fornire dettagli/codice corretti per ricevere aiuto. Questo evita anche che la tua domanda venga chiusa a causa di errori di sintassi. :-)

Pieter Goosen Pieter Goosen
14 set 2014 19:14:53
Tutte le risposte alla domanda 2
1

Quello che viene descritto è il modo in cui dovrebbe funzionare:

  • cat_id non è un argomento valido, quindi ottieni post da tutte le categorie. Usa cat 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.

14 set 2014 12:59:32
Commenti

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

user79283 user79283
14 set 2014 17:10:36
2

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.

14 set 2014 19:11:43
Commenti

Fantastico - ha funzionato. Vorrei votare la tua risposta, ma non ho ancora abbastanza reputazione. Grazie per l'aiuto!

user79283 user79283
14 set 2014 19:30:00

Nessun problema. Sono contento che abbia funzionato. Buon lavoro :-)

Pieter Goosen Pieter Goosen
14 set 2014 19:32:53