web-dev-qa-db-fra.com

Requête en ignorant le paramètre "exclude"?

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.

2
Nathan

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,
        ),
    ),
);
1
jdm2112