web-dev-qa-db-ja.com

複数の投稿タイプとカテゴリを照会する

私はdivを持っていて、カテゴリ-aの商品やカテゴリ-bの商品をランダムに表示したいと思っています。そのためのクエリを探しています。

私はこれを試しました:

 <?php
        $args = array( 
        'post_type' => array('product', 'post'), 
        'posts_per_page' => 1, 
        'cat' => 1,2, 
        'orderby' => 'Rand' 
        );

        $loop = new WP_Query( $args );       

        while ( $loop->have_posts() ) : $loop->the_post(); global $product; ?>

            <article class="promo">  

                    <div class="image">
                    <?php if (is_singular('product')){
                        echo 'Product';

                    }else{
                        echo 'Post';
                    }?>
                    </div>  


                </article>
<?php endwhile; ?>

誰かがそれを行う方法を知っていますか?ありがとうございました :)

編集コード

    <?php
$args = [
    'post_type' => ['product','post'],
    'posts_per_page' => -1,
    'fields' => 'ids',
     'post_type' => ['product','post'],
'posts_per_page' => 2,
'fields' => 'ids',
'tax_query' => [

    'relation' => 'OR',
    'taxonomy' => 'category',
    'field' => 'slug',
    'terms' => ['promo-distributeur', 'actu-distrib'],
    'include_children' => false,

]
    ]
];
$posts_ids = get_posts($args); 
$total = count($posts_ids);


if ($total > 0) { 
    $rnd = mt_Rand(0, $total);
    $pid = $posts_ids[$rnd];
    $post = get_post( $pid);



while ( $post->have_posts() ) : $post>the_post(); global $product; ?>

            <article class="promo">  

                    <div class="image">
                    <?php if (is_singular('product')){
                        echo 'Product';

                    }else{
                        echo 'Post';
                    }?>
                    </div>  


                </article>
<?php endwhile;
} ?>    
2
Lust

次のコードは、category-aおよびcategory-bという用語にそれぞれ属するすべての投稿タイプproductおよびpostのIDをそれぞれtaxonomy_01およびtaxonomy_02で選択します。

$args = [
    'post_type' => ['product','post'],
    'posts_per_page' => -1,
    'fields' => 'ids',
    'tax_query' => [
        'relation' => 'OR',
        [
            'taxonomy' => 'taxonomy_01',
            'field' => 'slug',
            'terms' => 'category-a',
            'include_children' => false,
        ],
        [
            'taxonomy' => 'taxonomy_02',
            'field' => 'slug',
            'terms' => 'category-b',
            // OR by id
            //'field' => 'term_id', // default value
            //'terms' => 2,
            'include_children' => false,
        ],
    ]
];
$posts_ids = get_posts($args); 
$total = count($posts_ids);
if ($total > 0) { 
    $rnd = mt_Rand(0, $total - 1);
    $pid = $posts_ids[$rnd];
    $my_post = get_post( $pid);
    // display post
}

category-acategory-bという用語は異なる分類法に属していると思います。そうでない場合は、tax_queryは次のようになります。

'tax_query' => [
    [
        'taxonomy' => 'taxonomy_01',
        'field' => 'slug',
        'terms' => ['category-a', 'category-b'],
        'include_children' => false,
    ],
]

_アップデート_
上記のコードの変数を$postからmy_postに変更しました。あなたのコード:

$args = [
    'post_type' => ['product','post'],
    'posts_per_page' => -1,
    'fields' => 'ids',
    'tax_query' => [
        'relation' => 'OR',
        [
            'taxonomy' => 'taxonomy_01',
            'field' => 'slug',
            'terms' => 'category-a',
            'include_children' => false,
        ],
        [
            'taxonomy' => 'taxonomy_02',
            'field' => 'slug',
            'terms' => 'category-b',
            // OR by id
            //'field' => 'term_id', // default value
            //'terms' => 2,
            'include_children' => false,
        ],
    ]
];
$posts_ids = get_posts($args); 
$total = count($posts_ids);
if ($total > 0) {
    // get random post_ID 
    $rnd = mt_Rand(0, $total - 1);
    $pid = $posts_ids[$rnd];
    $my_post = get_post( $pid);

    // display post
    if ( !empty($my_post) ) : ?>

        <article class="promo">  
            <div class="image">
            <?php 
                if ( $my_post->post_type == 'product' )
                    echo 'Product';
                else
                    echo 'Post';
            ?>
           </div>  
       </article>
   <?php endif;
}
1
nmr