Trusted WordPress tutorials, when you need them most.
Beginner’s Guide to WordPress
Puchar WPB
25 Million+
Websites using our plugins
16+
Years of WordPress experience
3000+
WordPress tutorials
by experts

Jak uniknąć wyświetlania wpisów Duplicator z wieloma pętlami w WordPress?

Czy próbujesz poprawić wyświetlanie zduplikowanych wpisów z wieloma pętlami w WordPress?

Jeśli używasz wielu zapytań WordPress do wyświetlania różnych wpisów, możesz natknąć się na zduplikowane treści. Dzieje się tak, ponieważ niektóre wpisy mogą pasować do więcej niż jednej pętli i pojawiać się dwukrotnie.

W tym artykule pokażemy, jak łatwo uniknąć wyświetlania zduplikowanych wpisów z wieloma pętlami w WordPress.

Avoding duplicate posts when working with multiple WordPress loops

Jak zduplikowane wpisy pojawiają się w wielu pętlach WordPressa?

Podczas tworzenia niestandardowego motywu WordPress lub własnego szablonu strony, czasami może być konieczne użycie wielu pętli WordPress.

Na przykład, możesz chcieć pokazać twoje ostatnie wpisy obok najpopularniejszych wpisów w witrynie. Pokazując wszystkie wpisy w każdej kategorii, możesz również pomóc czytelnikom znaleźć interesujące treści.

We wszystkich tych przykładach pojedynczy wpis może spełniać kryteria wielu pętli. Gdy tak się stanie, WordPress wyświetli zduplikowaną treść.

Duplikaty treści mogą sprawić, że twoja witryna będzie wyglądać niechlujnie i nieprofesjonalnie. Zajmuje również miejsce na ekranie bez dodawania wartości.

Ponieważ dynamicznie generujesz wpisy dla każdej pętli, nie możesz ręcznie przewidzieć, czy zduplikowany wpis pojawi się w wielu pętlach.

Mając to na uwadze, przyjrzyjmy się łatwemu sposobowi na uniknięcie zduplikowanych wpisów, gdy mamy do czynienia z wieloma pętlami w WordPressie.

Unikanie zduplikowanych wpisów w wielu pętlach WordPressa

W tym przewodniku pokażemy przykładowy kod WordPressa, który powoduje błąd zduplikowanego wpisu, a następnie udostępnimy fragment kodu, który poprawi ten problem.

Podczas tworzenia motywu potomnego WordPress lub własnego szablonu, twój kod może być zupełnie inny. Możesz jednak użyć naszego fragmentu kodu jako punktu wyjścia, a następnie zmodyfikować go tak, aby pasował do twojej witryny internetowej.

Najpierw stwórzmy problem zduplikowanych wpisów. W poniższym przykładowym kodzie wyświetlamy wszystkie wpisy w kategorii „podróże” i wszystkie wpisy w kategorii „wiadomości” bez unikania duplikatów wpisów:

/******  The First Query *******/
 
$first_query = new WP_Query(  array (
'category_name' => 'news',
'posts_per_page'  =>  3 
));
  
// The Loop
if ( $first_query->have_posts() ) {
    echo '<ul>';
    while ( $first_query->have_posts() ) {
        $first_query->the_post();
 
//display posts
echo '<li>';
echo the_post_thumbnail( array(50, 50) );
echo get_the_title(); 
echo '</li>';
    }
    echo '</ul>';
} else {
    // no posts found
}
/* Restore original Post Data */
wp_reset_postdata();
 
 
/******  The Second Query *******/
$second_query = new WP_Query(  array (
'category_name' => 'travel',
'posts_per_page'  =>  3
 
) );
 
// The Loop
if ( $second_query->have_posts() ) {
 
echo '<ul>';
while ( $second_query->have_posts() ) {
 
$second_query->the_post();
echo '<li>'; 
echo the_post_thumbnail( array(50, 50) );
echo get_the_title(); 
echo '</li>';
    }
echo '</ul>';
} else {
    // no posts found
}
/* Restore original Post Data */
wp_reset_postdata();
?>

Jak widać, ten kod nie sprawdza zduplikowanych wpisów w żadnym z zapytań.

Jeśli wpis należy zarówno do kategorii „wiadomości”, jak i „podróże”, pojawi się dwukrotnie, jak widać na poniższym obrazku.

How to avoid duplicate post display with multiple loops in WordPress

Poprawmy ten problem.

Aby uniknąć duplikatów wpisów na twoim blogu WordPress, musisz tymczasowo przechowywać dane o wszystkich wpisach wyświetlanych w pierwszej pętli.

Po uzyskaniu tych informacji można zmodyfikować drugie zapytanie, aby zapobiec pojawianiu się zduplikowanych wpisów w drugiej pętli:

/******  The First Query *******/
 
$first_query = new WP_Query(  array (
'category_name' => 'news',
'posts_per_page'  =>  3
) );
  
// The Loop
if ( $first_query->have_posts() ) {
    echo '<ul>';
    while ( $first_query->have_posts() ) {
        $first_query->the_post();
         
// Store Post IDs in an Array to reuse later
$exclude[] = $post->ID; 
 
//display posts
echo '<li>';
echo the_post_thumbnail( array(50, 50) );
echo get_the_title(); 
echo '</li>';
    }
    echo '</ul>';
} else {
    // no posts found
}
/* Restore original Post Data */
wp_reset_postdata();
 
 
/******  The Second Query *******/
$second_query = new WP_Query(  array (
'category_name' => 'travel',
'post__not_in'  =>  $exclude, // Tell WordPress to Exclude these posts
'posts_per_page'  =>  3
 
) );
 
// The Loop
if ( $second_query->have_posts() ) {
 
echo '<ul>';
while ( $second_query->have_posts() ) {
 
$second_query->the_post();
echo '<li>'; 
echo the_post_thumbnail( array(50, 50) );
echo get_the_title(); 
echo '</li>';
    }
echo '</ul>';
} else {
    // no posts found
}
/* Restore original Post Data */
wp_reset_postdata();
?>

W powyższym kodzie przechowujemy identyfikatory wpisów w tablicy o nazwie $exclude. Następnie dodajemy argument post__not_in do drugiego zapytania, co spowoduje wykluczenie wpisów, które zostały wyświetlone w pierwszej pętli.

Jeśli nie jesteś zaznajomiony z dodawaniem fragmentów kodu do twojej witryny, łatwiejszym sposobem jest użycie WPCode. Jest to najlepsza wtyczka do fragmentów kodu dla WordPressa, która pomaga dodawać własny kod bez ryzyka zepsucia twojej witryny.

Najpierw należy zainstalować i włączyć wtyczkę WPCode. Jeśli potrzebujesz pomocy, zapoznaj się z naszym przewodnikiem na temat instalacji wtyczki WordPress.

Po włączaniu, możesz przejść do Code Snippets + Add Snippet z kokpitu WordPress, a następnie kliknąć opcję „Add Your Custom Code (New Snippet)”.

Add a new custom code snippet in WPCode

Następnie można wkleić własny kod w obszarze Podgląd kodu i wpisz tytuł u góry.

Musisz również wybrać „Rodzaj kodu” jako PHP Snippet, klikając menu rozwijane.

Enter custom code snippet

Po wpiszeniu kodu wystarczy przewinąć w dół, aby wybrać sekcję Wybierak.

Tutaj możesz użyć domyślnego ustawienia „Auto wstawić” i pozwolić wtyczce automatycznie dodać kod do twojej witryny.

Insertion methods for snippets in WPCode

Gdy skończysz, po prostu zapisz fragment kodu i włącz go.

Więcej szczegółów można znaleźć w naszym przewodniku na temat dodawania własnego kodu w WordPress.

Teraz, jeśli przejdziesz na swoją witrynę internetową WordPress, zobaczysz, że zduplikowane wpisy zniknęły.

