web-dev-qa-db-ja.com

クエリで「taxonomy__in」をシミュレートするにはどうすればよいですか?

'category__in' => array()のような結果を取得するには、tax_queryをどのように設定する必要がありますか?

具体的には、次のいずれかのIDを使用して、市の分類からの用語が含まれるすべての投稿を表示します。$cities = array(23,34,45,56);

これは私が現在使用しているコードです。

$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;

$args = array(
    'meta_query' => array(
    array(
            'key' => 'mar_bedrooms',
            'value' => $bedroomss,
            'compare' => 'IN'
        ),
    array(
            'key' => 'mar_property_for',
            'value' => $property_forss,
            'compare' => 'IN'
        ),
    array(
        'key' => 'mar_price',
        'value' => array( $price_min, $price_max ),
        'type' => 'numeric',
        'compare' => 'BETWEEN'
        )
    ),
    'post_status'=>'publish',
    'post_type'=>'post',
    //'cat' => 1,
    'category__in'=> $type,
    //'taxonomy__in'=> $city,
    'orderby'=>'date',
    'order'=>'DESC'
);
query_posts($args);

if ( have_posts() ) {
    the_post();
    $a = 1;
}
1
Marius

カテゴリと一般的な分類法の動作方法により、これはできません。カテゴリーは分類法の一種であるため、カテゴリーを照会する場合は1レベル下の照会を行います。 category__in => array()に対してクエリを実行すると、実際にcategory_termsがクエリされたものを検索し、それらすべてのカテゴリの投稿をクエリします。これで、この効果を模倣できます。

$terms_in = array(23,34,45,56);
$taxonomy_terms = get_terms( array( 'city' ), array(
    'orderby' => 'none',
    'hide_empty' => 1,
    'include' => $terms_in
) );

foreach ( $taxonomy_terms as $term ) :
    $args = array(
        'taxonomy' => $term->slug,
        'post_status' => 'publish',
        'posts_per_page' => -1,
    );

    $term_name = $term->slug;
    $query = new WP_Query( $args );
    while( $query->has_posts() ) : 
        $query->the_post();
        // DISPLAY HERE
    endwhile;

endforeach;

wp_reset_postdata();

上記のコードはあなたの特定の質問のために編集されました。

2
Derk-Jan

3日間の調査の結果、taxonomy_inをシミュレートする良い方法を見つけました。

      $args = array(
        'post_type' => 'post',
        'meta_query' => array(
            array(
                'key' => 'mar_bedrooms',
                'value' => $bedroomss,
                'compare' => 'IN'
            ),
            array(
                'key' => 'mar_bathrooms',
                'value' => $bathroomses,
                'compare' => 'IN'
            ),
            array(
                'key' => 'mar_property_for',
                'value' => $property_forss,
                'compare' => 'IN'
            ),
            array(
                'key' => 'mar_price',
                'value' => array( $price_min, $price_max ),
                'type' => 'numeric',
                'compare' => 'BETWEEN'
            )
        ),
        'tax_query' => array(
            array(
                'taxonomy' => 'city',
                'field' => 'id',
                'terms' => $city,  //$city can be also an array
                'operator' => 'IN'
            )
        ),
        'post_status'=>'publish',
        'category__in'=> $type,  //$type can be also an array
        'orderby'=>'date',
        'order'=>'DESC'
    );

    $the_query = new WP_Query( $args );
        if ($the_query->have_posts()) : while ($the_query->have_posts()) : $the_query->the_post();
wp_reset_query();
wp_reset_postdata();
1
Marius