WordPress Sitenizin İşlevlerini genişletmek için wp_query kullanma
Bugünkü konuk blog yazısı Isaac Castillo tarafından yazılmıştır. Isaac, San Antonio merkezli bir WordPress ve WooCommerce geliştirme şirketi olan Echo Design Solutions'ın kurucusudur .
WordPress geliştiricileri, sürekli olarak müşterilerinin sitelerinin işlevselliğini ve performansını iyileştirmenin yollarını arıyor. Bu çabaya yardımcı olmak için WordPress, bir siteye özellikler ve işlevler eklemek için kullanılabilecek kapsamlı bir işlev kitaplığı içerir. Örneğin, WordPress'in işlediği ve geçerli sayfada görüntülediği PHP kodu olan The Loop içindeki bir blog gönderisinin başlığını almak istiyorsanız, the_title() işlevini kullanabilirsiniz. Benzer şekilde the_content() işlevini bir blog gönderisinin içeriğini almak veya get_categories() işlevini kullanarak gönderi kategorilerini almak için kullanabilirsiniz.
WordPress, bir siteyle yapmak isteyebileceğiniz hemen hemen her şey için işlevlere sahip olsa da, kaçınılmaz olarak, WordPress'in yerleşik işlevleri kullanılarak gerçekleştirilemeyecek bir görevi gerçekleştirmeniz gerekeceği bir zaman gelecek. Örneğin, Gelişmiş Özel Alanlar eklentisine gelen verileri nasıl sorgulayabileceğinizi ve bu verileri bir gönderi için nasıl döndürebileceğinizi düşünün. Bu örnekte sorguyu gerçekleştirmek için WordPress'in yerleşik işlevlerinin dışına bakmanız gerekir. WordPress, özel parametrelerle özel bir sorgu kullanarak The Loop içindeki WordPress veritabanından bilgi almanızı sağlayan bir sınıf içerir. Bu sınıfa WP_Query adı verilir ve WordPress'i geliştirmeye devam ederken, geliştiriciler için bu değerli araca aşina olmalısınız.
Ekibim ve ben yakın zamanda bir müşteri için Python'dan WordPress'e geçişi tamamladık. Proje, ihtiyaç duyduğumuz tam bilgiyi hedeflemek için WordPress'in yerleşik işlevlerinin dışında baktığımız çok sayıda özelleştirme ve özel gönderi türü gerektiriyordu. Bu durumda, müşterinin sitesinde yalnızca güncel olayları göstermesi gerekiyordu, yani bir olayın gerçekleşeceği tarihe referans vermesi gerekiyordu.

