PHP

Gönderiler, Sayfalar ve Gönderi Türleri

Bu serinin bu bölümünde WP_Querykullanmayı öğreneceksin WP_Query gönderileri, sayfaları ve özel gönderi türlerini sorgulamak için. Belirli gönderileri ve sayfaları sorgulayabilir veya bir veya daha fazla gönderi türünden gönderileri döndürmek için bir sorgu çalıştırabilirsiniz.

WP_Query’de Argümanların Nasıl Çalıştığına İlişkin Bir Özet

Başlamadan önce, argümanların nasıl çalıştığına dair kısa bir özet yapalım. WP_Query. kodladığınızda WP_Query temalarınıza veya eklentilerinize dört ana öğe eklemeniz gerekir:

  • Bu eğitimde ele alınacak parametreleri kullanarak sorgu için argümanlar
  • sorgunun kendisi
  • döngü
  • bitirme: if ve while etiketlerini kapatma ve gönderi verilerini sıfırlama

Pratikte, bu aşağıdaki gibi görünecektir:

Argümanlar, WordPress’e veritabanından hangi verilerin getirileceğini söyler ve burada ele alacağım olanlar bunlar. Yani burada odaklandığımız tek şey kodun ilk kısmı:

Gördüğünüz gibi, argümanlar bir dizide yer alıyor. Bu eğitimde çalışırken onları nasıl kodlayacağınızı öğreneceksiniz.

Argümanlarınızı Kodlamak

Dizideki bağımsız değişkenleri kodlamanın aşağıdaki gibi belirli bir yolu vardır:

Parametreleri ve değerlerini tek tırnak içine almalısınız, => aralarına virgül koyarak ayırın. Bunu yanlış anlarsanız, WordPress tüm argümanlarınızı sorguya eklemeyebilir veya beyaz bir ekran alabilirsiniz.

Tek Gönderiler veya Sayfalar İçin Sorgulama

En basit senaryoyla başlayalım: belirli bir gönderiyi veya sayfayı bulmak için bir sorgu çalıştırmak.

Bir Gönderi için Sorgulama

Belirli bir gönderiyi (veya gönderi grubunu) bulmak için iki seçeneğiniz vardır:

  • p (int): Posta kimliğini kullanın.
  • name (sicim): Gönderi bilgisini kullanın.

Bu parametreleri gönderiler, sayfalar, ekler ve özel gönderi türleri dahil olmak üzere herhangi bir gönderi türüyle kullanabilirsiniz. Varsayılan olarak, WordPress aşağıdakileri sorgulayacaktır: 'post' gönderi türü ve sayfaları veya özel gönderi türlerini döndürmeyin – bunu yapmak istiyorsanız, daha fazla argüman eklemeniz veya bu eğitimde daha sonra geleceğim farklı bir argüman kullanmanız gerekecek.

Belirli bir gönderiyi döndürmek için şunlardan birini kullanırsınız:

veya:

Şuna dikkat edin: name parametresi, argüman olarak gönderi bilgisini alır, olumsuzluk onun başlığı.

Kullanmak name parametresi, daha sonraki bir tarihte kodunuzu tekrar ziyaret ettiğinizde sorgunuzun veritabanından ne getireceğini belirlemeyi kolaylaştırır, ancak sitenizin kullanıcılarından biri gönderi bilgisini değiştirirse, çalışmama riski vardır. Posta kimliği değiştirilemez, bu nedenle bu daha güvenlidir.

İşte benim için yukarıdaki iki sorguyu çalıştırmanın sonucu.

Tek Gönderi için WP_QueryTek Gönderi için WP_Query

Bir Sayfa için Sorgulama

Belirli bir sayfayı sorgulamak için tekrar iki seçeneğiniz vardır:

  • page_id (int): Sayfa kimliğini kullanın.
  • pagename (sicim): Sayfa bilgisini kullanın.

Bu nedenle, veritabanından yalnızca belirli bir sayfa getiren bir sorgu çalıştırmak için şunlardan birini kullanırsınız:

veya:

geçtiğimizi fark etmişsindir 20 bir dize olarak page_id bizim örneğimizde. Bu 20 bir tam sayıya dönüştürülür çünkü page_id parametrenin bir tamsayı olmasını bekler.

Yukarıdaki sorguları çalıştırarak aşağıdaki sayfaları geri aldım.

Tek Sayfa için WP_QueryTek Sayfa için WP_QueryTek Sayfa için WP_Query

Başka Türdeki Bir Gönderiyi Sorgulama

Özel bir gönderi türü de dahil olmak üzere başka bir gönderi türünden bir gönderi için bir sorgu çalıştırmak için post_type parametre. Bunu bu eğitimde daha sonra biraz daha ayrıntılı olarak ele alacağım, ancak kısaca, tek bir gönderiyi sorgulamak için product özel gönderi türü, bunu kullanırsınız:

Veya bir eki sorgulamak için şunları kullanırsınız:

İkinci sorguyu çalıştırırsam bir görüntüyü geri alırım.

WP_Query Gönderi Kimliği ve TürüWP_Query Gönderi Kimliği ve TürüWP_Query Gönderi Kimliği ve Türü

Alt Sayfalar için Sorgulama

Bazen, belirli bir sayfanın alt öğeleri olan tüm sayfaları almanız gerekebilir; örneğin, sitenizin hiyerarşik bir sayfa yapısı varsa ve o sayfanın alt öğelerinin her sayfasında bir liste görüntülemek istiyorsanız.

Bunu, hiyerarşik olmadığı için gönderilerle yapmazsınız, ancak hiyerarşikse özel bir gönderi türüyle yapabilirsiniz.

Bunu yapmak için kullanabileceğiniz üç argümanınız var:

  • post_parent (int): Yalnızca alt sayfaları döndürmek için sayfa kimliğini kullanın. Yalnızca üst düzey girişleri döndürmek için 0’a ayarlayın.
  • post_parent__in (dizi): Bir dizi gönderi kimliği kullanın.
  • post_parent__not_in (dizi): Bir dizi gönderi kimliği kullanın.

Her birine bir göz atalım.

İlk, post_parentbelirli bir sayfanın alt öğeleri olan sayfaları sorgulamanıza olanak tanır.

Bu nedenle, belirli bir sayfanın alt öğeleri olan tüm sayfaları bulmak için şunu kullanırsınız:

dahil etmeniz gerektiğini unutmayın. post_type varsayılan gönderi türü olarak argüman WP_Query arar post.

Bunu daha da ileri götürerek, geçerli sayfanın alt öğelerini bulmak için bunu şu şekilde kullanırsınız:

Bu parametreyi, üst düzey sayfaları, yani bir ebeveyni olmayanları belirlemek için de kullanabilirsiniz:

Peki ya birden çok sayfanın alt öğelerini belirlemek istiyorsanız? ile bunu da yapabilirsiniz. post_parent__in parametre. Bu, bir dizi posta kimliği alır.

Bu nedenle, iki sayfanızın çocuklarını sorgulamak için şunu kullanırsınız:

Ayrıca, alt sayfaları sorgunuzdan hariç tutabilirsiniz. post_parent__not_in parametre:

Birden Fazla Gönderi için Sorgulama

Birden çok gönderiyi dahil etmek veya hariç tutmak için bir sorgu çalıştırmak da yaygındır. Bunun için kullanabileceğiniz iki argümanınız var:

  • post__in (dizi): Posta kimliklerini kullanın.
  • post__not_in (dizi): Posta kimliklerini kullanın.

bu post__in argüman tüm gönderi türleri için kullanılabilir ve bir dizi kimlik alır. Bu nedenle, belirli gönderilerin bir listesini çıkarmak için şunu kullanırsınız:

WP_Query Birden Çok Alınan GönderiWP_Query Birden Çok Alınan GönderiWP_Query Birden Çok Alınan Gönderi

Alınan gönderiler listesinin 704 ve 224 kimliklerine sahip gönderileri içermediğini fark etmiş olabilirsiniz. Bunun nedeni, WordPress’in varsayılan olarak yalnızca yayınlanan gönderileri getirmesidir. değerini ayarlayarak farklı statülere sahip gönderileri almak mümkündür. post_status argüman 'any'. Bu argüman ve olası geçerli değerleri hakkında daha fazla bilgiyi şurada bulabilirsiniz: bu eğitim.

Herhangi Bir Durumda WP_Query GönderisiHerhangi Bir Durumda WP_Query GönderisiHerhangi Bir Durumda WP_Query Gönderisi

Muhtemelen alınanlar listesindeki ilk gönderiyi de merak ediyorsundur. kullanıyorsanız lütfen unutmayın. post__in gönderileri getirme argümanı, yukarıdaki resimde görebileceğiniz gibi, WordPress listenizde olmasalar bile yapışkan gönderileri almaya devam edecektir. Bunları atlamak için, ignore_sticky_posts argüman:

WP_Query Herhangi Bir Gönderi Yapışkanlığı Yok SayıyorWP_Query Herhangi Bir Gönderi Yapışkanlığı Yok SayıyorWP_Query Herhangi Bir Gönderi Yapışkanlığı Yok Sayıyor

bu post__not_in argüman benzer şekilde çalışır, yine bir dizi posta kimliği alır, ancak her şeyi çıkarır hariç listelenen gönderiler. Çok sayıda gönderi listesinin çıktısını almaktan kaçınmak için normalde onu diğer argümanlarla birleştirirsiniz.

İkisini birden kullanamayacağınızı unutmayın. post__in ve post_not__in aynı sorguda.

Yani tüm gönderileri sorgulamak için product gönderi türü, ancak birkaçını hariç tutun:

Bunu daha önceki örneklerimizden biriyle birleştirmek için, mevcut sayfa dışındaki tüm üst düzey sayfaları şu şekilde sorgularsınız:

Hiyerarşik bir gönderi türü de kaydettiyseniz, şunları eklemeniz gerekeceğini unutmayın. post_type sadece sayfaları sorgulamak için bu koddaki parametre.

Yazı Tipleri için Sorgulama

Yukarıdaki örneklerin bazılarında, post_type belirli bir türdeki gönderileri tanımlamak için parametre. Bu parametre ile kullanabileceğiniz argümanlara bir göz atalım:

  • post: Bir yazı.
  • page: Bir sayfa.
  • revision: Bir revizyon.
  • attachment: Bir ek.
  • nav_menu_item: Bir gezinme menüsü öğesi.
  • any: Revizyonlar ve türler dışında herhangi bir türü alır. 'exclude_from_search' ayarlanır true kayıt olduklarında.
  • Özel Gönderi Türleri (ör. product).

Yukarıda gördüğümüz gibi, sorgunuzu daha spesifik hale getirmek için bu parametreyi diğer argümanlarla birlikte kullanabilirsiniz.

için değer post_type genellikle ayarlanır post varsayılan olarak. Ancak, olur any ne zaman kullanırsan kullan tax_query sorgularınızda argüman.

Basit bir örnek vermek gerekirse, sitenizin tüm sayfaları için şu şekilde sorgulama yaparsınız:

Özel Gönderi Türleri

Özel bir gönderi türünü sorgulamak basittir: kayıt yaparken gönderi türüne verdiğiniz adı kullanın, olumsuzluk yönetici menülerinde kullanılan başlık. Diyelim ki ürün gönderi türlerinizi kullanarak kaydettiniz. register_post_type() aşağıdaki gibi:

için kullandığınız değer post_type ürünler için sorgulama yapıldığında argüman 'Product' veya 'Products' ancak 'product':

ekler

Varsayılan olarak, ekler için bir sorgu çalıştırmayı denerseniz, çalışmaz. Bunun nedeni, WordPress’in post_status eklerin inherit ve WP_Query varsayılan 'post_status' => 'publish' aksini belirtmediğiniz sürece. Yani ekleri sorgulamak istiyorsanız, zorunlu Dahil et post_status argüman:

Ayrıca kullanabileceğinizi unutmayın any onun yerine inherit.

Özet

kullanma WP_Query gönderiler ve gönderi türleri için özel sorgular oluşturmak çok yaptığım bir şey. Buradaki örneklerden de gördüğünüz gibi, birçok olasılık var:

  • Sitenizdeki üst düzey sayfaları sorgulamak için kullanın.
  • Belirli bir gönderi türündeki gönderileri sorgulamak için kullanın.
  • Belirttiğiniz gönderiler dışındaki tüm gönderileri sorgulamak için kullanın.
  • Geçerli sayfanın tüm alt öğelerini sorgulamak için kullanın.

Burada ele alınan argümanları kullanmak için daha birçok olasılık var, ancak bu size bir fikir verecektir.

Bu gönderi, şu kişilerin katkılarıyla güncellendi: Nitish Kumar. Nitish, çeşitli platformlarda e-ticaret web siteleri oluşturma deneyimine sahip bir web geliştiricisidir. Boş zamanlarını günlük hayatını kolaylaştıran kişisel projeler üzerinde çalışarak ya da arkadaşlarıyla uzun akşam yürüyüşleri yaparak geçiriyor.

İlgili Makaleler

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.

Başa dön tuşu