如何防止wordpress的帖子重复展示, 方法一:使用全局变量

  1. 初始化一个数组来存储已显示的文章ID在第一个循环之前,初始化一个空数组来跟踪已显示的文章ID。

    php

    global $do_not_duplicate;
    $do_not_duplicate = array();
  2. 第一个循环在第一个循环中,将已显示的文章ID存储在全局数组中。

    php

    <?php
    global $do_not_duplicate;
    $query1 = new WP_Query(array(
    'posts_per_page' => 5,
    ));
    if ($query1->have_posts()) :
    while ($query1->have_posts()) : $query1->the_post();
    $do_not_duplicate[] = get_the_ID();
    // 你的循环代码在这里
    endwhile;
    wp_reset_postdata();
    endif;
    ?>
  3. 第二个循环在第二个循环中,排除存储在全局数组中的文章ID。

    php

    <?php
    global $do_not_duplicate;
    $query2 = new WP_Query(array(
    'posts_per_page' => 5,
    'post__not_in' => $do_not_duplicate,
    ));
    if ($query2->have_posts()) :
    while ($query2->have_posts()) : $query2->the_post();
    // 你的循环代码在这里
    endwhile;
    wp_reset_postdata();
    endif;
    ?>

 

方法二:使用Transients处理更复杂的场景

如果你有更复杂的场景或需要在网站的不同部分中持久化排除,可以考虑使用WordPress的transients。

  1. 设置Transient在循环之前,检查是否存在transient并使用它。如果不存在,则初始化一个空数组。

    php

    $do_not_duplicate = get_transient('excluded_posts') ? get_transient('excluded_posts') : array();
  2. 第一个循环在第一个循环之后,将文章ID存储在transient中。

    php

    <?php
    $query1 = new WP_Query(array(
    'posts_per_page' => 5,
    ));
    if ($query1->have_posts()) :
    while ($query1->have_posts()) : $query1->the_post();
    $do_not_duplicate[] = get_the_ID();
    // 你的循环代码在这里
    endwhile;
    wp_reset_postdata();
    set_transient(‘excluded_posts’, $do_not_duplicate, HOUR_IN_SECONDS);
    endif;
    ?>
  3. 第二个循环在第二个循环中,排除存储在transient中的文章ID。

    php

    <?php
    $query2 = new WP_Query(array(
    'posts_per_page' => 5,
    'post__not_in' => $do_not_duplicate,
    ));
    if ($query2->have_posts()) :
    while ($query2->have_posts()) : $query2->the_post();
    // 你的循环代码在这里
    endwhile;
    wp_reset_postdata();
    endif;
    ?>

通过遵循这些方法,你可以避免在WordPress网站的多个循环中显示相同的文章。使用全局变量的方法简单且适用于简单的情况。使用transients的方法更适合于需要在网站不同部分或较长时间内持久化排除的复杂场景。

更多WORDPRESS的文章