web-dev-qa-db-ja.com

カスタム分類IDで投稿をクエリする

私はportfolioと呼ばれるカスタム投稿タイプとbuild-typeと呼ばれるカスタム分類法を持っています(カテゴリーとして振る舞う)

私はbuild-type IDでportfolio投稿をクエリしようとしています。 "ホテル"にあるすべてのポートフォリオ投稿(その分類のid = 4)

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

現在、build-type IDを持つ投稿だけでなく、 all portfolio投稿を呼び出しています。

'field' => 'term_id'には、term_idtag_IDidなどを使用する必要がありますか

誰もがこれを機能させる方法を知っていますか?

前もって感謝します!

7
mattberridge

これがうまくいかないのは、 'tax_query'が配列の配列である必要があるからです(混乱していると思います)。

...

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

...

そのようにしているので、いくつかの異なるルールをまとめてグループ化することができます。

12
Drew Gourley

ドリューは正しかった、tax-queryは配列の配列である必要がある

最終的な解決策は次のとおりです。

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

ここgithubに:

https://Gist.github.com/1275191

ありがとうございます。

7
mattberridge

演算子を選択できるtax_query内に配列を作成する必要があります。たとえば、tax_queryのprint_rは、次のようになります。

 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
        )

)

もちろん、あなたはidのフィールドを変更することができますが、私はそれを簡単にするために常にスラグを使いました。ご覧のとおり、このように複数の分類法を照会できます。

0
chifliiiii