WordPress’te özel sorgular yapmak için 5 basit yöntem

Web sitenizin her sayfasında WordPress bir sorgu çalıştırır. Site veritabanınızdan veri alır ve ardından Loop kullanmak için temanız tarafından sipariş edildiği gibi görüntüler. Buna ana istek denir. Görüntülenen sayfa türüne bağlı olarak, WordPress en uygun şablon dosyasını kullanacaktır, bu da döngülerin farklı içerik türleri için farklı olabileceği anlamına gelir. Ancak veritabanından veri almak için her zaman sırayı çalıştıracaktır. Bazen iş yolunu değiştirmek isteyebilirsiniz. Örneğin, ana blog sayfanızda, belirli bir kategorideki yayınları hariç tutmak isteyebilirsiniz veya arşiv sayfanızda tarih siparişi yerine kategoriye dayalı bir gönderi listesi oluşturmak isteyebilirsiniz. Ayrıca, örneğin en son yayınların veya ilgili yayınların bir listesini ekleyerek sayfanıza ek sorgular eklemeniz gerektiğine karar verebilirsiniz. Veya ana kuyruğu tam bir kuyrukla değiştiren bir şablon dosyası oluşturmak isteyebilirsiniz.
İyi haber şu ki, WordPress buna izin veriyor. Ana sorguları değiştirmek veya yeni sorgular oluşturmak için kullanabileceğiniz birkaç yöntem vardır. Bu yazıda göreceğim:
Özel bir sorguya ihtiyaç duyabileceğiniz senaryo, ana sorgu ayarlarını gerektiren ve yeni kuyruk gerektirenlere odaklanın ve
Özel quentler yapmak için beş yöntem (kullanmamanız gerekenler ve nedenler dahil).
Başlamadan önce: Temel bilgileri anlamak Daha önce hiç özel bir sorgu yapmadıysanız, anlamanız gereken bazı terimler vardır. Önceki tema veya sorgu şablonu dosyasıyla çalıştıysanız, bu bölümü iletebilirsiniz!
Kueri, WordPress’in sitenizin veritabanından veri almak için çalıştığı bir rutindir. Bu, yazılarınıza eklediğiniz yayınları, ekleri, yorumları, sayfaları veya herhangi bir içeriği içerecektir. Örneğin, ana blog sayfanızdaki döngünüz her yayının başlığını, çıkartma, üstün görüntünün ve posta sayfasının kendisine (permalink olarak adlandırılır) bağlantı içerebilir.
Şablon dosyaları temanız tarafından her bir içerik türü için sayfaları görüntülemek için kullanılır. Farklı temalarda farklı şablon dosyaları vardır, ancak ana dizin.php dosyasını eklemeli ve genellikle statik sayfalar için bir page.php dosyası, tek gönderi için single.php dosyaları ve arşiv sayfası ve belki de dosyalar kategorisi için archive.php dosyası eklemelidir. .php ve tag.php dosyası kategori arşivleri ve her etiket için. Örneğin Lesung Pipit taksonomisi veya arşiv yazı türü için kullanılabilecek daha fazla şablon dosyası vardır – daha fazla ayrıntı için şablon hiyerarşisine bakın.
Koşullu etiketler, ne tür bir sayfanın görüntüleneceğini kontrol etmek için şablon dosyanızda veya eklentilerle kullanılabilir. Örneğin IS_PAGE () statik sayfanın görüntülenip gösterilmediğini kontrol eder ve IS_HOME () ana sayfada olup olmadığımızı kontrol eder. Kullanıcıların giriş yapıp yapmadığı ve daha fazlası gibi etiketler dahil çok daha koşullu etiketler vardır.
Özel isteklere ihtiyacınız olduğunda iki tür özel sorgu vardır:
WordPress tarafından çağrıldığı gibi ana sorgu, ancak ona yaptığınız değişikliklerle ve
Farklı veya ekstra içerik almak için gerçekten yeni sorgu.
Bakalım her birini ne zaman kullanabilirsin. Bu ana sorguyu değiştirmek, sayfanızın içerik türü için ana sorguları görüntülemesini istiyorsanız yapacağınız bir şeydir, ancak bazı ayarlamalar yapmak istersiniz. Tamamen farklı içerik görüntülemek istemezsiniz ve ek döngüler eklemek istemezsiniz. Örnekler şunları içerebilir: ana blog sayfanızda, özel yayın türleri ve yayınlar görüntüleme
Kategori Arşivi sayfasında, yalnızca bir tür gönderinin yayınlarını görüntüler
Kategori Arşivi sayfasında, tarihe göre değil, alfabeye göre görüntülenen yayınları sıralayın.
Daha fazla olasılık var, ancak gördüğünüz gibi, bu, sorulan şeyde veya çıktı yolunda minimum değişiklikler yapmakla ilgilidir.
Bu yazının ilerleyen saatlerinde size yukarıdakilerin hepsini nasıl başaracağınızı göstereceğim. Yeni bir sorgu yazmak, ana kuyruğu değiştirmek yeterli değilse, yeni bir sorgu yapmanız gerekir. Bu size daha fazla esneklik sağlar, ancak sadece ana kuyruğu değiştirmek istediğinizde kullanılmamalıdır, çünkü daha az verimlidir. Sayfada birden fazla döngü istiyorsanız veya ana sorgulara tamamen yeni bir sorgu yapmak istiyorsanız yeni bir sorgu yapacaksınız. Bir sürü yeni sorgu yapmanız ve değişmeniz gerektiğinde örnekler, ancak şunları ekleyin:
Arşiv sayfasında iki döngü çalıştırın: Birincisi için biri ve bir sonraki yayınlar için bir gönderi. İlk gönderi için farklı içerik görüntülemek istiyorsanız, örneğin ilk yazı için bir teklif veya üstün resim eklemek istiyorsanız, ancak başkaları için değil. Yapmak istediğiniz her şey ilk gönderiyi farklı şekilde ayarlamaksa, okuyucunuzu daha fazla okumaya teşvik etmek için gönderme içeriği altında çok fazla döngü üstünlüğüne ihtiyacınız yok gibi görünüyor.
Örneğin, yeni ürünleri tanıtan bir gönderi eklediyseniz, sayfalarınızın her birine bir üstün direğe (veya tüm üstün direklere) bağlanan afişler eklemek. Bu, statik afişler eklemekten daha fazla esneklik sağlar, çünkü kullanılan gönderiyi daha kolay değiştirebilirsiniz.
Sitenizde bir hiyerarşi sayfasına dayalı bir yapıya sahipse, aynı sitede sayfaların bir listesini yapın. Bunu yan çubuğa koymak isteyebilirsiniz.
Taksonomiye veya yayın türüne (veya belki de her ikisi de kutuda) dayalı yayınları görüntülemek için tam bir kuyrukla sayfanın eksiksiz bir sorgu oluşturun.
Arşiv sayfasında yayın türünde, tarihe dayalı olarak taksonominin kategorisine veya terimine dayalı bir gönderi listesi (örneğin, her kategorideki en son yayınlara bağlantılar içeren sütunlar veya kutular oluşturma).
En son gönderiye bağlantı vermek ve üstün görüntüsünü görüntülemek için yan çubuğunuzda bir afiş yapın.
Belirli bir terimle bir gönderiyi birden fazla taksonomide kaydetmek için bir sayfa oluşturun (örneğin bir film sitesinde, ABD’de yapılan bilimsel kurgu filmlerinin bir listesi, kendi türleri ve ülkeleriyle taksonomiye dönüştürmek. Gönderi türü yapmak. Yan içerik için ve sevkiyat türünden yayın istemek yanda. Bu, kodlayıcı olmayanların, widget’tan alabileceğinden daha fazla esneklikle kenar çubuğuna içerik eklemesine yardımcı olacaktır.
Buraya eklemediğim daha fazla senaryo olacak, ancak bu size bir fikir veriyor. Bu yazıda her birini nasıl başaracağınızı göstermeyeceğim çünkü tartışılacak çok şey olacak, ancak bazı örnekler vereceğim.
Özel sorgular yapma yöntemi, özel sorgular yapmak için beş yöntem vardır ve bu yöntemler, yöntemin ana sorguları değiştirmenize veya yeni sorgular oluşturmanıza yardımcı olup olmadığına göre bölünebilir. Ana sorguları değiştirme yöntemleri şunlardır:
Pre_get_posts eylem kancasını kullanarak. Bu, temanızın dosya işlevine veya eklenti aracılığıyla (tema şablonu dosyanızda değil) işlevler ekleyerek ana kuyrukta değişiklik yapmanızı sağlar. Yalnızca belirli içerik türlerini görüntüleyen bir sayfada çalıştığından emin olmak için koşullu ifadeyle birleştirebilirsiniz.
Query_posts () kullanarak. Bunu kısmen bütünlük için ekledim ama daha da önemlisi neden kullanmamanız gerektiğini açıklamak için. Query_posts (), ana sorguları değiştirmenin verimsiz ve potansiyel olarak güvenilmez bir yoludur. Ana kuyruğu gerçekten değiştirmek yerine, ana kuyruğu aldı ve sonra attı ve tekrar başladı, değişikliklerinizle ana kuyruğu çalıştırdı. Bu sitenizi yavaşlatacaktır. Ayrıca güvenilemez ve özellikle sayfalandırma gerektiğinde hasar görebilir. Bu yüzden kullanmayın !! Kalan üç yöntem size yeni bir kuyruk yapmanızı sağlar:
WP_Query sınıfı. Bu, yeni bir sorgu oluşturmanın en güçlü ve esnek yoludur ve bir şablon dosyasında ikinci bir döngü oluştururken veya ana döngüyü tam olarak değiştiren özel bir sorgu içeren bir şablon dosyası oluştururken kullanacaksınız. Kullanırken dikkatli olmalısınız: Ana risk, döngüyü çalıştırdıktan sonra kuyruğu sıfırlamıyorsanız, bu da WordPress’in ne tür sayfaların görüntülendiğini doğru bir şekilde tanımlayamayacağı anlamına gelir. Ama bunun etrafında kolayca çalışabilirsiniz.
Şablon şablonu get_posts (). Bir gönderim listesi almak için bunu bir şablon dosyasında (örneğin kenar çubuğu veya altbilgi dahil) kullanacaksınız. Bu, bunu yapmak için wp_query sınıfını kullanır, bu yüzden temelde ihtiyacınız olan tek şey bir yazı ise kullanmanın daha basit bir yolu. Hangi gönderiyi istediğinizi belirlemek için onunla bir parametre kullanabilirsiniz.
Şablon şablonu get_pages (). GET_POSTS () ile aynı şekilde çalışır ve göndermek yerine bir sayfa alır.
Şimdi beş yöntemin ne olduğunu biliyorsunuz, her birini ayrıntılı olarak önerilen her birini görelim. Pre_get_posts pre_get_posts eylemi bir eylem kancasıdır, bu da WordPress pre_get_posts eylemlerini çalıştırdığında bir şey yapmak için bir işlev eklediğiniz anlamına gelir. Beklediğiniz gibi, WordPress veritabanından bir yayın almadan hemen önce bu eylemi çalıştırır, bu nedenle eklediğiniz işlev WordPress’in bunu yapma şeklini etkileyecektir. Pre_get_posts kullanmak için işlevler yaparsınız ve ardından şu şekilde harekete geçersiniz:
Yükleme GIST RAEWRITES/3DD9E8ED2F94F0E157F3
Bakalım ne yapıyor:
İlk olarak, my_function adlı bir işlev oluşturur. Kurawal braketlerinde bulunan işlev nedir.
Ardından, işlevi add_action () işlevini kullanarak pre_get_posts kancasına ekledi. Bu olmadan, işleviniz işlev görmez.
Ayrıca, neredeyse her zaman işlevinize koşullu etiketler eklemeniz gerekir. Bu olmadan, WordPress, yöneticide bir yayın üzerinde çalıştığınız zaman da dahil olmak üzere her gönderi aldığınızda işlevlerinizi yerine getirecektir. Yani işleviniz şöyle görünecek:
Raewrites’in özünü içerir/1605B4948FC1EF7DC68A
Yukarıda yönetici ekranında olmadığımızı ve aynı zamanda çalıştırılan sorguların ana sorgular olduğunu kontrol ettim. Ana kuyruğu çalıştırmak için WordPress’i kontrol etmek önemlidir, çünkü yaptığınız ek sorgular için işlevler yerine getirirseniz sorunlara neden olabilir. Göreceğimiz gibi buraya ek koşullu etiketler ekleyebilirsiniz. Bunu birkaç örnekle biraz mükemmelleştirelim.
Varsayılan olarak ana blog sayfanızdaki özel gönderi türü dahil, WordPress yalnızca ana sayfadaki yayınları içerir. Özel bir yazı türü oluşturursanız, başka bir yerde görüntülemek ve buraya girmek istemeyeceğinizi varsayar. Ancak bazen ana sayfada birden fazla yazı türünü görüntülemek isteyebilirsiniz, bu durumda pre_get_posts kancasını kullanırsınız. Bunu yapmak için, functions.php dosyasına aşağıdakileri eklersiniz. :
Raewrites’in özünü içerir/816F6C4B1A068A3D61DF
Bu iki şeyi kontrol eder: bu ana kuyruk mu ve bu bir ana sayfa mıdır (IS_HOME () kullanan). Ardından, iki tür yazı girecek sorguları ayarlar: ‘Post’ ve ‘Custom_post_type’, özel yazı türünüz haline gelir. Ana sayfanın özel yayınlarınızın yayınlarını ve türlerini görüntülemesini istiyorsanız, bir ‘gönderi’ eklemeniz gerektiğini unutmayın. Burada ‘Custom_post_Type’ eklediyseniz, bu, varsayılan ve yalnızca özel yayın türünüzden yazıları değiştirir. Bazen bunu yapmak isteyebilirsiniz ama bu onlardan biri değildir.
Bu teknik hakkında bu yazıda daha ayrıntılı olarak okuyabilirsiniz. Arşiv sayfası kategorisindeki özel gönderme türünden yayınları gösterin Bu örnek, belirli bir gönderi türünüzü kaydettiğinizde, kategoriye destek verdiğinizi ve kategoriyi özel gönderinize ayarladığınızı varsayar. Özel yazı tipinizden yayınları görüntülemek için kategori arşivinizi değiştirmek için aşağıdakileri kullanırsınız:
Raewrites’in özünü içerir/A90B6D0C6F79ABCE6940
Bu, ana sorguların gerçekleştirilip gerçekleştirilmediğini ve IS_CATEGORY () kullanarak kategori arşivinde olup olmadığımızı kontrol eder. Daha sonra özel yazı tipinizden yayın almak için kuyruğu değiştirdi. Buraya ‘Post’ eklemediğim için, sıradan yayınlar herhangi bir kategori arşivinde görüntülenmeyecek ve sadece bir tür gönderi belirlediğim için diziyi kullanmam gerekmiyor. Bu yöntemi kullanırken daha spesifik olmak istiyorsanız, belirli kategorileri inceleyebilirsiniz: Raewrites/EC28AA8540CA04D4D211’in özünü içerir

Bu, ana sorguları yalnızca ‘kategori-Slug’ kategoriniz için bir sümük olduğu ‘Kategori-Slug’ Arşivi sayfasında değiştirecektir. Gönderinin son örneğe göre sıralanma şeklini değiştirme, hangi verilerin sorulduğunu değil, nasıl çıktı ile ilgilenmiyoruz. Kategori arşiv sayfanızda, tarihe göre, ancak alfabetik sırayla bir yayın görüntülemek istemezsiniz. Bunu aşağıdaki gibi pre_get_posts kullanarak yapabilirsiniz:
Raewrites/309A3da6b3427387bc1e’nin özünü içerir
İki sorgu parametresi kullanır: sıralanan yayınları ve görünüm sırasını değiştirmek için sipariş ve sipariş. Pre_get_posts ile kullanabileceğiniz diğer parametreler için, aynı parametreyi kullanan wp_query için WordPress Codex sayfasına bakın. WP_Query Class WP_QUERY Sınıfı, özel kuyruk yazmak için mevcut en güçlü yöntemdir. Ana kuyruğu yeni bir sırayla değiştirmek istediğinizde veya ana kuyruğun yanı sıra yeni bir sorgu eklemek istediğinizde kullanın. WP_Query’nin bir bölümü vardır:
Pre_get_posts için kullanabileceğinize benzer parametreleri kullanarak kuyruk argümanları
İstek yalnız
Temiz: IF ve etiketleri kapatın ve gönderi verilerini sıfırlayın.
Bu aşağıdakilere benzeyecek:
Raewrites’in özünü içerir/5CFC443290A213A93CDE
Gördüğünüz gibi, bu, ana kuyruğu değiştirmek istiyorsanız kullanmaktan kaçınmanızın nedenlerinden biri olan pre_get_posts kullanmaktan daha karmaşıktır. Ancak bunun ana nedeni, WordPress’in daha fazla çalışmasını ve sitenizi yavaşlatmasıdır. Bir örneğe bakalım. Single.php şablon dosyamda içerik yayınladıktan sonra, üstün yayınların bir listesini görüntülemek için ikinci bir döngü eklemek istiyorum. “Üstün” kategorisini kullanarak üstün gönderiyi tanımladım. Bu gönderilerin her biri için, gönderiye bir bağlantı ile üstün görüntü ve başlığı görüntülemek istiyorum. Bunu böyle yaptığım gibi:
Raewrites/F517D958C25EBB776888’in özünü içerir
Bu, veri istemek için üç argüman kullanır:
‘Post_type’ => ‘Post’ sadece bir gönderi al
‘Posts_per_page’ => ‘4’ Sadece dört gönderi alın
‘Post__NOT_IN’ => Array ($ Post-> ID), görüntülenen gönderinin dahil olmamasını sağlar.
Daha sonra, her biri posta sayfasının bağlantısında, üstün görüntüler ve başlıklar görüntüleyen bir dairede dört yayın görüntüler. Daha sonra bunu düzenlemek, yan yana veya kutuya yerleştirip resmin üzerindeki başlığı kaplamak için CSS kullanabilirsiniz. Etiket şablonu get_posts () WP_Query’den aldığınız kadar esnekliğe ihtiyacınız yoksa, get_posts () ‘nın ihtiyacınız olanı yaptığını görebilirsiniz. Aslında, yukarıdaki örnek için kullanabilirim. Get_posts (), wp_query sınıfına erişen bir şablon etiketidir ve WP_Query’ye benzer bir şekilde kullanabilirsiniz. Bu nedenle, WP_Query ile yukarıda oluşturduğum en son dört yazının bir listesini yapmak için, get_posts () ‘yı aşağıdaki şekilde kullanacaksınız: özü içerir
Aradaki Elang gözleri, bunun üst WP_Query ile kullandığım koda çok benzediğini göreceksiniz. Ama gerçekten gözlemciyseniz, bazı farklılıklar göreceksiniz:
Argümanın yazı türünü içermesi gerekmez
Get_posts () ile çıktı dizisini depolamak için $ direk değişkenini kullanıyorum
Kueri’nin bir gönderisi olup olmadığını kontrol etmek yerine, içinde bir şey olup olmadığını kontrol etmek için ($ gönderiler) kullanıyorum
Döngü yerine, dizideki her satırı tekrarlayan foreach ($ direk olarak $ gönderim) kullanıyorum
İstediğim tüm gönderim verilerine erişmek için setup_postdat ($ post) ekliyorum.
Get_posts () wp_query kullandığından, aslında ikisi arasında çok fazla fark yok, bu yüzden wp_query kullanma eğilimindeyim çünkü bana daha fazla esneklik sağlıyor (ve özel bir yazı türüyle kullanmaya alışkın olduğum için). Ama Get_Posts () ‘ı en yararlı bulduğum yerde, sadece argümanımla bir yazı olup olmadığını kontrol etmek isteyip istemem. Daha sonra, bir döngü olması gerekmeyen bir gönderi olup olmadığına bağlı olarak kodu görüntüleyebilirim. Etiket şablonu get_pages () get_pages () get_posts () ‘e çok benzer: wp_query kullanır, ancak göndermek yerine statik bir sayfa alır. Kullanabileceğiniz bir örneğe bakalım. Sitenizde en önemli olan bir dizi üst düzey sayfa var ve bağlantılarını ayarlayabilmeniz ve ziyaretçileri sayfayı açmaya teşvik edebilmeniz için bu listeyi yan tarafa eklemek istiyorsunuz. Sidebar.php şablon dosyanızda şu kodu ekleyeceksiniz: Raewrites’in özünü içerir/15CF3EFC9B219CE0889D
Şuna bakalım:
Önce argümanımı tanımlıyorum – ‘ebeveyn’ => 0 ebeveynsiz bir sayfa alın, diğer iki argüman sayfanın nasıl sıralandığını belirler.
Daha sonra $ sayfalar olarak depolanan diziyi doldurmak için get_pages () kullanıyorum
$ Sayfalarda veri olup olmadığını kontrol ediyorum ($ sayfa)
Öyleyse, listeyi açarım, sonra her sayfa için liste öğesini açarım
Get_pages () ile yaptığım gibi setup_postdata () kullanmak yerine, bağlantıları ve başlıkları görüntüleyecek farklı bir şablon etiketi ile $ POST değişkenine doğrudan bir referans yaptım. Bunu kullanmam gerekiyor çünkü setup_postdata () kullanmadım. Setup_postdata () kullanmıyorum çünkü wp_reset_postdata () kullanmam gerekmiyor.
Yukarıdaki kod, tüm ihtişamıyla wp_query kullandığımdan daha sayfa listesi yayınlamanın daha verimli bir yoludur. Sonuç Ana sorguları değiştirebilmek veya kendi sorgularınızı yazabilmek, özel bir tema veya eklenti oluşturmayı veya istemciler için veri tabanlı bir karmaşık site geliştirmeyi planlıyorsanız geliştirilmesi için çok kullanışlı bir beceridir. Yaptığım hemen hemen her sitede özel bir kuyruk veya başka bir tür kullanıyorum ve bence WordPress hakkında en ilginç şeylerden biri (ama kendi favoriniz olabilir!) Burada gösterdiğim gibi, beş var. Sadece dördü kullanılmasına rağmen, potansiyele sahip olduğunuz yollar özel quents yapma yolları. Bu:
Ana kuyruğu değiştirmek için pre_get_posts
Özel bir kuyruk yapmak için wp_query
Yalnızca yayın veya sayfa alan daha basit sorgular için get_posts () ve get_pages ().
Bu kombinasyon, gelişmiş bir WordPress sitesi oluşturmanıza ve gerektiğinde verileri görüntülemenize yardımcı olacaktır. Özel bir sorgu kullanıyor musunuz? Özel quents yapmak için ana ipuçlarınız nelerdir? Bize aşağıdaki yorumlarda anlatın. Etiket:
geliştirici

admin

Bir Cevap Yazın

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