Farklı gönderi kümelerini görüntülemek için birden fazla WordPress sorgusu kullanıyorsanız, yinelenen içerikle karşılaşabilirsiniz. Bunun nedeni, bazı gönderilerin birden fazla döngüyle eşleşebilmesi ve iki kez görünmesidir.
WordPress'te birden fazla döngüde yinelenen gönderileri önlemek için yerleşik bir seçenek bulunmamaktadır. Ancak, 15 yılı aşkın WordPress sitesi yönetme deneyimimizle bu sorunu nasıl çözeceğimizi öğrendik. Bu nedenle, sitenize ekleyebileceğiniz ve farklı döngülerde gösterilen yinelenen gönderileri önleyebileceğiniz özel bir kod parçacığı oluşturduk.
Bu makalede, WordPress'te birden fazla döngüde yinelenen gönderi görüntülenmesini kolayca nasıl önleyeceğinizi göstereceğiz.

WordPress'te Birden Fazla Döngüde Yinelenen Gönderiler Nasıl Görünür
Özel bir WordPress teması veya özel bir sayfa şablonu oluştururken, bazen birden fazla WordPress döngüsü kullanmanız gerekebilir.
Örneğin, sitenizin en popüler gönderilerinin yanında son gönderilerinizi göstermek isteyebilirsiniz. Her kategorideki tüm gönderileri göstererek, okuyucuların ilginç içerikler bulmasına da yardımcı olabilirsiniz.
Bu örneklerin tümünde, tek bir gönderi birden fazla döngünün kriterleriyle eşleşebilir. Bu olduğunda, WordPress yinelenen içerik görüntüleyecektir.
Bu yinelenen içerik, sitenizin dağınık ve profesyonel olmayan görünmesine neden olabilir. Ayrıca değer katmadan ekranda yer kaplar.
Döngü başına dinamik olarak gönderi oluşturduğunuz için, birden fazla döngüde yinelenen bir gönderinin görünüp görünmeyeceğini manuel olarak tahmin edemezsiniz.
Bunu göz önünde bulundurarak, WordPress'te birden fazla döngüyle uğraşırken yinelenen gönderilerden kaçınmanın kolay bir yoluna bakalım.
Birden Fazla WordPress Döngüsünde Yinelenen Gönderilerden Kaçınma
Bu kılavuzda, yinelenen gönderi hatasına neden olan örnek WordPress kodunu gösterecek ve ardından sorunu çözen bir kod parçacığı paylaşacağız.
Bir WordPress alt teması veya özel şablon oluştururken, kodunuz tamamen farklı olabilir. Ancak, kod parçacığımızı bir başlangıç noktası olarak kullanabilir ve ardından kendi web sitenize uyacak şekilde değiştirebilirsiniz.
İlk olarak, yinelenen bir gönderi sorunu oluşturalım. Aşağıdaki örnek kodda, yinelenen gönderilerden kaçınmadan 'travel' kategorisindeki tüm gönderileri ve 'news' kategorisindeki tüm gönderileri görüntülüyoruz:
/****** 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();
?>
Gördüğünüz gibi, bu kod sorgusunda yinelenen gönderileri kontrol etmiyor.
Bir gönderi hem 'news' hem de 'travel' kategorisine aitse, aşağıdaki resimde görebileceğiniz gibi iki kez görünecektir.

Bu sorunu çözelim.
WordPress blogunuzda yinelenen gönderilerden kaçınmak için, ilk döngüde görüntülenen tüm gönderiler hakkındaki verileri geçici olarak saklamanız gerekecektir.
Bu bilgilere sahip olduktan sonra, ikinci döngüde yinelenen gönderilerin görünmesini durdurmak için ikinci sorguyu değiştirebilirsiniz:
/****** 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();
?>
Yukarıdaki kodda, Gönderi Kimliklerini $exclude adlı bir dizide saklıyoruz. Ardından, ikinci sorguya post__not_in argümanını ekliyoruz, bu da ilk döngüde görüntülenen gönderileri hariç tutacaktır.
Sitenize kod parçacıkları ekleme konusunda aşina değilseniz, daha kolay bir yol WPCode kullanmaktır. Sitenizi bozma riski olmadan özel kod eklemenize yardımcı olan WordPress için en iyi kod parçacığı eklentisidir.
Öncelikle, WPCode eklentisini yüklemeniz ve etkinleştirmeniz gerekecektir. Yardıma ihtiyacınız olursa, lütfen WordPress eklentisinin nasıl kurulacağına ilişkin kılavuzumuza bakın.
Etkinleştirdikten sonra, WordPress kontrol panelinden Kod Parçacıkları + Parçacık Ekle'ye gidebilir ve ardından 'Özel Kodunuzu Ekle (Yeni Parçacık)' seçeneğine tıklayabilirsiniz.

Bundan sonra, özel kodu Kod Önizleme alanına yapıştırabilir ve en üste bir başlık girebilirsiniz.
Ayrıca açılır menüye tıklayarak 'Kod Türü'nü PHP Parçacığı olarak seçmeniz gerekecektir.

Kodu girdikten sonra, Ekleme bölümünü seçmek için aşağı kaydırmanız yeterlidir.
Burada, eklentinin kodu sitenize otomatik olarak eklemesine izin vermek için varsayılan 'Otomatik Ekle' ayarını kullanabilirsiniz.

İşiniz bittiğinde, parçacığı kaydedip etkinleştirmeniz yeterlidir.
WordPress'e özel kodu nasıl ekleyeceğinizle ilgili kılavuzumuza bakın.
Şimdi WordPress web sitenizi ziyaret ederseniz, yinelenen gönderilerin kaybolduğunu göreceksiniz.

Umarım bu makale, WordPress'te birden çok döngüyle yinelenen gönderi görüntüsünü nasıl önleyeceğinizi öğrenmenize yardımcı olmuştur. Ayrıca WordPress döngüsünde herhangi bir sayıda gönderiyi devre dışı bırakma ve WordPress'te yapışkan gönderiler oluşturma kılavuzlarımıza da bakmak isteyebilirsiniz.
Bu makaleyi beğendiyseniz, lütfen WordPress video eğitimleri için YouTube Kanalımıza abone olun. Bizi ayrıca Twitter ve Facebook'ta da bulabilirsiniz.

Nick J
Bunu yapan bir eklenti var mı?
Satriyo
Birisi bana bunu nasıl yapacağımı söyleyebilir mi? Bu konuda gerçekten yeniyim ve yardıma ihtiyacım var, lütfen gönderi kimliği ile net bir örnek verin, nasıl saklayacağım? Diyelim ki benimki 1527.
Gaurav
Belirli bir kategorinin döngülerinden önce 2 döngü çalıştırıyorum ve bu döngülerde yinelenenleri önlemek istiyorum. Peki ilk iki döngüden kimlikleri diziye nasıl saklarım?
Joe
Tam da aradığım şeydi – teşekkürler!
Guilherme Alves
Çok teşekkür ederim :))) Bana çok yardımcı oluyor!
Günümü kurtardın <3
WPBeginner Desteği
Merhaba Guilherme,
You are welcome
Don’t forget to follow us on Facebook for more WordPress tips and tutorials.
Yönetici
Julie
AWESOME!! Thank you so much! And thank you SERGEYVLASOV for that last comment– Worked like a charm for my multiple loops. Hooray!!
Pirooz
Bu yöntem, bir dosyada bulunan 2 döngünün her ikisi de olana kadar gayet iyi çalışıyor.
ancak ilk döngüyü header.php'ye ve diğerini index.php'ye koyduğumda,
in_array($post->ID, $do_nit_duplicate) null döndürüyor.
Ne yapabilirim?
warren
Herkese iyi günler,
sitemdeki gönderilerin çift görüntülenmesi sorunum için işe yarar mı? gönderilerin altında bir kopyasını ve 1, 2, -> düğmesini gösteriyor...
site şu şekilde: Eklentileri devre dışı bırakıp tekrar etkinleştirdim, çıldırmak üzereyim.
agus
yardımcı olabilir misin?
Sitemde yinelenen kategoriyle ilgili bir sorunum var
lütfen
#teşekkürler
WPBeginner Desteği
Temaya özgü bir sorun gibi görünüyor, destek için tema geliştiricileriyle iletişime geçin.
Yönetici
Gabriel
Varsayılan döngü üzerinde yineleme yapmadan önce wp_reset_postdata(); kullanmalı mıyız?
Greg
@sergeyvlasov – Teşekkürler, benim için işe yaradı
ama değiştirdim
$do_nit_duplicate yerine $do_not_duplicate
Ron Hantman
Bu görevi döngü dışında yapan bu çözüme göz atın:
http://wordpress.stackexchange.com/questions/61936/removing-duplicate-values-between-two-wordpress-queries/
sergeyvlasov
Bu algoritma kusurlu sanırım. En fazla 1 (bir) tekrarlamayı tespit edebilir. Yani sihirli satır şöyle görünürdü:
$do_not_duplicate[] = $post->ID
ve sonra şöyle kullanılır:
if(in_array($post->ID, $do_nit_duplicate)) continue;