Removing duplicate posts when using multiple posts in WordPress

Mamy nadzieję, że ten artykuł pomógł ci dowiedzieć się, jak uniknąć wyświetlania zduplikowanych wpisów z wieloma pętlami w WordPress. Możesz również zapoznać się z naszym przewodnikiem na temat wyboru najlepszego oprogramowania do projektowania stron internetowych lub z naszą ekspercką listą najlepszych kreatorów stron WordPress typu „przeciągnij i upuść„.

If you liked this article, then please subscribe to our YouTube Channel for WordPress video tutorials. You can also find us on Twitter and Facebook.

Ujawnienie: Nasze treści są wspierane przez czytelników. Oznacza to, że jeśli klikniesz na niektóre z naszych linków, możemy otrzymać prowizję. Zobacz jak WPBeginner jest finansowany, dlaczego to ma znaczenie i jak możesz nas wspierać. Oto nasz proces redakcyjny.

Avatar

Editorial Staff at WPBeginner is a team of WordPress experts led by Syed Balkhi with over 16 years of experience in WordPress, Web Hosting, eCommerce, SEO, and Marketing. Started in 2009, WPBeginner is now the largest free WordPress resource site in the industry and is often referred to as the Wikipedia for WordPress.

Najlepszy zestaw narzędzi WordPress

Uzyskaj BEZPŁATNY dostęp do naszego zestawu narzędzi - zbiór produktów i zasobów związanych z WordPressem, które każdy profesjonalista powinien mieć!

Reader Interactions

16 komentarzyZostaw odpowiedź

  1. Syed Balkhi

    Hey WPBeginner readers,
    Did you know you can win exciting prizes by commenting on WPBeginner?
    Every month, our top blog commenters will win HUGE rewards, including premium WordPress plugin licenses and cash prizes.
    You can get more details about the contest from here.
    Start sharing your thoughts below to stand a chance to win!

  2. Nick J

    Is there a plugin that does this?

  3. Satriyo

    Could someone tell me how to do this? I’m really new to this and need a help, please give me a clear example with the post ID, how to store it? Let’s say, mine is 1527.

  4. Gaurav

    I’m running 2 loops before loops of a specific category in which I would like to avoid duplicates. So how do a store ID’s in the array from first two loops?

  5. Joe

    Just what I was looking for – thank you!

  6. Guilherme Alves

    Thank you soo much :))) This helps me alot!
    Save my day <3

  7. Julie

    AWESOME!! Thank you so much! And thank you SERGEYVLASOV for that last comment– Worked like a charm for my multiple loops. Hooray!! :)

  8. Pirooz

    This method just works fine until both of 2 loops located in one file.
    but when I put the first loop in the header.php and another one in the index.php,
    in_array($post->ID, $do_nit_duplicate) returns null.
    what can I do?

  9. warren

    Good afternoon all,

    will this work for my current issue with double display of posts on site? it literally displays a copy under the posts and the 1, 2, -> button…

    the site is I have deactivated re-activated plugins i am literally going nuts.

  10. agus

    can you help me?
    I have proble with duplicate category in my site

    please
    #thanks

  11. Gabriel

    Before iterating over the default loop shouldn’t we use wp_reset_postdata(); ?

  12. Greg

    @sergeyvlasov – Thanks that worked for me

    tho i changed

    $do_nit_duplicate to $do_not_duplicate

    ;)

  13. sergeyvlasov

    I think there is a flaw in this algorithm. It can spot no more than 1(one) duplication. So the magic line would look like
     
    $do_not_duplicate[] = $post->ID
     
    and then used as
     
    if(in_array($post->ID, $do_nit_duplicate)) continue;

Zostaw odpowiedź

Dziękujemy za pozostawienie komentarza. Pamiętaj, że wszystkie komentarze są moderowane zgodnie z naszymi polityka komentarzy, a Twój adres e-mail NIE zostanie opublikowany. NIE używaj słów kluczowych w polu nazwy. Przeprowadźmy osobistą i konstruktywną rozmowę.