WordPress Sitenize Kolayca Posta Filtreleri Nasıl Eklenir
Yayınlanan: 2015-01-25Sık karşılaştığım bir istek, kullanıcıların web sitelerinin ön ucundaki gönderileri filtrelemesine veya sıralamasına izin verme yeteneğidir.
Belki kullanıcılar gönderileri alfabetik olarak görüntülemek veya yalnızca küçük resimleri olan gönderileri görmek isterler? Bu, normal gönderiler için zaten mantıklıdır ancak ürünler, fotoğraflar veya diğer içerik türleri söz konusu olduğunda daha da anlamlı olabilir.
Bugünün Hafta Sonu WordPress Projesinde, Yirmi Onbeş temasında bunun gibi bir özelliği nasıl uygulayabileceğinizin kısa bir özetini vereceğim. Hadi çatlayalım!
- Alt Tema Oluşturma
- Kontroller Oluşturma
- Sorguyu Değiştirme
- Daha Akıllı Formlar
- WordPress Davranışı
- Çözüm
Alt Tema Oluşturma
Her zaman olduğu gibi, bir çocuk temasına ihtiyacınız var. WPMU DEV'de alt temalar için bir kılavuzumuz var, alt temalara aşina değilseniz bunu okumanızı tavsiye ederim.
Kontroller Oluşturma
Üç kontrol ekleyelim: biri gönderileri sıralamak için, biri sıralama yönünü ayarlamak için ve diğeri yalnızca küçük resimli gönderileri göstermek için.
İlk adım, ana temanın index.php
alt temamıza kopyalamaktır.
index.php
dosyasını açın ve aşağıdaki HTML'yi ana kapsayıcının altına yapıştırın (20. satırda olmalıdır):
Ve işte ön uçta nasıl göründüğü:

Gördüğünüz gibi, biraz stil eksikliğimiz var. Bunu stil sayfasına bazı stiller ekleyerek çözelim:

Programlamaya yeni başlayanlardan sık sık duyduğum bir tepki şudur: "Bunların temaya uyum sağlayacak stiller olduğunu nasıl bildi?"
Çözüm oldukça basit: Hile yapıyorum. Normal makale öğelerini incelemek için Chrome'daki geliştirici araçlarını kullanıyorum. Bu durumda, elemanların kutu gölgelerini ve kenar boşluklarını nasıl aldıklarını görmeme izin verdi ve bu kuralları basitçe kendi elemanıma uyguladım.
Sorguyu Değiştirme
“Başlığa göre sırala”, “artan” ve “küçük resimli gönderiler”i seçip formu gönderelim. Aslında koda hiçbir şey yapmadan bir değişiklik görmelisiniz.
Nedenini görmek için URL'yi inceleyelim. Bunun gibi bir şey olmalı:
http://yourdomain.com/?orderby=post_title&order=DESC&thumbnail=only_thumbnailed
$_GET
değişkeni kullanılarak PHP betiklerimizde küçük bilgiler geri çağrılabilir. WordPress, order ve orderby parametrelerinin ne anlama geldiğini zaten biliyor ve bunları varsayılan sorguda kullanıyor. Sonuç olarak, yalnızca sipariş verme ve sipariş yönüne ihtiyacımız varsa, aslında işimiz bitmiştir.
Hepsi harika, ama yine de, bunu nasıl bildim? Parametre olarak "orderby" yerine "order_by" kullanabilirdim. Bu durumda WordPress niyetimizi anlamaz. Birçoğu URL'lerde kullanılabilecek bir sürü parametrenin bulunduğu WordPress Kodeksi'ndeki WP_Query belgelerine baktım.
Şimdi küçük resim sonrası parametremizi uygulayalım. Bir gönderinin, kendisiyle ilişkilendirilmiş _thumbnail_id
anahtarına sahip meta verileri varsa, küçük resmi vardır. Bunun dikkate alındığından emin olmak için sorgumuzu değiştirmemiz gerekecek. Şimdi bunu query_posts()
ile yapalım.

Aşağıdaki kodu, dosyanın en üstündeki get_header()
işlevinin üzerine yapıştırın:
Orijinal sorgunun parametrelerini kendi yeni parametremizle birleştiririz, bu da farklı bir gönderi kümesiyle sonuçlanır. Formumuz şimdi çalışıyor ancak seçimlerimizi hatırlamıyor. Bunu formumuzu yeniden yazarak ve biraz PHP kullanarak düzeltelim.
Daha Akıllı Formlar
Seçiciye göre sıralamanın tüm seçeneklerini listelemeye ek olarak, hangisinin seçili olduğunu belirtmenin bir yoluna ihtiyacımız var. Bunu bir döngü olmadan yapacak olsaydık, şöyle görünürdü:
Bunlardan herhangi birini anlıyor musun? Seni suçlamıyorum! Her seçenek içinde, o anda seçili olan değerin seçeneğin değerine eşit olup olmadığını kontrol ediyoruz. Eğer öyleyse, seçilen özelliğin çıktısını alıyoruz. Bunu bir döngü ile çok daha temiz hale getirelim:
Bu biraz daha uzun ama sadece üç seçeneğimiz olduğu için. Bu, her türlü seçimi yönetmek için çok daha iyi bir formattır. Bunu tüm forma genişletelim:
Hepsi tamam. Form artık URL'deki $_GET
değişkenlerine dayalı seçimlerimizi hatırlamalıdır.
WordPress Davranışı
WP_Query belgelerine baktığım için “order” ve “orderby” kullanmayı bildiğimi nasıl söylediğimi hatırlıyor musunuz? Bu iyi bir uygulamadır, ancak beklenmedik sonuçlara yol açabilir. Sahip olduğunuz bir kategorinin bilgisini bulun, bu kategorinin "wordpress" olduğunu söyleyin.
Şimdi şu URL'yi kullanın: http://yourwebsite.com/?category_name=wordpress. Tüm WordPress gönderilerinizi listeleyen kategori arşivinizi görmelisiniz. Bu gayet iyi, ancak iki sorunumuz var:
Güzel kalıcı bağlantılarınız açıksa (ki bunu yapmalısınız), sayfa yeni bir URL'ye yönlendirilmiştir, büyük olasılıkla http://yourwebsite.com/category/wordpress. Bu görünümü index.php
değil archive.php
dosyası işlediğinden filtrelerimiz görünmeyecektir. Ayrıca, kategori adımız bir URL parametresi olarak iletilmez, bu nedenle filtrelerimizin çalışması için bazı ek hileler kullanmamız gerekecek.
Bu işi yapmanın kısayol yolu, WordPress'in kullandığı parametreleri kasıtlı olarak kullanmamaktır. WordPress bunu almayacağından, URL'deki catname
parametresini kullanarak kategori adını iletebilirsiniz. Daha sonra doğru parametre adını kullanarak bunu sorguya besleyebilirsiniz. Bunun gibi bir şey:
Alternatif olarak, formumuzu index.php
olduğu gibi çıktılamak yerine bir fonksiyon kullanmak olabilir. Kategoriyi WordPress sorgusunun kendisinden tespit etmeniz ve buna dayalı olarak mevcut seçimi görüntülemeniz gerekir.
Çözüm
Kendi filtrelerinizi eklemek o kadar da zor değil ama biraz uğraş gerektiriyor. Bizim durumumuzda, sıra rastgele olarak ayarlandığında sayfalandırmanın kaldırıldığından emin olmak isteyebilirsiniz. Sadece sayfayı yeniden yükleyen bir "daha fazla rastgelelik göster" düğmesi ile değiştirilebilir.
Umarım bu makale size bunu kendiniz için nasıl başarabileceğinizin temellerini vermiştir ve ihtiyacınız olan filtreleri oluşturabileceksiniz.
Etiketler: