web-dev-qa-db-fra.com

Interroger plusieurs types et catégories d'articles

J'ai un div et à l'intérieur je souhaite afficher par hasard un message de la catégorie-a ou un produit de la catégorie-b. Je cherche une requête pour le faire.

J'ai essayé ceci:

 <?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; ?>

Quelqu'un sait comment faire ça? Je vous remercie :)

MODIFIER LE CODE

    <?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

Le code suivant sélectionne les ID de toutes les publications de type product et post, qui appartiennent aux termes category-a ou category-b, avec taxonomy_01 et taxonomy_02, respectivement.

$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
}

Je suppose que les termes category-a, category-b appartiennent à différentes taxonomies. Sinon, le tax_query devrait être:

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

METTRE À JOUR
J'ai changé la variable dans le code ci-dessus de $post à my_post. Votre code:

$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