WordPress’te bir konaklama döngüsü kullanma sorunu
8:00. Sadece bisiklete binerek ve metroya bindikten sonra çalıştım. Dragon Ball Cup’dan kaynaklanan kahve aroması duyularımı uyandırdım ve kendimi iyi hissettim. Tarayıcımı ve kod düzenleyicimi (elbette vim – atom kullanamıyorum) açmanın ve bazı işleri tamamlamanın zamanı geldi. İlk kahvemden bir yudum aldığımda, gelen kutumda sahip olduğum tek destek biletini okudum: Görünüşe göre, Nelio’nun içerikle ilgili sorunları olan müşteriler vardı, eklentimiz sosyal mesajları doğru paylaşmadı. Garip! AFAIK, bu sorun sadece başına geliyor, bu yüzden kurulumunda bir sorun olması gerektiğinden eminim … Eminim üçüncü bir eklenti. Her zaman böyle.
Bu günüme başlamanın en iyi yolu değil, ama en azından bunun eğlenceli bir gün olacağını biliyorum. Peki şimdi ne olduğunu araştırmanın zamanı geldi … WordPress’in gelişiminin kolay olduğunu kim söylüyor? Birkaç saat içinde Toni ve ben neyin yanlış olduğunu bulabildik: WordPress döngü. Ya da haklıysam, iç içe WordPress döngüleri söylemeliyim. Ne olduğunu ve nasıl düzelttiğimizi bilmek ister misiniz? Okumaya devam edin ve WordPress Loop hakkında daha fazla bilgi edinin! Hızlı hatırlatma – WordPress döngüsü nedir? Birkaç yıl önce, Antonio Villegas WordPress döngülerinin ne olduğunu, nasıl çalıştığını, nasıl değiştirebileceğinizi ve bazı gelişmiş hileleri açıklayan bir dizi gönderi yazdı. Ne yazık ki, sadece İspanyolca’da mevcutlar … ama ilgileniyorsanız, bize söyleyin ve bunu İngilizceye çevireceğiz. Ancak gönderiyi seviyorum çünkü konuya çok iyi bir giriş:
Loop WordPress, web sitenizdeki sayfalara giderken içeriği (yayınlar, sayfalar veya özel içerik) belirler. (…) Temel olarak, WordPress şu şekilde çalışır: Loop, WordPress veritabanlarını bir dizi parametre göz önünde bulundurarak kullanıcılarınızın talep edildiği yayınlar almasını ister. Başka bir deyişle, döngü WordPress’in bir dizi gönderme ve onları “manipüle etme” biçiminden başka bir şey değildir (genellikle ekranda görüntülemek için). Çok basit bir döngü örneğine bakalım: Tüm farklı parçaları tanımlayabilir misiniz? Bu çok basit, bkz: Satır 3-6’da arama parametrelerimizi düzenliyoruz (bu durumda 5 gönderi istiyoruz), 9 ve 10. satırda bulduğumuz tüm yayınları izliyoruz (temelde başlıklarını listeye yazdırıyoruz) Ve son olarak 15. satırda bu döngüyü iptal ettik ve sorguları WordPress’in yaptığı her şeye yeniden düzenledik.
Şimdi, Loop’un nasıl çalıştığını anladıktan sonra, Nelio’da bize ne olduğunu görelim. Eklentimizde aynı anda çok fazla döngü çalıştırarak, yayınları tanımlayarak diziyi verilerle döndüren basit bir işlev tanımlıyoruz. Bunun gibi bir şey:
Gördüğünüz gibi, güneşte yeni bir şey yok. Bu işlevde, 5-7 satırında döngüler yaparız, sorguladığımız yayınların 9-12 satırında olduğundan emin oluruz ve sıradan işler yapın: yükleme yazıları (satır 14), geri yapacağımız diziyi yapın ve bitiririz . Doğrudan yeterince, değil mi?
Örneğin, örneğin, bu işlevi ID Post 1 ile diyoruz ve beklediğimiz sonuçlar bir sonraki:
Peki, oldukça şaşırtıcı olan şey, müşteri kurulumumuzda çalıştırdığımızda elde ettiğimiz şey budur: Gördüğünüz gibi, başlık artık benim ilk gönderim değil, tamamen farklı bir şey. Bazı çözülmemiş nedenlerden dolayı, işlevimiz blogumuzdaki farklı yayınlara göre merak ediyorsanız bazı rastgele başlıkları geri yükler. Burada neler oluyor? Basit görünen işlevimiz neden bu kadar kötü başarısız oldu? Açıklama basit ve talihsiz …
Kahretsin, döngüler bıraktı! Müşterilerimiz, içerik göndermek için ilgili yayınların bir listesini ekleyen bir eklenti koyar. Özünde, bu diğer eklenti aşağıdakileri yapar:
Yani, bu diğer eklenti temel olarak ilgili yayınları bulmak için yeni bir döngü başlatır (örnekte yalnızca yayınları 25 içeririz), gönderiyi alın, içeriğe ekleyin ve wp_reset_postdata () kullanarak “orijinal isteği” sıfırlayın. Şimdiye kadar iyi. Şimdi dikkat edin: Bu snippet ne zaman çalıştırıldı? Bu, the_concent’e bağlı bir işlevdir, bu nedenle filtre the_content her çalıştığında ve bu snippet. Başka bir deyişle, üçüncü taraf eklentisi etkinse, eklentimiz satır 18’i yürüttüğünde (en azından) çalışacaktır! ? Öyleyse, eklentimizde yürütme 19 satıra ulaştığında, kuyruğun değişmesi … 25 gönderi başlığı nedir?
Nedir…! İşte bu! 25’e göre yüklediğim başlık, yani Loop kendi döngümde iç içe geçti ve kendi gönderime atıfta bulundum. ?? Bazı konaklama döngüleri ile nasıl çalışılır ve sorunlardan kaçınır, en azından nihayet neler olduğunu biliyoruz. Döngü oldukça yaygın olarak iç içe, bu yüzden şimdi neyin yanlış olduğunu biliyoruz, çözüm basit ve kolay olmalı. Yada bu? Cevabı Codex’te bulamadım, bu yüzden WordPress forumunda sordum … … ve birkaç dakika sonra Pascal Birchler’den (çok havalı!) Bir cevap aldım. Ne yazık ki, cevap çok eğlenceli değil. Temel olarak, paylaştığım görüntülerle ilgili iki sorun var:
WP_RESET_POSTDATA, daha önce aktif sorguları değil, ana döngüyü yeniden düzenlemez. Başka bir deyişle, üçüncü taraflı bir eklenti kuyrukumuzu geri yükleyemez …?
Bu sorunun üstesinden gelmenin önerilen yolu … baştan beri tanıtmamak! Yani, bir filtreyi tetikleyebilecek çağrılar kullanmayın. ?
Aldığım özgür ve özverili destek için çok minnettar olmama rağmen, aslında çözümden memnun değilim. Uygulamamı kullanmak ve “filtreye dayanıklı” olmak istiyorum, bu yüzden farklı ve radikal bir iyileştirme seçiyorum: şablon etiketini her çalıştırdığımda, döngemi manuel olarak yeniden düzenliyorum ($ query-> reset_postdata ()) beni emin olmak için Her zaman doğru gönderi ile çalışıyorum: