Zaufane samouczki WordPress, kiedy ich najbardziej potrzebujesz.
Przewodnik dla początkujących po WordPressie
WPB Cup
25 milionów+
Witryny korzystające z naszych wtyczek
16+
Lata doświadczenia z WordPressem
3000+
Samouczki WordPress od ekspertów

Jak uniknąć wyświetlania zduplikowanych postów za pomocą wielu pętli w WordPress

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

WordPress nie posiada wbudowanej opcji zapobiegającej duplikowaniu postów w wielu pętlach. Jednakże, dzięki naszemu ponad 15-letniemu doświadczeniu w obsłudze różnych witryn WordPress, nauczyliśmy się unikać tego problemu. Dlatego stworzyliśmy niestandardowy fragment kodu, który możesz dodać do swojej witryny, aby uniknąć wyświetlania zduplikowanych postów w różnych pętlach.

W tym artykule pokażemy Ci, jak łatwo uniknąć powielania wyświetlania postów za pomocą wielu pętli w WordPress.

Unikanie zduplikowanych postów podczas pracy z wieloma pętlami WordPress

Jak duplikaty postów pojawiają się w wielu pętlach WordPressa

Podczas tworzenia niestandardowego motywu WordPress lub niestandardowego szablonu strony, możesz czasami potrzebować użyć wielu pętli WordPress.

Na przykład możesz chcieć wyświetlić swoje najnowsze wpisy obok najczęściej popularnych wpisów na Twojej stronie. Wyświetlają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 dla wielu pętli. Kiedy tak się dzieje, WordPress wyświetli zduplikowaną treść.

Ta zduplikowana treść może sprawić, że Twoja witryna będzie wyglądać niechlujnie i nieprofesjonalnie. Zajmuje również miejsce na ekranie, nie dodając wartości.

Ponieważ dynamicznie generujesz posty dla każdego pętli, nie możesz ręcznie przewidzieć, czy duplikat posta pojawi się w wielu pętlach.

Mając to na uwadze, przyjrzyjmy się łatwemu sposobowi unikania duplikatów postów podczas pracy z wieloma pętlami w WordPress.

Unikanie zduplikowanych postów w wielu pętlach WordPressa

W tym przewodniku pokażemy kilka przykładowych kodów WordPress, które powodują błąd zduplikowanych postów, a następnie udostępnimy fragment kodu, który rozwiązuje ten problem.

Podczas tworzenia motywu potomnego WordPress lub niestandardowego 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, aby pasował do Twojej własnej strony internetowej.

Najpierw utwórzmy problem z duplikatem posta. W poniższym przykładowym kodzie wyświetlamy wszystkie posty z kategorii „travel” i wszystkie posty z kategorii „news” bez unikania duplikatów postó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 duplikatów postów w żadnym z zapytań.

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

Jak uniknąć wyświetlania zduplikowanych postów przy wielu pętlach w WordPress

Naprawmy ten problem.

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

Po uzyskaniu tych informacji możesz zmodyfikować drugie zapytanie, aby zapobiec pojawianiu się zduplikowanych postó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 postów w tablicy o nazwie $exclude. Następnie dodajemy argument post__not_in do drugiego zapytania, co wykluczy posty, które zostały wyświetlone w pierwszym pętli.

Jeśli nie znasz się na dodawaniu fragmentów kodu do swojej witryny, łatwiejszym sposobem jest użycie WPCode. Jest to najlepsza wtyczka do fragmentów kodu dla WordPress, która pomaga dodawać niestandardowy kod bez ryzyka uszkodzenia witryny.

Najpierw musisz zainstalować i aktywować wtyczkę WPCode. Jeśli potrzebujesz pomocy, zapoznaj się z naszym przewodnikiem jak zainstalować wtyczkę WordPress.

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

Dodaj nowy fragment niestandardowego kodu w WPCode

Następnie możesz wkleić niestandardowy kod w obszarze Podgląd kodu i wpisać tytuł na górze.

Będziesz także musiał wybrać „Typ kodu” jako Fragment PHP, klikając menu rozwijane.

Wprowadź niestandardowy fragment kodu

Po wprowadzeniu kodu po prostu przewiń w dół, aby wybrać sekcję Wstawianie.

Tutaj możesz użyć domyślnego ustawienia „Automatycznie wstaw” i pozwolić wtyczce automatycznie dodać kod do Twojej witryny.

Metody wstawiania fragmentów w WPCode

Po zakończeniu po prostu zapisz fragment i aktywuj go.

Aby uzyskać więcej informacji, zapoznaj się z naszym przewodnikiem na temat jak dodać niestandardowy kod w WordPress.

Teraz, jeśli odwiedzisz swoją stronę WordPress, zobaczysz, że zduplikowane posty zniknęły.

Usuwanie zduplikowanych postów podczas korzystania z wielu postów w WordPress

Mamy nadzieję, że ten artykuł pomógł Ci dowiedzieć się, jak unikać wyświetlania zduplikowanych postów za pomocą wielu pętli w WordPress. Możesz również zapoznać się z naszym przewodnikiem na temat jak wyświetlić dowolną liczbę postów w pętli WordPress oraz jak tworzyć posty przypięte w WordPress.

Jeśli podobał Ci się ten artykuł, zasubskrybuj nasz kanał YouTube po samouczki wideo WordPress. Możesz nas również znaleźć na Twitterze i Facebooku.

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

Ostateczny zestaw narzędzi WordPress

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

Interakcje czytelników

15 CommentsLeave a Reply

  1. Czy ktoś mógłby mi powiedzieć, jak to zrobić? Jestem tu naprawdę nowy i potrzebuję pomocy, proszę podaj mi jasny przykład z identyfikatorem posta, jak go przechowywać? Powiedzmy, że mój to 1527.

  2. Uruchamiam 2 pętle przed pętlami określonej kategorii, w których chciałbym uniknąć duplikatów. Jak więc przechowywać identyfikatory w tablicy z pierwszych dwóch pętli?

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

  4. Ta metoda działa dobrze, dopóki oba z 2 pętli znajdują się w jednym pliku.
    ale kiedy umieściłem pierwszą pętlę w header.php, a drugą w index.php,
    in_array($post->ID, $do_nit_duplicate) zwraca null.
    Co mogę zrobić?

  5. Dzień dobry wszystkim,

    czy to zadziała w moim obecnym problemie z podwójnym wyświetlaniem postów na stronie? dosłownie wyświetla kopię pod postami i przycisk 1, 2, ->

    strona jest Dezaktywowałem i ponownie aktywowałem wtyczki, zaraz mnie szlag trafi.

  6. @sergeyvlasov – Dzięki, to zadziałało u mnie

    chociaż zmieniłem

    $do_nit_duplicate do $do_not_duplicate

    ;)

  7. Myślę, że jest błąd w tym algorytmie. Potrafi wykryć co najwyżej 1 (jedną) duplikację. Więc magiczna linia wyglądałaby tak:
     
    $do_not_duplicate[] = $post->ID
     
    a następnie użyta w ten sposób:
     
    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 naszą polityką komentowania, a Twój adres e-mail NIE zostanie opublikowany. Prosimy NIE używać słów kluczowych w polu nazwy. Prowadźmy osobistą i znaczącą rozmowę.