Je suis en train d'exécuter une requête pour déterrer des publications sur des balises. Si CURRENT POST a les balises A, B et C, affiche 3 autres publications qui ont des balises A, B ou C. Je ne montre également que les messages datant de 365 jours ou plus récents.
$date_to_compare = date('F jS, Y', strtotime('-365 days'));
$new_category = get_the_category();
$the_tags = get_the_tags();
$first_tag = $the_tags[0]->term_id;
$second_tag = $the_tags[1]->term_id;
$this_post2 = get_the_ID();
$args2 = array(
'posts_per_page' => 3,
'post_type' => 'post',
'ignore_sticky_posts' => 1,
'orderby' => 'Rand',
'tag__in' => array( $first_tag, $second_tag ),
'exclude' => $this_post2,
'date_query' => array(
array(
'after' => $date_to_compare,
'inclusive' => true,
),
),
);
$the_query_2 = new WP_Query( $args2 );
if ($the_query_2->have_posts()) :
while ( $the_query_2->have_posts() ) : $related_post_count++;
$the_query_2->the_post(); ?>
// show the post content
endwhile; endif;
Cela fonctionne généralement très bien, mais dans un cas, CURRENT POST est l’un des 3 postes qui correspond à cela. Dans ce cas, CURRENT POST est inclus dans les trois messages liés, malgré $this_post2 = get_the_ID();
et 'exclude' => $this_post2,
.
Ainsi, mon casse-tête.
WP_Query ne prend pas en charge un argument exclude
. Pour exclure une publication par identifiant, utilisez post__not_in
et transmettez-lui un tableau d'identifiants.
En utilisant votre code ci-dessus, vos arguments pourraient ressembler à ceci:
$args2 = array(
'posts_per_page' => 3,
'post_type' => 'post',
'ignore_sticky_posts' => 1,
'orderby' => 'Rand',
'tag__in' => array( $first_tag, $second_tag ),
'post__not_in' => array( $this_post2 ),
'date_query' => array(
array(
'after' => $date_to_compare,
'inclusive' => true,
),
),
);