WordPress blog sorgularını değiştirin: İstediğiniz yazıları, etiketleri, kategorileri, yazarları gösterin, istemediklerinizi saklayın

Blog yazıyorsanız muhtemelen ihtiyaç duymuşsunuzdur. Bazı yazılarınızı blogunuzda göstermek istemezsiniz. Onları bir referans sayfası olarak arka planda saklamak istersiniz. Ya link verirsiniz yada bir slider bağlar, farklı bir gösterim tarzı ile okurlarınıza sunarsınız.

Bazen de bunun tersi olur. Sadece belirli bir şartı sağlayan (belirli bir etikete sahip olan yada belirli bir yazarın yazdığı vb) yazılar blog sayfanızda görünsün istersiniz. Bunu dışındaki yazılarınız açıkta olsun istemezsiniz.

Gerçek hayattan bir örnek vereyim. Mesela Bilenler Kabilesi için siteye kampanyalar bölümü eklemek istiyordum. Kampanya sonlandığında yazı faydasız hale geleceğinden ana sayfadaki blog düzeninde yer alsın istemiyordum. O yüzden güncel kampanyaları bir slaytta gösterip, diğerlerini ana sayfadan gizlemeye karar vermiştim.

Benim bu basit isteğim, WordPress’te bir tuşa basarak kolayca halledilebilecek bir şey değildi. Ama bilen biri için birkaç satır kodun eklenmesi kadar da kolay birşeydi. Nitekim ben de bu iş için eski kampanyaları bir kategoride topladım ve functions.php dosyasına yazdığım biriki satır PHP kodu ile ana sayfadan sakladım.

Bu kodlar uzman kullanıcılara kolay ama normal bir WordPress blog yazarına kabus gibi gelebiliyor. Hem anlamada hem de kullanımda zorluklar yaşanıyor. Ben de bu yüzden sık karşılaşılan basit istekler için kodları hazırladım ve resimli rehberler ile nasıl kullanılacağını anlattım.

Eğer blog yazılarınızdan bazılarını gizlemek yada sadece yazılarınızın bazılarını göstermek istiyorsanız, bunu kategori/etiket/yazar bazında kontrol edebilmek istiyorsanız, çözüm hap şeklinde hazır. Size düşen tek şey ihtiyacınız olan başlığa tıklamak ve rehberi adım adım takip etmek olacak. Şimdiden kolay gelsin…

Bi saniye, Kodlar nereden geliyor?

Bildiğiniz gibi WordPress açık kaynak kodlu bir topluluk projesi. Kullandığımız temalarda açık kaynak kodlu. Dolayısıyla inceleyip istediğimiz gibi değiştirebiliyoruz.

Esasen kulandığımız kodlar PHP ile yazılmış ama detaylı PHP öğrenmemize gerek olmuyor. Yapmanız için kullanabileceğiniz hazır kod yapıları bizzat WordPress tarafından kullanıcılara sunuluyor. Mesela WordPress’in “WP Query” yani veritabanından hazırladığınız yazı ve sayfaları alarak gösterimini yapan sınıfı WP Query yardım belgesinde detaylıca anlatılıyor. Yeterince vakti olan her kişinin anlatılanları anlayacağına eminim. Fakat ben bu kadar teknik değil de, işin daha çok pratik tarafını anlatmayı tercih ettim.

İstediğini Sakla…
Seçtiğiniz kategoriye, yazara, etikete ait yazılar blogunuzda gösterilmesin. Yazılar silinmeden blog akışınızdan gizlensin.

Seçilen yazılar blog sayfasında gösterilmesin ” ifadesinin hemen önüne kodlarımızı yapıştıralım.

Kod kısmındaki “POST ID” bölümünü öğrendiğimiz POST ID olan 34 ile değiştirelim. Ardından “Dosyayı Güncelle” butonuna tıklayalım.

(Not: Birden fazla yazıyı gösterimden kaldırmak isterseniz, POST ID numaralarını aralarına virgül koyarak girebilirsiniz. Örnek: 1, 2, 3 )

000068-02-06

İşlem tamam. Eğer blog sayfanıza girer ve sayfayı güncellerseniz, yazının kaybolduğunu göreceksinizdir.

function yazi_gizle($query) {
if ($query->is_home()) {
$query->set(‘post__not_in’, array(POST ID));
}
return $query;
}
add_filter(‘pre_get_posts’, ‘yazi_gizle’);

“POST ID” yazan bölümü, göstermek istemediğiniz yazının benzersiz ID numarası ile değiştirmeli ve kodları temanızın functions.php dosyasına kopyalamalısınız. Birden fazla yazıyı gizlemek için ID numaralarını aralarına virgül koyarak 1, 2, 3 şeklinde yazabilirsiniz.
Aynı kategori altındaki yazılar blog sayfasından topluca kaldırılsın ” ifadesinin hemen önüne kodlarımızı yapıştıralım.

Kod kısmındaki “KATEGORI ID” bölümünü öğrendiğimiz KATEGORI ID olan 5 ile değiştirelim. Ardından “Dosyayı Güncelle” butonuna tıklayalım.

(Not: Birden fazla kategoriyi gösterimden kaldırmak isterseniz, KATEGORI ID numaralarını aralarına virgül koyarak girebilirsiniz. Örnek: ‘-1, -2, -3’)

000068-03-06

İşlem tamamlandı. Eğer blog sayfanıza girer ve sayfayı güncellerseniz, “News” kategorisine ait yazıların kaybolduğunu göreceksinizdir.

function kategori_gizle($query) {
if ($query->is_home()) {
$query->set(‘cat’, ‘-KATEGORI ID’);
}
return $query;
}
add_filter(‘pre_get_posts’, ‘kategori_gizle’);

“KATEGORI ID” yazan bölüme ana sayfada bulunmasını istemediğiniz kategorinin benzersiz ID numarasını yazmalısınız. Birden fazla kategoriyi ana sayfada hariç tutmak için aralarına virgül koyarak ‘-1, -2, -3’ şeklinde yazabilirsiniz. Değişikliği yaptıktan sonra kodları temanızın functions.php dosyasına kopyalamalısınız.
Aynı isimle etiketlenmiş yazılar blog akışından toplu olarak hariç tutulsun ” ifadesinin hemen önüne kodlarımızı yazalım.

Kod kısmındaki “ETIKET ID” bölümünü öğrendiğimiz ETIKET ID olan 12 ile değiştirelim. Ardından “Dosyayı Güncelle” butonuna tıklayalım.

(Not: Birden fazla etiketi gösterimden kaldırmak isterseniz, ETIKET ID numaralarını aralarına virgül koyarak girebilirsiniz. Örnek: 1, 2, 3 )

000068-04-06

İşlem tamamlandı. Eğer blog sayfanıza girer ve sayfayı güncellerseniz, “Qiameth” adıyla etiketlenmiş bütün yazının kaybolduğunu göreceksinizdir.

function etiket_gizle($query) {
if ($query->is_home()) {
$query->set(‘tag__not_in’, array(ETIKET ID));
}
return $query;
}
add_filter(‘pre_get_posts’, ‘etiket_gizle’);

“ETIKET ID” yazan bölüme ana sayfada göstermemek istediğiniz etiketin benzersiz ID numarasını yazmalısınız. Birden fazla kategoriyi ana sayfada hariç tutmak için aralarına virgül koyarak 1, 2, 3 şeklinde yazabilirsiniz. Değişikliği yaptıktan sonra kodları temanızın functions.php dosyasına kopyalamalısınız.
Belirlenen yazarlara ait yazıların tümü, ana sayfadaki blog akışından hariç tutulsun ” ifadesinin hemen önüne kodlarımızı yapıştıralım.

Kod kısmındaki “YAZAR ID” bölümünü öğrendiğimiz YAZAR ID ile değiştirelim. Ardından “Dosyayı Güncelle” butonuna tıklayalım.

(Not: Birden fazla yazara ait yazıları gösterimden kaldırmak isterseniz, YAZAR ID numaralarını aralarına virgül koyarak girebilirsiniz. Örnek: ‘-1, -2, -3’)

000068-05-06

İşlem tamam. Eğer blog sayfanıza girer ve sayfayı güncellerseniz, “admin” kullanıcısı tarafından yazılan yazıların gösterilmediğini göreceksinizdir.

function yazar_gizle($query) {
if ($query->is_home()) {
$query->set(‘author’, ‘-YAZAR ID’);
}
return $query;
}
add_filter(‘pre_get_posts’, ‘yazar_gizle’);

“YAZAR ID” yazan bölümü, yazılarını blog sayfasından saklamak istediğiniz yazarın benzersiz ID numarası ile değiştirmeli ve kodları temanızın functions.php dosyasına kopyalamalısınız. Birden fazla yazarı engellemek için ID numaralarının aralarına virgül koyarak ‘-1, -2, -3’ şeklinde yazabilirsiniz.
Son yazılan X adet yazı blog sayfasında görüntülenmesin ” ifadesinin hemen önüne kodlarımızı yapıştıralım.

Kod kısmındaki “ADET” metnini silip yerine gizlemek istediğimiz yazı sayısının adedini girelim. Ardından “Dosyayı Güncelle” butonuna tıklayalım.

000068-06-04

İşlem tamam. Eğer blog sayfanıza girer ve sayfayı güncellerseniz, istediğimiz gibi en son yayınlanan 2 yazının gösterilmediğini göreceksinizdir.

function adet_gizle($query) {
if ($query->is_home()) {
$query->set(‘offset’, ‘ADET’);
}
return $query;
}
add_filter(‘pre_get_posts’, ‘adet_gizle’);

“ADET” yazan bölümü, ana sayfada göstermek istemediğiniz son yayınlanan gönderi sayısı ile değiştirmeli ve kodları temanızın functions.php dosyasına kopyalamalısınız.

İstediğini Göster…
Blogunuzda sadece sizin seçtiğiniz kategoriye, yazara, etikete ait yazılar gösterilsin. Diğer yazılar silinmeden saklansın.

Blogda yalnızca seçtiğiniz yazılar gösterilsin, diğerleri gizlensin ” ifadesinin hemen önüne kodlarımızı yapıştıralım.

Kod kısmındaki “POST ID” bölümünü öğrendiğimiz POST ID olan 34 ile değiştirelim. Ardından “Dosyayı Güncelle” butonuna tıklayalım.

(Not: Birden fazla yazıyı blog akışına eklemek isterseniz, POST ID numaralarını aralarına virgül koyarak girebilirsiniz. Örnek: 1, 2, 3 )

000068-07-06

İşlem tamam. Eğer blog sayfanıza girer ve sayfayı güncellerseniz, sadece seçtiğiniz yazının/yazıların gösterildiğini göreceksiniz.

function yazi_goster($query) {
if ($query->is_home()) {
$query->set(‘post__in’, array(POST ID));
}
return $query;
}
add_filter(‘pre_get_posts’, ‘yazi_goster’);

“POST ID” yazan bölümü, göstermek istediğiniz yazının benzersiz ID numarası ile değiştirmeli ve kodları temanızın functions.php dosyasına kopyalamalısınız. Birden fazla yazıyı görünüme eklemek için ID numaralarını aralarına virgül koyarak 1, 2, 3 şeklinde yazabilirsiniz.
Blogda yalnızca belirli kategorilere ait yazılar gösterilsin, diğerleri gizlensin ” ifadesinin hemen önüne kodlarımızı yapıştıralım.

Kod kısmındaki “KATEGORI ID” bölümünü öğrendiğimiz KATEGORI ID olan 5 ile değiştirelim. Ardından “Dosyayı Güncelle” butonuna tıklayalım.

(Not: Birden fazla kategoriyi gösterime eklemek isterseniz, KATEGORI ID numaralarını aralarına virgül koyarak girebilirsiniz. Örnek: ‘1, 2, 3’)

000068-08-06

İşlem tamamlandı. Eğer blog sayfanıza girer ve sayfayı güncellerseniz, blogunuzda artık sadece “News” kategorisindeki yazıların görüntülendiğini görebilirsiniz.

function kategori_goster($query) {
if ($query->is_home()) {
$query->set(‘cat’, ‘KATEGORI ID’);
}
return $query;
}
add_filter(‘pre_get_posts’, ‘kategori_goster’);

“KATEGORI ID” yazan bölümü, ana sayfada göstermek istediğiniz kategorinin benzersiz ID numarası ile değiştirmeli ve kodları temanızın functions.php dosyasına kopyalamalısınız. Birden fazla kategoriyi görünüme eklemek için ID numaralarını aralarına virgül koyarak 1, 2, 3 şeklinde yazabilirsiniz.
Blog akışında sadece bazı etiket adına sahip yazılar gösterilsin, diğerleri gösterilmesin ” ifadesinin hemen önüne kodlarımızı yapıştıralım.

Kod kısmındaki “ETIKET ID” bölümünü öğrendiğimiz ETIKET ID olan 12 ile değiştirelim. Ardından “Dosyayı Güncelle” butonuna tıklayalım.

(Not: Birden fazla etiketi aynı anda göstermek için, ETIKET ID numaralarını aralarına virgül koyarak girebilirsiniz. Örnek: 1, 2, 3 )

000068-09-06

İşlem tamamlandı. Eğer blog sayfanıza girer ve sayfayı güncellerseniz, sadece “Qiameth” kelimesiyle etiketlenmiş yazıların yayınlandığını göreceksinizdir.

function etiket_goster($query) {
if ($query->is_home()) {
$query->set(‘tag__in’, array(ETIKET ID));
}
return $query;
}
add_filter(‘pre_get_posts’, ‘etiket_goster’);