WordPress, bir olayın oluşturulduğu veya girildiği tarihi döndüren get_the_date(); işlevini içerir. Bu fonksiyon etkinliğin oluşturulma tarihi ile sınırlı olduğu için projemiz için yeterli olmayacaktır. Herhangi bir belirli etkinliğin gerçekleştiği tarihi izlememize izin verecek özel bir alan oluşturmak için Gelişmiş Özel Alanları kullandık. WP_Query kullanarak, özel olay alanına dayalı olarak olayları çeken özel bir sorgu yazabildik. Sonuç olarak, sitenin ziyaretçileri şu anda gerçekleşmekte olan veya gelecekte gerçekleşmesi planlanan etkinliklerin bir listesini görüntüleyebildi.
WP_Query ile çalışmanın temel prensibi, veri tabanından, sanki yerleşik WordPress işlevleri kullanılarak alınmış gibi döngüye girebilecek şekilde bilgi almaktır. WP_Query kullanarak özel sorgular yazmanın ek bir avantajı, yardımcı işlevleri ayarlayarak WordPress'in işlevselliğini önemli ölçüde genişletebilmenizdir. Size WP_Quuery çalışırken bir tat vermek için, ekibimin son Python'unu WordPress geçiş projesine dayalı olarak aşağıda örnek bir sorgu paylaştım.
$args = dizi(
'orderby' => 'tarih',
'post_type' => 'gönder',
'post_status' => 'yayınla',
'posts_per_page' => -1,
);
$the_query = new WP_Query( $args);
if ( $the_query->have_posts() ) {
while ( $the_query->have_posts() ) {
$the_query->the_post();
içerik();
}
wp_reset_postdata();
} Başka {
Eko '
Üzgünüz, görüntülenecek yayın yok
'; }
Bu örnekteki sorgunun normal bir döngü sonrası sorgusuna çok benzediğini fark edebilirsiniz. Temel fark, sorgunun veritabanından alacağı bilgileri belirtmenize izin veren $args dizisindedir. $args içinde, döngünün sonucunu değiştirecek her türlü kriteri geçirebiliriz.
Sorgu ve döngü ayarlandıktan sonra, doğru argümanları iletmesi için $args dizisini doldurmamız gerekir. Örneğin, örneğimde tanımladığım olaylar için özel gönderi türünü almak istiyorsanız, aşağıdaki argümanları kullanabilirsiniz:
$args = dizi(
'orderby' => 'tarih',
'post_type' => 'olaylar',
'post_status' => 'yayınla',
'posts_per_page' => -1,
);
$the_query = new WP_Query( $args);
Bu kodla, WordPress'e olaylar adlı bir gönderi türü (oluşturduğumuz özel gönderi türü) için veritabanını sorgulamasını ve yalnızca yayınlanmış durumu olan olayları almasını söylüyoruz. Post_per _page değişkeni, döndürülecek kayıt sayısını belirtmek için kullanılabilir. -1'de bırakmak, geçerli her kaydı döndürür.
Bu noktada, olaylar gönderi türünü aldık, ancak henüz işimiz bitmedi. Yine de verileri işlememiz gerekiyor, böylece yalnızca güncel ve/veya gelecekteki tarihlere sahip olaylar gösterilecek ve böylece geçmiş tarihe sahip olaylar yok sayılacak. Bu işlevsellik, aşağıdaki ayarlanmış sorgu kullanılarak elde edilebilir:
$zaman = current_time( 'zaman damgası'); // Geçerli Unix zaman damgasını al $args = dizi( 'post_type' => 'olaylar', 'post_status' => 'yayınla', 'posts_per_page' => -1, 'meta_key' => 'başlangıç_tarihi', 'meta_değer' => $zaman, 'meta_compare' => '>=', 'orderby' => 'meta_value', 'sipariş' => 'ASC' ); $the_query new WP_Query( $args );
Daha önce olduğu gibi, sorgumuz yayınlanan olayların gönderi tipini kapıyor ve hepsini döndürüyor. Sonuçları değiştirebilmemiz için Gelişmiş Özel Alanlardan değerleri sorguladığımızda sihir devreye giriyor. Bu örnekte, bu işlevi gerçekleştirmek için aşağıdaki argümanlar kullanılmıştır:
$zaman
Komut dosyasının başlarında, komut dosyasının yüklendiği zamanı bir Unix zaman damgası olarak $time adlı bir değişkene bağladık.
Başlangıç tarihi
'meta_key' => 'start_date' hedeflemek istiyoruz. Gelişmiş Özel Alanlarda ayarlanan start_date alanı, özel yazı tipi meta_keyimize bağlıdır. Gelişmiş Özel Alanlardan verileri sorgulayabilmemiz için bu alana ihtiyacımız var.
meta_değer
Burada, geçtiğimiz $time değişkenine eşit start_dates ile olayları aradığımızı söylüyoruz. Ancak bu bizim istediğimiz sonuç değil, çünkü biz bugün için zamanlanmış olaylardan daha fazlasıyla ilgileniyoruz. Bugünün yanı sıra geleceğin de listelenmesini istiyoruz. Bu durumda ne yapıyoruz?
meta_karşılaştırma
Çözüm meta_compare ile yatıyor. Meta_key değerini ararken onu bir şeyle karşılaştırmak istediğimizi belirtmek için kullanabiliriz. Burada >= var, bu da meta_değerinde belirlediğimiz değerden büyük veya ona eşit olayları aradığımız anlamına gelir. Bu, WP_Query'nin gerçekten parladığı yerdir, çünkü aksi takdirde uygulanması zor olacak işlevsellik eklememize izin verir.
sipariş
Son olarak, meta_değeri artan düzende de sıralayabildiğimizi görebilirsiniz. Bu, olayları temiz bir kronolojik sıraya göre düzenler.
Ekibimin son Python'dan WordPress'e geçiş projesi, bize WP_Query'nin güçlü özelliklerini iyi bir şekilde kullanma fırsatı verdi. Kendinizi WordPress'in yerleşik işlevlerinin ihtiyacınız olan verileri ihtiyaç duyduğunuz biçimde almanıza izin vermeyeceği bir durumda bulduğunuzda, WP_Query ile özel sorgular kullandığınızdan emin olun. Unutmayın, büyük sorgulama büyük sorumluluk getirir. Ve işiniz bittiğinde gönderi verilerini sıfırlamayı unutmayın.
ev borcu WordPress sitesi
