Kodu Temizlemek, Etkinleştirmek ve Kaldırmak için WordPress Kancalarını Kullanma

Yayınlanan: 2015-01-23

Eklenti 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:

Özet yükleniyor f356a899b7f009d136644383339db4f6

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.

Özet yükleniyor 7c656623608efd1785437ebe7cdb7350

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:

  1. Kullanıcı eklentiyi yükler.
  2. Kullanıcı aktivasyon bağlantısını tıklar.
  3. Bir ara sayfa, yalnızca etkinleştirme kancasını çalıştırır, başka bir şey yapmaz. Bu, yeniden yazma kurallarını temizler.
  4. 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:

Özet yükleniyor 6f0927b3bf9807e426c8778a3bf3a797

Ş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:

Özet yükleniyor b44bf08bf511277184a49de53c0c3ed8

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:

9a1d4757d023f2442093a9a158cdb6b4 özü yükleniyor

İ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:

Özet yükleniyor 79a2c5414969291ec90cac11c38b7522

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:

Özet yükleniyor 6ed9bb66ee1863ab3e84db1f9f753792

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 :

Özet yükleniyor 4440a0178b4e34506530e13d0ead8958

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:

Özet yükleniyor 98b496826278084a2f7a5ea27994f781

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:

Özet yükleniyor 040847db4739148900b1ee29d227d71d

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.

Özet yükleniyor 44dde25dcb57b4239be8586f4d04c765

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:

Özet yükleniyor 357037989065f89c15f049314e9831bf

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:

Özet yükleniyor 541c93cfa9b89e1e6c7b48b06732d31f

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.

Eklentileri kaldırdığınızda veritabanınızı bir karmaşa içinde bıraktığını mı düşünüyorsunuz? Aşağıdaki yorumlarda ne düşündüğünüzü bize bildirin.
Etiketler: