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