Pre_get_postların pratik kullanımı

WordPress’te, pre_get_posts, sorgu çalıştırılmadan önce mevcut WP_Query’yi değiştirmeyi mümkün kılan bir eylemdir. pre_get_posts, özel wp_query yazmaktan daha fazla performans gösteren çözümler sunar ve oldukça zor olacak diğer sorunlara çözümler sağlar. Pre_get_posts hakkında bilgi edelim! WP_Query nedir WordPress sitesindeki hemen hemen her sayfa, wp_query kullanılarak alınan bir yayın koleksiyonunu tekrarlayarak yapılır. Programlamada, veritabanı sorgusu genellikle veritabanından belirli sonuçlar almak anlamına gelir. Örneğin, insanların verileriyle dolu bir veritabanında, belirli kişilerin bir adı ve yaşı isteyebilirsiniz ve istediğiniz bilgileri almak için bir sorgu (SQL veya benzeri bir dilde) yazacaksınız.
WP_Query, WordPress veritabanından bir yayın alan WordPress’e özgü özel bir sorgu türüdür. WordPress Posting, bir blog makalesi, sayfalar, medya ekleri ve daha fazlasını oluşturan bir içerik bloğudur. WP_Query’ye girişte tartıştığımız gibi, WordPress sitesindeki hemen hemen her sayfa bir veya daha fazla yayın tekrarlayarak yapılır. Bu yazı paketi, WordPress’in bu tür bir sayfa için çalıştığı varsayılan WP_Query tarafından alındı ​​ve ayrıca kendimize yazdığımız bir veya daha fazla özel WP_Query tarafından alınabilir. Pre_get_posts Kısa pre_get_posts, çalıştırılacak WP_Query’yi değiştirmenizi sağlayan bir eylemdir.
pre_get_posts, “Pisery WP_Query” i değiştirmenizi sağlayan bir eylemdir, yani “demet göndermek için bir veritabanı isteyecektir”. Sorgu veritabanına yürümeden ve bir yayın koleksiyonu almadan önce, sorgu tarafından hangi yayınların sorulacağını girip değiştireceğiz. Bu etkinliğin sırası, pre_get_postların adını nasıl aldığıdır. Örneğin, pre_get_posts aşağıdaki örnek, genellikle yayın türüyle en son yayınınızı içeren blog dizin sayfanıza neden olur: add_ace (‘pre_get_posts’, ‘windphout_pages_blogindex’); İşlev wspout_pages_blogindex ($ query) {if (is_home () && $ query-> is_main_query ()): $ query-> set (‘post_type’, ‘sayfa’); Endif; } Bu kodu function.php olarak ekleyin. Tema doğrudan blog dizinine (oldukça garip) yalnızca bir sayfa ve yayın olmadan yol açar. Ajans sitemizin blog sayfasında basılı olarak aşağıdaki gibi görünüyor:
Pre_get_posts, kendimize yeni bir WP_Query yazmak zorunda kalmadan mevcut blog dizininin varsayılan sorgularını değiştirelim. Kısacası pre_get_posts.

Pre_get_posts’ın ne zaman kullanılması Gerekir, pre_get_posts mevcut sorguları değiştirmenize izin verir. Bu nedenle, Pre_get_Posts, en iyisi yeni kuyruk yazmadığında, ancak mevcut sorguları değiştirdiğinde kullanışlıdır. İşte bazı örnekler: Pre_get_posts ile en kolay değiştirilmiş wp_qury özellerinden bazıları bazen yazmadığınız özel wp_query değiştirmeniz gerekir. Bu büyük olasılıkla harici eklentinin sorguları veya WordPress çekirdeğindeki bir yerden anlamına gelir. Örneğin, “Son Mesajlar” widget’ı WordPress Core’un bir parçasıdır. Sitemizde “en son gönderileri” kullandığımızı ve “Bağış Toplama” adlı bir sayfa yaptık. Bağış toplama sayfamızda ve bu sayfamızda, “Son Gönderi” widget’ının yalnızca “bağış toplama” ile işaretlenmiş en son gönderileri görüntülemesini istiyoruz. Buna izin veren daha iyi bir “Son Gönderiler” widget’ı yükleyebiliriz ve daha sonra widget alanı oluşturabiliriz. Alan özellikle sadece “bağış toplama” sayfası için, ancak bu biraz kaos yaratır. Bunun yerine, “Son Gönderi” tarafından kullanılan özel WP_Query durumunu değiştirelim. Sürecin üç adımı var:
“Para toplama” sayfasında olduğumuzdan emin olun,
“En son gönderiler” (en zor kısım) tarafından üretilen özel sorgularla gerçekten konuştuğumuzdan emin olun ve
Kuyruğu dileklerimize göre değiştirin.
Aşağıdaki kod:
Add_action (‘pre_get_posts’, ‘wspout_fundraiser_recent_posts’);İşlev wspout_fundraiser_recent_posts ($ query) {// (! İs_page (‘bağış toplama’)): return;Endif;// Son yayınlar tarafından oluşturulan wp_query // ile oluşturulan wp_query // (! Is_main_query () && $ query-> query [‘no_found_rows’] === true && $ query-> query [‘post_type’ ] === NULL): // Yalnızca “Bağış Toplama” ile Etiketli Gönderiler $ TaxQuery = Array (Array (‘Taksonomi’ => ‘Post_tag’, ‘Field’ => ‘Slug’, ‘terim’ => dizi (‘ Bağış ‘),));$ query-> set (‘Tax_query’, $ TaxQuery);Endif;} Convollied, ancak bu gerçek bir proje ise alternatiflerden daha hızlı ve daha temiz olabilecek birkaç örnek.
Varsayılan WordPress sorgularını değiştirmek, çoğu zaman varsayılan WordPress sorgularında pre_get_posts kullanırsınız, çünkü genellikle diğer sorguları doğrudan değiştirebilirsiniz. Kueri Varsayılan WordPress çok önemlidir: Blog dizininiz için en son yayınları, kategori arşiv sayfaları için belirli kategorilerden tüm yayınlar, ay tabanlı arşiv sayfaları için belirli aylardan tüm yayınlar, arama sayfaları için sonuçlar bulun ve yakında. Önceki bölümde, özel wp_query değiştirmek için pre_get_posts kullanacağınız vakaları bulmak için beynimi uzattım. Ancak, çoğu zaman varsayılan WordPress sorgularında pre_get_posts kullanacaksınız, çünkü genellikle diğer sorguları doğrudan değiştirebilirsiniz. (Varsayılan sorguları değiştiren pre_get_posts için kodeks belgelerindeki hemen hemen her örnek.) Pre_get_posts, varsayılan sorguları değiştirmenin en iyi yoludur. Aşağıda, geçen haftanın özel gönderi türü hakkında önemli bir örnek, özel bir tür yeni kayıtlı gönderi, kurs, Site Arşivi sayfasında görünen, varsayılan olarak gerçekleşmeyecek: // Kurslar Gönderiler Gösterisi Gösterisi arşiv sayfalarında add_ace (‘pre_get_posts’, ‘wspspout_add_custom_post_types_to_query’); İşlev wspout_add_custom_post_types_to_query ($ query) {if (is_archive () && boş ($ query-> query_vars [‘baskılama_filters’]))))))))))))))))))))))))))))))); }} P Bu kod önce arşiv sayfasında olup olmadığımızı sorar. Evet ise, bu sadece gönderileri değil, kursları da çekmek için varsayılan sayfayı değiştirir.

Bu yaklaşıma alternatifler – değiştirmek istediğiniz varsayılan sorguları kullanan herhangi bir şablonun değiştirilmesi (index.php, search.php, vb.), Varsayılan sorgu işleme şablonunu silin, ardından her ikisinden de kendi özel WP_Query’nizi yazın – kırılgan ve çok fazla meslek. Örneğin, arşiv sayfası için üretilen tüm farklı sorgu türlerini kapsayacak şekilde özel bir WP_Query nasıl yazılacağını bilmiyorum. Arama sonuçlarından belirli yayınları gizlemek, blog dizinleri tarafından çizilen kategorileri değiştirmek, vb. Bu, WordPress veritabanları için kuyruğu en aza indirir. Bazı durumlarda, istediğiniz şeyi yapmak için yeni pre_get_posts veya wp_query custom kullanabilirsiniz. Bu durumda, pre_get_posts kullanmak daha hızlı ve daha iyidir, çünkü WordPress veritabanına yalnızca bir yolculuk yapıyorsunuz – iki değil -. Unutmayın, her WP_Query WordPress veritabanına gönderilecek yeni ve karmaşık bir kuyruktur. Değiştirilmiş bir veritabanı sorgusu, tamamen ayrılmış iki sorgudan çok daha hızlı işleyecektir.

admin

Bir Cevap Yazın

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