Método 1: Usar una Variable Global

  1. Inicializar un Array para Almacenar los IDs de las Publicaciones MostradasAntes de tu primer bucle, inicializa un array vacío para hacer seguimiento de los IDs de las publicaciones.

    php

    global $do_not_duplicate;
    $do_not_duplicate = array();
  2. Primer BucleEn tu primer bucle, almacena los IDs de las publicaciones mostradas en el array global.

    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();
    // Tu código del bucle aquí
    endwhile;
    wp_reset_postdata();
    endif;
    ?>
  3. Segundo BucleEn tu segundo bucle, excluye los IDs de las publicaciones almacenados en el array global.

    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();
    // Tu código del bucle aquí
    endwhile;
    wp_reset_postdata();
    endif;
    ?>

Método 2: Usar Transients para Escenarios Más Complejos

Si tienes escenarios más complejos o necesitas persistir la exclusión en diferentes partes de tu sitio, podrías considerar usar transients de WordPress.

  1. Configurar un TransientAntes de tus bucles, verifica si existe un transient y úsalo. Si no, inicializa un array vacío.

    php

    $do_not_duplicate = get_transient('excluded_posts') ? get_transient('excluded_posts') : array();
  2. Primer BucleAlmacena los IDs de las publicaciones en el transient después de tu primer bucle.

    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();
    // Tu código del bucle aquí
    endwhile;
    wp_reset_postdata();
    set_transient(‘excluded_posts’, $do_not_duplicate, HOUR_IN_SECONDS);
    endif;
    ?>
  3. Segundo BucleExcluye los IDs de las publicaciones almacenados en el transient en tu segundo bucle.

    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();
    // Tu código del bucle aquí
    endwhile;
    wp_reset_postdata();
    endif;
    ?>

Siguiendo estos métodos, puedes evitar mostrar la misma publicación en múltiples bucles en tu sitio de WordPress. El primer método usando una variable global es sencillo y funciona bien para casos simples. El segundo método usando transients es más adecuado para escenarios complejos donde las exclusiones necesitan persistir en diferentes partes del sitio o por un período más largo.