“ETIKET ID” yazan bölüme blogda göstermek istediğiniz etiketin benzersiz ID numarasını yazmalısınız. Birden fazla etiketi gösterime eklemek için aralarına virgül koyarak 1, 2, 3 şeklinde yazabilirsiniz. Değişikliği yaptıktan sonra kodları temanızın functions.php dosyasına kopyalamalısınız.
Blog sayfasında sadece seçilen yazara/yazarlara ait yazılar listelensin, geri kalanı listelenmesin ” ifadesinin hemen önüne kodlarımızı yapıştıralım.

Kod kısmındaki “YAZAR ID” bölümünü öğrendiğimiz YAZAR ID olan 1 ile değiştirelim. Ardından “Dosyayı Güncelle” butonuna tıklayalım.

(Not: Birden fazla yazara ait yazıları gösterimden kaldırmak isterseniz, YAZAR ID numaralarını aralarına virgül koyarak girebilirsiniz. Örnek: ‘1, 2, 3’)

000068-10-06

İşlem tamam. Eğer blog sayfanıza girer ve sayfayı güncellerseniz, sitede sadece “admin” kullanıcısı tarafından yazılan yazıların görüntülendiğini göreceksinizdir.

function yazar_goster($query) {
if ($query->is_home()) {
$query->set(‘author’, ‘YAZAR ID’);
}
return $query;
}
add_filter(‘pre_get_posts’, ‘yazar_goster’);

“YAZAR ID” yazan bölüme ana sayfada yazılarını göstermek istediğiniz yazarların ID numaralarını girmeniz gerekmektedir. Buraya ID numarasını girmediğiniz yazarların yazıları blog sayfanızda görüntülenmez. Birden çok yazarı görüntülemek için YAZAR ID kısmına istediğiniz tüm yazarların ID numaralarını ‘1, 2, 3’ şeklinde girmeniz gerekir. Değişikliği yaptıktan sonra geçerli olması için kodları temanızın functions.php dosyasına kopyalamanız gerekir.

Önemli Notlar:

Burada yaptığınız işlemlerin tümünü eklediğiniz kodları silerek geri alabilirsiniz. Ama ben işe girişmeden önce temanızın functions.php dosyasını yedeklemenizi tavsiye ederim. Yaptığınız herhangi bir hata admin paneline girmenize engel olabilir. Bu durumda FTP yada sunucu hizmetini satın aldığınız web sitesinin yönetim panelini kullanarak dosyayı geri yükleyebilirsiniz.

Eğer bir aksilik olusa ve elinizde functions.php dosyasının bir yedeği yoksa, temanızın orjinal function.php dosyasını bulup kullanabilirsiniz. O da yoksa tema klasörünüzü sunucu panelinizden farklı bir isimle yeniden adlandırarak sorunu çözebilirsiniz.

Konuları anlattığım şekilde takip ederseniz ve hata yapmazsanız sorun olmayacaktır. Kodları verdiğim şekilde doğru yazdığınıza muhakkak emin olun. “YAZAR ID” gibi metinleri silip yerlerine gerekli değerleri girmeye dikkat edin. “_” ve “__” karakterlerine dikkat edin. Bazen tek bazen çift alt çizgi kullanılmıştır. Hatalı yazmanız durumunda sorunla karşılaşabilir yada kodlardan fayda görmeyebilirsiniz. Yazıda geçen tüm kodları bu linkten text belgesi olarak indirebilirsiniz.

Yaptığımız tüm işlemlerde konuları, kategorileri, tagları sakladık ama yok etmedik. Burada yaptığımız saklama işlemi güvenlik amaçlı kullanılamaz. Halen arama motorları robot.txt dosyanızdan sayfa adını öğrenebilir, sayfayı indeksleyebilir. WordPress’in dahili aramasında, arama sonuçlarında çıkabilir. Arşiv sayfasında listelenebilir. Güvenlik için başka bir metod tercih etmeniz gerekecektir.

Yazıda bolca blog, blog sayfası, blog akışı dedik ama hiç ana sayfa demedik. WordPress varsayılanda blog akışını anasayfa olarak yayınlar. Eğer değişiklik yapmadıysanız, gizlediğimiz yada gösterdiğimiz yazılar, kategoriler, etiketler vb. ana sayfada geçerli olacaktır. Eğer değişiklik yapıp blog akışını ana sayfanın bir bölümüne gömdüyseniz, sadece o bölümde etkili olacaktır. Ana sayfada blog yazılarına yer vermiyorsanız (ticari sitelerde sıkça rastlanan bir durum) kodlar blog sayfanızda etkili olacaktır.

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir