WordPress için Gelişmiş OOP Bölüm 9: Eklentiler Eklentileri Fire
WordPress eklentisinde kullandığımız PHP koduna nesne yönelimli programlama (OOP) prensibinin uygulanması serisinde, restoranın arama yeteneklerini geliştirmek için çalışma şeklini değiştiren bir eklenti yapıyoruz. WordPress ile ilgili en güzel şeylerden biri genişletilebilirliğidir. Bu yazıda, son makalede yapılan iyileştirmeleri kullanarak yürüyeceğim. Bu dizide eklentiyi genişletebilir, Know the Code’dan Tonya Mork, bu serideki kod inceleme makalesini yazıyor. Yazdığım son makale bir arama sistemi yapmakla ilgili olarak değiştirilebilirdi. Burada yaptığım değişiklikler, kodlanmış inceleme makalelerinden birinin bir parçası olarak eklentide yaptığı değişikliklerden de yapılmıştır. Gönderi gerçekten “değiştirilebilir” ile kastettiğimiz derinliğe girdi.
Bu yazı, şimdi bu eklentideki varsayılan değiştirilebilir uygulamanın nasıl genişletilmesini sağlayın. Genişletilebilir ile, diğer eklentiler kodu değiştirmeden davranışlarını değiştirebilecekler. Nasıl? WordPress eklentisi Fire – Hook ile. WordPress böyle ve nasıl çalıştığı budur ve bir taklit kullanılarak test edilebilir, bu yüzden kullanacağımız şey budur. Bir yönlendirici yapın Gittiğimizde, mevcut WP_Query’ye devam etmek için ana sınıfımızı ve kaldırılacak içerik üretmekten sorumlu sınıfa değiştiririz. Aşağıdaki görünüm:
Bunun genişletilebileceğini yapmak için ihtiyacımız olan şey bu. GetPosts () görürseniz, eklenti yangından aldığı WP_REST_REQUEST nesnesini ayarlamak, depolamak ve almak için bir soyutlama vardır. Nesne, kullandığımız arama yöntemini veya “modunu” değiştirmek için “mod” sorgu parametreleri içerebilir. “Mod” un geçişi, içerik oluşturan içeriği uygulaması gereken sonuç yapan sınıf değişiklikleri gerektirecektir. Son yazımda, FilterWPQuery’nin nesne için nasıl bir alıcı ve ayar aldığını açıklıyorum. GetPosts () ‘dan eksik olan şey şu anda içerik alan kullanılmadan hemen önce ayarlama yöntemini çalıştırmanın bir yoludur. Eylem noktası budur. Bu yüzden ilk adımım, içerik alıcısını almadan önce doğru eylemi tetiklemek, böylece etkinlikte kravatı arayabiliriz:
Şimdi bu olayı yayıyoruz. Buna bağlı ve varsayılan uygulamaya yanıt veren bir sisteme ihtiyacımız var, ancak eklenti tarafından değiştirilebilir. Sadece aynı şeyi yaparak başlayalım, böylece testlerimizle hala çalıştığını kanıtlayabiliriz. Daha sonra genişletilmesi için bir filtre ekleyeceğiz.
Bir sonraki adımım, arama modlarını kontrol etmek için sınıfları tanıtmak. “Moda” diyorum. WP_REST_REQUEST dosyasında gösterilen “moda” sorguları argümanına dayanarak doğru içerik üreticisini filtrewPQuery’ye girmek sorumluluğunu alır.
İlk yinelemede, yalnızca aynı varsayılanı geri yüklemek için komplikasyonlar ekler. Bu özelliği dahil etmek için testin başlangıcını da ekledim.
Bu testlerin her ikisi de her zaman bu sistem tarafından üretilen aynı nesne türünün iade edildiğini kanıtlamaktadır. Bu önemli bir adım çünkü her zaman bunu varsayılan olarak yapması gerekir. Bu test, bir sonraki adımın – filtreler ekleme – bu sistemin varsayılan davranışını etkilememesini sağlar. İkinci testte, WP_REST_REQUEST taklidi yapmak için alaycı kullanıyorum. Bu eklentinin test ünitesi WordPress’i yüklemediğinden bu gereklidir. Bunu Tonya’nın alay konusu makalesinden nasıl yapacağımı öğrendim. Bu benim için daha fazla kullanacağım bir araç. Alay yapmanın kolay bir yoluna sahip olmamak, neden sadece WordPress test paketi, testim için birim testi yerine WordPress ortamı ile kullanıyorum. Bu örneğin eklentisi olarak ayırmak çok iyiydi, ancak her bir WordPress sınıfı için bir taklit yaptı.
Bu sınıfa sahip olduktan sonra filtreler ekleyin, hadi genişletilmesini sağlayalım. Buradaki hedef bu. İçinden geçelim. Bir sonraki taahhüdüm için, sıfır olursa, bu dahili yönlendiriciyi kullanan bir filtre ekledim. Geçerli bir nesne ise, döndürülür. Bunu bir entegrasyon testi ile kanıtlıyorum. WordPress çekirdeği bu “başlangıç dönüş filtresi” modelini kullanır. Bu model, isteğe bağlı olarak varsayılan davranışı önlemek için bir filtre kullanır. Hiç kimse sıfır filtre formunun geçerli sonuçlara dönüşünü değiştirmezse, varsayılan çekirdek davranışı çalıştırılır, çıktı geçerli olursa, varsayılan çekirdek davranışı iletilir.
Bu dizideki ilk makalemde Posts_pre_query’nin gerçek WP_Query veritabanı sorguları için nasıl ilk dönüş filtresi olarak hareket ettiğini yazdım. WP_Query için kendi sonuçlarımızı sağlamak için filtreyi kullanıyoruz. Aşağıdakiler yeni bir filtreye sahip yeniden düzenlenmiş mod sınıfıdır: filtrenin adının sınıf sabiti tarafından belirlendiğini unutmayın. Bu, filtre adını birkaç yerde senkronize etmeyi kolaylaştırır. Bunu yapmayı seviyorum, ancak sınıf, denediğim ve kaçındığım, ancak her zaman yapamadığım çok fazla kanca ile etkileşime giriyorsa ölçeklendirmiyorum. Sabit kullandığım bir yer, varsayılan mantık kısa ilişkisini doğru bir şekilde kanıtlamak için test etmektir. Bunu kanıtlamak için birimleri test etmek yerine bir entegrasyon testi kullanıyorum. Bir taklitle test etmek yerine bu stratejiyi seçtim, çünkü bu, eklenti uygulamasının önemli kısmının nasıl çalışacağını gösteriyor. Test belgelerin yerini almasa da, test genellikle kodun nasıl kullanılması gerektiğine bir örnektir.
Bu tür entegrasyon testi, taklitli bir birim testinden daha az temizdir. Dürüst olmak gerekirse, her ikisini de tercih ederim, tüm bunları denemek ve örnek eklentisine çekme isteğine katkıda bulunmak istiyorsanız bir birim testi eklemelisiniz. Birini seçmem gerekirse, burada bir entegrasyon testi yapacağım çünkü bu en dürüst test. Ve belge alana kadar test, eklentiyi nasıl genişleteceğini gösterir.
Bu testte, aslında anonim işlevi kullanarak bir filtre ekledim. Verilen argümanın doğru olduğunu kanıtlamak için filtrede bir açıklama yapıyorum. Yürüdükten sonra, WordPress’in entegrasyon test takımında yayınlanmasına rağmen, hala yapay bir WP_REST_REQUEST kullandığımı da unutmayın. Neden? Niye? Çünkü olabildiğince çok dış etkiyi kontrol etmek istiyorum. Bu test, WP_REST_REQUEST ile etkileşimleri test etmez, böylece taklit rolünü soyutlar. Bir uzantı yapabilir misin? Şimdi eklenti genişletilebilir. Bu gerilme isteğinde genişletilebilmesi için bu eklentiye eklediğim kodu görebilirsiniz. Okuduysanız, bu eklentinin nasıl çalıştığını biliyorsunuz. Hangi yedek parçaların değiştirilebileceğini ve fabrikanın nasıl çalıştığını biliyorsunuz. Bu makalede, eklentilerin nasıl genişletilebileceğini göstermektedir.
Öğrendiklerinizi kullanmak için bir sonraki harika adım, bu eklenti için kendi eklentinizi yapmaktır. @ Twitter’dayım veya yaptığınız şeyle ilgili bir yorum bırakıyorum. Bu serinin bir sonraki makalesinde, aramada size yardımcı olacak eklentinin nasıl test edileceğini tartışacağım.