WordPress’te yuvalama verilerini sıralama ve sıralama: PHP Array ve USORT () ile eğlenmek ()
WP_Query karmaşık olabilir. Genellikle wp_query veya get_posts () ile birçok veri veri kazısı içeren müşteriler için bazı işler yaptım. Bu, çok yuvalama verileriyle çalışmak anlamına gelir. WP_Query nesneleri, örneğin, satır sorguları veya yayınlar gibi bir dizi PHP dizisi içeren PHP nesneleridir. Bu dizinin kendisi farklı bir yapıya sahiptir: örneğin, gönderiler sorguya alınan tüm yayınların dizisi, Post_title ve Post_Content gibi özelliklerle dolu nesnenin kendisidir.
Yukarıdaki paragrafı anlamanıza gerek yok. Yalnızca “nesnedeki dizideki nesneler” gibi iç içe bir veri yapısı ile çalışmanın karmaşık olabileceğini vurguluyorum. Bugün Yuva Verileri: The Challenge: Sıralama ve Sıralama İÇİN TOPLAMA VE SİPARİŞLERİ BUGÜN TARTIŞTIĞIMI TARTIŞTIRILAN BÜYÜME VE SİPARİŞLERİ Yuva Verileri Sıralamak ve Sıralamak. Neden zor olduğunu tartışacağım ve kolaylaştırmak için iki özel numara sunacağım:
Anahtarın sıralamak istediğiniz değişkenin değerine uygun olduğu bir dizi yapın.
USORT () PHP işlevinin kullanımı akıllıca dizileri hakem mülküne dayalı olarak sıralamak içindir.
Örnek: Gönderiler, yorumların durumuna, yayın türlerine ve bugünün demosu için başlıklara göre sıralanmıştır, kendime müşterimin hayal edebileceğinden çok farklı olmayan bir gereklilik verdim. Tüm site yayınlarımın (her türlü yayın türünün) bir listesini üç şekilde sıralayan bir eklenti istiyorum:
Her gönderinin yorum alıp almadığı ile, o zaman: gönderinin türüne göre,:
Alfabe tarafından sıralanmıştır.
İşleyen eklenti ve yayınladığı şey, yerel test ortamımda işlev gören bir eklenti çalıştırdığımda, sonuçlar şöyle görünüyor:
Github’da eksiksiz bir eklenti kodu yaptım. Kullanmak için eklentiyi indirin, yükleyin ve etkinleştirin ve herhangi bir gönderi içeriğinin herhangi bir yerinde kısa kodu [abc_posts_by_comment_status] kullanın. (Github’a veya eklentiyi yüklemenin “manuel” yolu hakkında aşina değilseniz lütfen benimle iletişime geçin; yardım etmekten mutluluk duyarım.)
Açık veya kapalı yorumlarla, o zaman
Gönderi türüne göre, o zaman
Alfabeye göre.
Bu yüzden ellerimizi kirletmeliyiz. Bir sonraki bölüm nasıl olduğunu açıklıyor.
1. PHP Array tuşunu kullanma Yorumun durumuna göre gönderiyi sıralamak için eklentideki kodun ilk önemli kısmı aşağıdaki gibidir: $ Posts_by_comment_status = array (); foreach ($ Post olarak $ gönder) {$ post_by_comment_status [$ post-> yorum_status] [] = $ yazı; } Bu kodun temelleri için:
ForEach PHP’yi kullanır. Foreach ($ Post olarak $ gönder) bu döngü, sitedeki tüm yayınlarımızdaki her gönderi için bir kez çalıştığı anlamına gelir. Mevcut gönderi $ gönderi ve dizi $ yayın. (Bu satırı daha önce aldık, get_posts () wordPress işlevini kullanarak.) Ayrıca yeni bir PHP dizisi, $ post_by_comment_status; Bir sonraki amacı açıklayacağız.
Şimdi ana satırda daha derine bakalım, $ post_by_comment_status [$ post-> yorum_status] [] = $ yazı; . Aşağıdaki açıklama:
$ Posts_by_comment_status, ilk kod satırında oluşturduğumuz yeni dizi adıdır.
[$ post-> yorum_status] mevcut $ post nesnesinin bir özelliğidir. Mevcut bireysel sevkiyatın yorumlara izin verip vermediğine bağlı olarak açık veya kapalı iki değerden birini alabilir.
$ Post_by_comment_status [$ post-> yorum_status] yazdığımızda diyoruz: $ Posts_by_comment_status dizisinin bir öğesi oluşturun. Bu dizi öğesinin anahtarı $ Post-> Comment_Status (yani, kapalı veya açık) değerine eşit olarak ayarlanacaktır.
[] Kilit nokta olan değerin dizi olduğu ve dizinin “bir sonraki öğesini” (ilk öğe olabilecek veya olmayabilecek) yapacağımız anlamına gelir.
[] = $ yazı; Yaptığımız dizinin “bir sonraki öğesinin” $ Post nesnesinin kendisine ayarlandığı anlamına gelir.
Bu bilmek önemli bir şeydir: belirli bir $ gönderinin bir yorum_status açık ve $ post_by_comment_status [açık] varsa, $ yayınımız otomatik olarak $ Posts_by_comment_status [Open] ‘a eklenecektir. Başka bir deyişle, $ post yalnızca Posts_BY_COMMENT_STATUS DRAY $ Posts_by_comment_status tarafından belirlenen dizinin “bir sonraki öğesi” olacaktır. Başka bir deyişle, tüm site yayınlarımızı yorumların izin verilip verilmediğine göre sıraladık!
Bu ayrımı aldıktan sonra, şimdi “açık yorumlar” ve “yorumlar” ile aşağıdaki satırlarda olduğu gibi ayrı ayrı konuşabiliriz: $ clogle = wspout_return_sorted_list ($ post_by_comment_status [‘kapalı’], ‘yorumlar kapalı:’); $ open = wspspout_return_sorted_list ($ post_by_comment_status [‘açık’], ‘yorumlar açık:’); Bu satırda, bir argüman olarak $ post_by_comment_status [‘kapalı’] ve $ post_by_comment_status [‘açık’] kullanarak işlevi iki kez gerçekleştiriyoruz. İşlevin kendisini iyice tartışmayacağım; Önemli kısım $ Posts_by_comment_status [‘kapalı’] “Yorum kapalı tüm yorumlarımızın dizisi” anlamına gelir ve $ Posts_by_comment_status [‘açık’] “Tüm yorum yayınlarımızın dizisi” anlamına gelir. Ayrılık yaratmak ilk zorluğumuzdur ve bunu bitirdik!
2. PHP Array tuşunu bir sonraki zorluğumuzun gönderilmesine göre sıralamak için yazıyı kullanmak, yayınımızın paketini belirli yorumlar durumuyla (“kapat” deyin) almak ve gönderiyi yazı türüne göre sıralamaktır. Bize aynı yorum durumuna sahip bir dizi gönderi verildi. Bu diziyi Posts_of_Same_Comment_Status adını verdim. Yukarıdaki örneği anladıysanız, buradaki çözümümüz sizin için çok makul olacaktır: $ post_by_post_type = array (); foreach ($ post_of_se_comment_status olarak $ post) {$ post_by_post_type [$ post-> post_type] [] = $ post; } Yeni bir dizi, $ post_by_post_type yapıyoruz ve $ Post_of_Same_Comment_Status’taki tüm yayınları diziden farklı anahtarlara ayırırız (örneğin, özel kayıtlı bir yazı türü olarak varsa, posta, sayfa veya portfolo-element). Anahtarlarımızla bir dizi. Bildiğimiz şey, her anahtarın yalnızca aynı tür gönderi ve yorum durumuna sahip yayınlar içermesidir. İkinci zorluğumuzu çözdük. 3. Bu noktada başlığa göre gönderiyi sıralamak için USORT () kullanarak, yayın türüne göre sıralanmış bir yayın koleksiyonumuz var. Üçüncü zorluğumuz bu yazıyı alfabeye göre sıralamaktır. Bunun için USORT () PHP işlevini kullanacağız. USORT’a () kendi girişim, Nicolas Kuttler’ın WP_Query sonuçlarını manuel olarak sipariş etme makalesi aracılığıyla. Okumak için şiddetle tavsiye edilir.
USORT () aşağıdaki gibi kullanacağız: USORT ($ Posts_of_Same_Post_Type, ‘WSPSPOUT_REORDER_QUERY_BY_POST_TITLE_ALPHABETical’); İşlev wspout_reorder_query_by_post_title_alphabetical ($ a, $ b) {$ a_title = $ a-> post_title; $ b_title = $ b-> post_title; Return (strcmp ($ a_title, $ b_title)> 0)? 1: -1; } Şunu açıklayalım: USORT ($ Posts_Of_Same_Post_Type, ‘WSPSPOUT_REORDER_QUERY_BY_POST_TITLE_ALPHABETical’); USORT () kullanımını iki argümanla gerçekleştiriyor. $ Posts_of_Same_Post_Type, yeni oluşturduğumuz $ POST nesnesidir ve ‘WSPSPOUT_REORDER_QUERY_BY_POST_TITLE_ALPHABETical’ sıralama yapmak için kullanacağımız bir işlevdir.
wspspout_reorder_query_by_post_title_alfabetical ($ a, $ b) bize bu işlevin $ a ve $ b adlı iki argüman gerektirdiğini söyleyin. Bu öğelerin her biri, sıralamaya çalıştığımız dizinin bir unsurudur. Başka bir deyişle, her biri $ Post nesnesidir.
$ a_title = $ a-> post_title; İlk öğenin Post_title’sine ($ A) sorun ve $ A_TITLE değişkenine kaydedin.
$ b_title = $ b-> post_title; İkinci öğenin ($ b) post_title’sine sorun ve $ b_title değişkenine kaydedin.
(strcmp ($ a_title, $ b_title)> 0)? 1: -1; Saçma gibi görünüyor, ama soruyor: “Alfabeye göre ilk iki başlıktan hangisi?”
Sonuç daha sonra ED, bir mucizeyi, aldığı sonuçlara göre yayınları yeniden düzenleyen USORT işlevine () geri döndü. Bu, dizideki tüm yayınlarda olur.
Sonuç, klavyeye çarpan bir kediye benzeyen en az bir satırdan sonra (Teşekkürler Üçlü Operatör): Yorumların durumuna göre sıralanan yazımız artık Alfabe tarafından sıralandı! Üçüncü ve son zorluklarımızı çözdük. Epilog: Her şeyi yayınladı çünkü verilerimiz bu noktada çok yapılandırılmış ve ayrı, onu görüntülemek için Loop Foreach yuvalama kullanmamız gerekiyor. Amacım size verileri nasıl sıraladığımı ve sıraladığımı göstermek, bu yüzden sonuçların nasıl olduğu çok derinleşmeyeceğim. “Her hafta, evde her odayı temizliyorum” demek gibi çok makul olan Loop ForEach’in çok makul olduğunu bilin. Bir sorunuz varsa, yorumlarda veya e -posta yoluyla duymaktan mutluluk duyarım. Şimdi akıllı bir insansın! Umarım bu gönderi, WP_Query’nin Nesneleri Tutma Holding-nesneleri ve get_posts () ‘nın nesneler dizileri gibi yuvalama veri yapısına saldırmanızı teşvik eder. tuhaf yol. Okuduğunuz için teşekkürler! Kredi resmi: allispossible.org.uk