Consultar postagens por ID de taxonomia personalizada

7

Eu tenho um tipo de postagem personalizada chamado portfolio e uma taxonomia personalizada chamada build-type (atuando como categorias)

Estou tentando consultar portfolio postagens de build-type ID, por exemplo todas as postagens do portfólio em "hotéis" (id = 4 para essa taxonomia)

// gets the ID from a custom field to show posts on a specific page   
$buildType = get_post_meta($post->ID, 'build_type_id', true);
// run query
query_posts(array( 
    'post_type' => 'portfolio',
    'showposts' => -1,
    'tax_query' => array(
        'taxonomy' => 'build-type',
        'terms' => $buildType,
        'field' => 'term_id'
    ),
    'orderby' => 'title',
    'order' => 'ASC'
));

Atualmente, ele está chamando todas portfolio postagens e não apenas aquelas com build-type ID

Para 'field' => 'term_id' , devo usar term_id , tag_ID , id ou outra coisa?

Alguém sabe como fazer isso funcionar?

Obrigado antecipadamente!

    
por mattberridge 07.10.2011 / 15:06

4 respostas

12

A razão pela qual isso não está funcionando é porque 'tax_query' precisa ser uma matriz de matrizes (confusas, eu sei).

...

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

...

É assim que você pode agrupar algumas regras diferentes.

    
por Drew Gourley 07.10.2011 / 18:00
7

Drew estava certo, tax-query precisa ser uma matriz de matrizes

A solução final é:

// gets the ID from a custom field to show posts on a specific page
$buildType = get_post_meta($post->ID, 'build_type_id', true);
// run 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' )
);

No github aqui:

enlace

Obrigado!

    
por mattberridge 19.10.2011 / 10:27
0

Você precisa criar uma matriz dentro de tax_query, onde também pode selecionar operadores. Por exemplo, um print_r de tax_query deve se parecer com estes.

 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
        )

)

Claro que você pode mudar o campo para id, mas eu sempre usei slugs para mantê-lo mais simples. Como você pode ver, você pode consultar várias taxonomias como estas.

    
por chifliiiii 07.10.2011 / 18:28
-1

você não precisa usar o tax_query, removê-lo e anexar o seguinte:

term=>build-type,'build-type=>hotels' , por exemplo.

    
por wdalhaj 08.10.2011 / 00:40