Query dei post per ID di tassonomia personalizzata

7 ott 2011, 16:06:24
Visualizzazioni: 47.7K
Voti: 8

Ho un tipo di post personalizzato chiamato portfolio e una tassonomia personalizzata chiamata build-type (che funge da categorie)

Sto cercando di eseguire una query dei post di tipo portfolio per ID di build-type, ad esempio tutti i post del Portfolio nella categoria "Hotels" (id=4 per quella tassonomia)

// ottiene l'ID da un campo personalizzato per mostrare i post su una pagina specifica
$buildType = get_post_meta($post->ID, 'build_type_id', true);
// esegue la query
query_posts(array( 
    'post_type' => 'portfolio',
    'showposts' => -1,
    'tax_query' => array(
        'taxonomy' => 'build-type',
        'terms' => $buildType,
        'field' => 'term_id'
    ),
    'orderby' => 'title',
    'order' => 'ASC'
));

Attualmente sta richiamando tutti i post di tipo portfolio e non solo quelli con l'ID di build-type specificato

Per 'field' => 'term_id' dovrei usare term_id, tag_ID, id o qualcos'altro?

Qualcuno sa come farlo funzionare?

Grazie in anticipo!

0
Tutte le risposte alla domanda 4
2
14

Il motivo per cui non funziona è perché 'tax_query' deve essere un array di array (so che può creare confusione).

...

'tax_query' => array(
    array(
        'taxonomy' => 'build-type',

...

È strutturato in questo modo per consentire di raggruppare insieme diverse regole.

7 ott 2011 19:00:40
Commenti

Ottimo lavoro Drew. Questo ha risolto il problema. Ho pubblicato lo script finale su Github https://gist.github.com/1275191

mattberridge mattberridge
10 ott 2011 15:36:04

Grazie! Ho speso un'ora del budget del cliente per risolvere questo piccolo problema :)

Tom Tom
9 gen 2017 17:34:10
3

Drew aveva ragione, tax-query deve essere un array di array

La soluzione finale è:

// ottiene l'ID da un campo personalizzato per mostrare gli articoli in una pagina specifica
$buildType = get_post_meta($post->ID, 'build_type_id', true);
// esegue la query
query_posts(array( 
    'post_type' => 'portfolio',
    'showposts' => -1,
    'tax_query' => array(
        array(
            'taxonomy' => 'build-type',
            'terms' => $buildType,
            'field' => 'term_id',
        )
    ),
    'orderby' => 'title',
    'order' => 'ASC' )
);

Su github qui:

https://gist.github.com/1275191

Grazie!

19 ott 2011 11:27:49
Commenti

Non accettare la mia risposta e accettare la tua mi ha fatto davvero male... mi ha spezzato il cuore. Se qualcuno ha bisogno di me, sarò nella lounge.

Drew Gourley Drew Gourley
19 ott 2011 16:07:24

Ahah scusa amico. Sono nuovo a tutto questo, non sapevo che si potesse avere solo una risposta accettata. Lo ricambierò così potrai tornare fuori dalla lounge

mattberridge mattberridge
20 ott 2011 13:28:04

Ahah tranquillo amico, stavo solo scherzando - Se vuoi accettare la tua risposta è assolutamente permesso, ma ricordati di votare la mia risposta così almeno ricevo un po' di punti d'amore.

Drew Gourley Drew Gourley
20 ott 2011 16:34:36
0

Devi creare un array all'interno di tax_query dove puoi anche selezionare gli operatori. Ad esempio, un print_r di tax_query dovrebbe apparire così.

Array
(
    [relation] => AND
    [0] => Array
        (
            [taxonomy] => build-type
            [terms] => Array
                (
                    [0] => term1
                    [1] => term2blabla
                )

            [field] => slug
            [operator] => IN
        )

    [1] => Array
        (
            [taxonomy] => another-taxonomie
            [terms] => Array
                (
                    [0] => term1
                    [1] => term2
                )

            [field] => slug
            [operator] => IN
        )

)

Ovviamente puoi cambiare il campo in id ma io ho sempre usato gli slug per mantenere le cose più semplici. Come puoi vedere puoi interrogare più tassonomie in questo modo.

7 ott 2011 19:28:53
0
-1

non è necessario utilizzare tax_query, rimuovilo e aggiungi il seguente:

term=>build-type,'build-type=>hotels' ad esempio.

8 ott 2011 01:40:36