Diğer kancaları çağırmak için wp init kancasını mı kullanıyorsunuz?


11

WordPress temasına veya eklenti geliştirmeye göre iyi bir uygulama olup olmadığını bilmek istiyorum.

add_action('init','all_my_hooks');

function all_my_hooks(){

// some initialization stuff here and then

add_action('admin_init',-----);
add_action('admin_menu',----);

// more like so

}

Teşekkürler

Yanıtlar:


16

Genel olarak: Evet, kendi kodunuzu başlatmak için özel bir kanca bekleyin. Asla sadece bir nesne örneğini genel ad alanına atmayın. Ancak initnadiren gereklidir.

Mümkün olduğunca geç takılırsınız. İlk kodunuz çalışırsa wp_headdaha önceki bir kanca kullanmayın. Hatta kancaları kademelendirebilirsiniz :

add_action( 'wp_head', 'first_callback' );

function first_callback()
{
    // do something
    // then
    add_action( 'wp_footer', 'second_callback' );
}

initKanca ile ilgili olarak : wp_loadedBunun yerine kullanın . Sonra initve sonra çalışan ms_site_check()bu denir. Bu şekilde, eklentinizi çok siteli bir kurulumda geçersiz bir alt sitede çalıştırmaktan kaçınırsınız. Diğer her şey aynı.


3
+1 wp_loadedve MS bilgileri.
Kaiser

Cevabınız için çok teşekkürler, hala bir şüphe, wp_loaded içindeki diğer tüm kancaları daha iyi yükleyin veya ayrı olarak yükleyin? i wp_loaded kanca eklemek acaba admin_init veya admin_menu sonra bağladım yerine daha önce kanca olacak?
atinder

basamaklı kancalar bir sorun değil mi?
atinder

Hayır, neden olmalı? İkinci kancayı yalnızca ilk kanca kullanışlı olduğunda çağırın.
fuxia

3

Bu uygulamanın büyük yararlarını şu nedenlerle görmüyorum :

Kayıt olurken geri arama işlevleriniz çağrılmaz

add_actionVe add_filterişlevleri yalnızca genel değişkenin bir giriş eklemek $wp_filtertüm filtreleri ve eylemleri tutar. Kaynağa bakın . İşlevi çağırmaz. Kodunuz çalışacaktır ancak ne zaman do_actionve apply_filtershangi olur, (uygun kanca adıyla) denir çok geç o kanca olmalıdır yerde.

Bunu yaptığınızda, global değişkenin $wp_filterdaha fazla bellek alması gerekir => daha fazla bellek gerekir. Ancak yeni bir işlev oluşturmanın aynı sorunu yaşadığını düşünüyorum.

Kodu düzenleme

Her şeyi bir işleve koymak , temanızdaki / eklentinizdeki her dosyadaki tüm kancaları hatırlamaya zorlar. Sen olmaz böyle bir şey yapmak:

  • in header.php: başlıkta gerçekleşen şeyler için kancalar ve geri arama işlevleri ekleme (menü, kayıt komut dosyası gibi)
  • in content.php: içeriği filtrelemek için kancalar ve geri arama işlevleri ekleme
  • admin-menu.php: yönetici menüsü eklemek için kancalar ve geri arama işlevleri ekleyin

(bu dosyaların temanıza / eklentinize eklendiğini varsayın)

Bunun yerine şunları yapmanız gerekir:

  • sadece callback fonksiyonlarını koymak header.php, content.php,admin-menu.php
  • ve tüm kancaları ayrı bir fonksiyona başka bir dosyaya koy

=> Bu, header.phpdosyanın içeriğine baktığınızda ne olacağını bilmenizi zorlaştıracaktır . Bu geri aramaların ne zaman tetiklendiğini bilmek için arama yapmanız gerekir.

Ve temanızda / eklentinizde birden fazla sınıfınız olduğunda durumu düşünün. Tüm sınıfların tüm kancalarını bir yere koyar mısın? Yoksa her sınıfın tüm kancaları tutan bir sarma işlevi var mı? Çok gereksiz!

Bu sebepten ötürü, kişisel tarz olduğunu düşünüyorum :). Hybrid'in söylediklerini yaptığı gibi bazı çerçeveler görüyorum. Bazen bu çerçevelere girmemi zorlaştırıyor!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.