Kodu Temizlemek, Etkinleştirmek ve Kaldırmak için WordPress Kancalarını Kullanma
Yayınlanan: 2015-01-23Eklenti yazarları, ürünlerinin ana işlevlerine o kadar çok zaman ve enerji harcarlar ki, daha az önemli şeylerin yol kenarına düşmesine izin verirler.
Örneğin, etkinleştirme ve devre dışı bırakma. Etkinleştirme kancaları yaygın olsa da - birçok eklentinin bazı seçenekler eklemesi, yeniden yazma kurallarını temizlemesi, belki bir veritabanı tablosu oluşturması veya kurulumdaki sürüm farklılıklarını kontrol etmesi gerekir - devre dışı bırakma ve kaldırma kancaları çok daha az yaygındır.
Buradaki nokta? Birçok eklenti yazarı, kendilerini temizlemek için zaman ayırmaz. WordPress kurulumunun eklentiyi kaldırdıktan sonra oluşturduğunuz özel tabloya gerçekten ihtiyacı var mı? Eklentiyi çöpe atmadan önce neden eklentiye özel birkaç seçeneği silmiyorsunuz?
Bu makalede, eklentinizi başlatmak ve kullanıcıların ürününüzle işi bittikten sonra işleri daha kolay temizlemek için etkinleştirme, devre dışı bırakma ve kaldırma kancalarını nasıl kullanacağınızı göstereceğim.
- Aktivasyon Kancası
- Kurulum Sırası
- Yeniden Yazma Kurallarını Temizleme
- Veritabanı Tabloları Oluşturma
- Bağımlılık Kontrolleri
- Devre Dışı Bırakma Kancası
- Kaldırma Kancası
- Ek Güvenlik
- Temizlik Zamanı
Not: Bu makaleyi gözden geçirmeyi planlıyorsanız, kodu bazı değerli güvenlik kontrolleriyle tamamlayan "Ek Güvenlik" bölümüne bir göz atmanızı şiddetle tavsiye ederim. Ayrıca, WordPress eklenti kancalarıyla ilgili yardıma ihtiyacınız varsa, burada WordPress kancalarının kullanımı ve WordPress'te bir işlevin nasıl etkinleştirileceği hakkında hızlı bir bilgi tazeleme.
Aktivasyon Kancası
Aktivasyon kancası oldukça basit olmasına rağmen, kurulumu biraz özel bir durumdur, bu yüzden olayların sırasına dikkat etmemiz gerekecek. Bütün bunlara girmeden önce, işte basit bir örnek:
Hepsinin anahtarı register_activation_hook()
işlevidir. İlk parametre, ana eklenti dosyasının yoludur; ikinci parametre çalıştırılacak işlevi tanımlar. Dahili olarak register_activation_hook()
işlevi, "activate_[plugin_name]" eylemi için bir sarmalayıcıdır, ancak kullanımı biraz daha kolay olduğu için, eklentilerde kancayı görmek olağandışıdır.
Kurulum Sırası
Kurulum sırasını anlamak, alışık olabileceğiniz yöntemlerin kullanılmasını engellediği için önemlidir. register_activation_hook()
, kullanıcının aktivasyon bağlantısına tıklaması ve sonuç olarak aktivasyon uyarısını görmesi arasında çağrılır. Herhangi bir kancanın çalıştırma şansı bulamadan hemen önce yeniden yönlendiren bir aracı sayfada çalışır.
Bunun neden büyük bir serseri olduğunu görmek için bir örneğe bakalım:
Yeniden Yazma Kurallarını Temizleme
Bir dizi eklenti özel gönderi türleri oluşturur. Kullanıcıların yeni özel gönderi türünden bir gönderiyi ziyaret ederken 404 hatası almamasını sağlamak için etkinleştirmeyle ilgili yeniden yazma kurallarını temizlemek akıllıca bir harekettir.
Aşağıdaki kod mantıklı görünüyor ancak başarısız olacak.
Mükemmel görünüyor . Özel gönderi türü oluşturulur ve aktivasyonda yeniden yazma kurallarını temizleriz. Sorun, yeniden yazma kurallarını temizlediğimizde özel gönderi türlerinin henüz oluşturulmamış olmasıdır.
İşlem akışının nasıl göründüğü aşağıda açıklanmıştır:
- Kullanıcı eklentiyi yükler.
- Kullanıcı aktivasyon bağlantısını tıklar.
- Bir ara sayfa, yalnızca etkinleştirme kancasını çalıştırır, başka bir şey yapmaz. Bu, yeniden yazma kurallarını temizler.
- Eklenti etkin ve kod her zamanki gibi çalışıyor. Özel gönderi türü kaydedilir.
WordPress Codex tarafından resmi olarak onaylanan Stack Overflow'ta yayınlanan bir çözüm, küçük sorunumuzu çözüyor. Çözüm, eklentinin henüz yüklendiğini belirtmek için bir seçenek eklemeyi içerir.
Eğer bu seçenek mevcut ise aktivasyon işlemlerimizi yapıp siliyoruz.
Bunun gibi bir şey:
Şahsen ben bu çözümü pek sevmiyorum. Sorun, sekizinci satırdaki kontrolün her bir sayfa yüklemesinde çalışmasıdır. Sunucularınıza fazla yük bindirmeyeceği ve kullanıcılarınız için web sitesini yavaşlatmayacağı için endişelenecek bir şey yok. Performans üzerinde ihmal edilebilir bir etkisi olan çok hızlı bir kontrol. Bununla birlikte, zamanın %99,9'u gereksizdir.
flush_rewrite_rules()
işlevi belgelerinde Codex'te belirtilen daha iyi bir çözüm var. Bu çözümde, etkinleştirme üzerine özel gönderi türünü ayrı ayrı kaydetmek için işlevlerimizin modülerliğini kullanıyoruz:
Her zaman çalışması gereken bir kontrole güvenmek yerine, gönderi türlerimizi kaydetmek için aktivasyon işlevini kullanıyoruz. Eklentimiz etkinleştirildiğinde, gönderi türlerinin her zaman init
kancasından kaydedileceğini unutmayın.
Bu, Codex'in her yerde olmasının üzücü bir örneğidir. Genel olarak, WordPress'in iyi belgeleri vardır, ancak bir şey savurgan veya mantıksız görünüyorsa, kendi araştırmanızı yapmaktan korkmayın.
Veritabanı Tabloları Oluşturma
Bazı eklentilerin gerçekleştirdiği bir diğer görev de veritabanı tabloları oluşturmaktır. Çoğu zaman bu gereksizdir, ancak bazı yasal kullanım durumları vardır.
Tablo Oluşturma hakkındaki Codex makalesinden alınan bu örnek, birden çok etkinleştirme çağrısının nasıl kullanılabileceğini gösterir:
İlk işlev, jal_install()
yeni bir veritabanı tablosu oluşturur. İkinci işlev olan jal_install_data
, tabloya ilk verileri ekler. Bu kodun tamamını içeren bir işlev eklemek için register_activation_hook()
kullanmak yerine, register_activation_hook
birden çok kez kullanabiliriz.

Bu, modülerlik için harika bir uygulamadır. Bir yandan, ilk test verilerini eklemeniz gerekmez – aktivasyon kancasını çıkarmak kadar basittir – böylece işlevi olduğu gibi tutabilirsiniz. Öte yandan, bu işlevleri ayrı oldukları için her yerde yeniden kullanmakta özgürsünüz.
Bağımlılık Kontrolleri
Aktivasyon işlevi için başka bir ortak görev, bağımlılıkları kontrol etmektir. Eklentiniz belirli bir WordPress sürümüne, başka bir eklentiye ve hatta belirli bir PHP sürümüne bağlı olabilir.
Aşağıdaki kod, minimum WP ve PHP sürümünü kontrol eder ve gerekirse kullanıcıyı (eklentiyi etkinleştirmeden) yönlendirir:
Devre Dışı Bırakma Kancası
Devre dışı bırakma kancaları, bir kullanıcı bir eklentiyi devre dışı bıraktığında, ancak kaldırılmadan (silinmeden) önce çalışır. Devre dışı bırakma kancaları, etkinleştirme kancalarıyla aynı şekilde kullanılır:
Devre dışı bırakma, kullanıcının yalnızca eklentinizi devre dışı bıraktığı anlamına gelir; bu nedenle, kaldırma sırasında yaptığınız kadar fazlasını yapmak istemezsiniz. Belki yeniden yazma kurallarını temizlemek isteyebilirsiniz, ancak bu aşamada tüm seçeneklerinizden ve veritabanı tablonuzdan (varsa) kurtulmak istemeyeceksiniz.
Bu oldukça basittir, ancak yeniden yazma kurallarını temizlemeye özellikle dikkat edeceğim, çünkü bunlar bir kez daha sorunlu.
Kodeksi aşağıda gösterildiği gibi yapmanızı önerir, ancak bu işe yaramaz :
Bunun çalışmamasının nedeni öncekiyle aynı. Bir devre dışı bırakmanın çalıştırılması, init
kancasını gerçekleştirir; bu, eklentimizi devre dışı bırakırken, aynı zamanda özel yazı türümüzü de kaydettiğimiz anlamına gelir. Yeniden yazma kuralları temizlenir, ancak özel gönderi türünü dikkate alırlar.
Bunun üstesinden gelmek için bir Trac bileti var, ama o zamana kadar size bunu yapmanın çok iyi bir yolunu söyleyemem. İşe yaradığını bulmamın tek yolu, yeniden yazma kurallarını tamamen silmek:
Bu geçmişte benim için çalışsa da, bunu tavsiye etmem. Birkaç ekstra yeniden yazma kuralına sahip olma probleminden daha büyük bir belirsizlik getirir. Devre dışı bırakıldıktan sonra, yeniden yazma kurallarını temizleyen kalıcı bağlantı ayarlarını ziyaret etmelerini isteyen kullanıcılara bir not göstermeyi tercih ederim. Daha iyi bir çözüm uygulanana kadar buna takılıp kalacağız… üzgünüm!
Kaldırma Kancası
Bir eklentiyi kaldırırken kodu çalıştırmanın iki yolu vardır. Kaldırma kancasını register_uninstall_hook()
aracılığıyla kullanabilir veya eklentiniz içinde özel bir uninstall.php
dosyası kullanabilirsiniz. Size ikisini de göstereceğim, ancak tercih edilen yöntem, kaldırma dosyasını kullanmaktır.
Kaldırma kancasıyla ilgili ana sorun, “ana eklenti dosyasının kaldırma sırasında çalıştırılmasını engellemesidir; bu, eklenti global alanda kod çalıştırırsa sorunlu olabilir. Kaldırma kodunun merkezileştirilmiş olması da daha iyi.” – Scott Riley
Aşağıdaki kod, temel bir kanca kullanarak kaldırma işlemini gösterir:
Tartışıldığı gibi, bu en iyi çözüm değil. Kaldırma işlemlerini halletmenin çok daha iyi bir yolu, uninstall.php
dosyasını kullanmaktır. Tek yapmanız gereken onu oluşturmak ve varsa kullanılacaktır.
Gördüğünüz gibi, bu aslında daha basit bir çözüm. Hepsinden iyisi, kendi kendine yeten.
Ek Güvenlik
Güvenlikle ilgili sorunlarla ilgili olarak şimdiye kadar gösterilen örnekleri aşırı karmaşık hale getirmek istemedim, ancak bu eylemleri yalnızca izin verilenlerin çalıştırabilmesini sağlamak için gerçekten bazı adımlar atmalısınız.
Etkinleştirme ve devre dışı bırakma için aşağıdaki pasajı kullanın:
Bu kod bloğu, kullanıcının bu eylemi gerçekleştirme izinlerine sahip olduğundan ve eylemin uygun sayfada başlatıldığından emin olur. Bu, çoğu kötü niyetli girişime karşı koruma sağlamalıdır.
Kaldırma işlemi özeldir, bu nedenle biraz farklı kod kullanmamız gerekecek:
Temizlik Zamanı
Eklentiniz WordPress'e bir şeyler ekliyorsa, bir kullanıcı eklentinizi silmeye karar verdiğinde onu kaldırmak bir geliştirici olarak sizin görevinizdir.
Yukarıda özetlenen etkinleştirme, devre dışı bırakma ve kaldırma yöntemlerini kullanmak, bunu güvenli ve güvenli bir şekilde yapan bir sistem oluşturmanıza olanak tanır. Ayrıca, OOP ortamlarında bu süreçleri özetleyen bu Stackexchange iş parçacığını okumanızı da şiddetle tavsiye ederim.
Henüz bir WPMU DEV üyesi değilseniz, tamamen risksiz ücretsiz deneme için bugün kaydolun. Bir üye olarak, tüm harika eklentilerimize ve ışık hızında barındırma hizmetine erişimin yanı sıra WordPress ile ilgili tüm soru ve sorunlarınız için 7/24 uzman desteğine sahip olacaksınız.
Etiketler: