web-dev-qa-db-fra.com

Interroger les publications par identifiant de taxonomie personnalisée

J'ai un type de message personnalisé appelé portfolio et une taxonomie personnalisée appelée build-type (agissant en tant que catégories)

J'essaie d'interroger les articles portfolio par build-type ID, par exemple. toutes les publications du portefeuille dans "Hôtels" (id = 4 pour cette taxonomie)

// 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'
));

Actuellement, il appelle tous portfolio posts et pas seulement ceux avec l'ID build-type

Pour 'field' => 'term_id' devrais-je utiliser term_id, tag_ID, id ou autre chose?

Quelqu'un sait comment faire fonctionner ça?

Merci d'avance!

7
mattberridge

Cela ne fonctionne pas parce que 'tax_query' doit être un tableau de tableaux (déroutant, je sais).

...

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

...

C'est ainsi que vous pouvez regrouper plusieurs règles différentes.

12
Drew Gourley

Drew avait raison, tax-query doit être un tableau de tableaux

La solution finale est:

// 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' )
);

Sur github ici:

https://Gist.github.com/1275191

Merci!

7
mattberridge

Vous devez créer un tableau dans tax_query où vous pouvez également sélectionner des opérateurs. Par exemple, un print_r de tax_query devrait ressembler à ceci.

 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
        )

)

Bien sûr, vous pouvez changer le champ pour id mais j’ai toujours utilisé des slugs pour le simplifier. Comme vous pouvez le constater, vous pouvez interroger plusieurs taxonomies comme celles-ci.

0
chifliiiii