Fonksiyonlar arasında, ilk önce hangi widget'ler ve eklentiler yüklendi?


78

Müşteri, kullandığı belirli bir atlıkarınca eklentisinin widgetize edilip edilemeyeceğini soruyor. Bu, eklentinin işlevini çağıran İşlev.php içinde bir pencere öğesi oluşturmam gerektiği anlamına gelir. Bu, eklentinin kodunun ilk önce yüklenmesi gerektiği anlamına gelir, böylece işlev, files.php dosyası yüklendiğinde WordPress'in kullanabilmesi için değil mi? Işe yarar mı?

Yanıtlar:


185

Eklentiler temadan hemen önce yüklenir (evet, bunu kullanmak için mazeret arıyordum):

görüntü tanımını buraya girin

Ancak, kod yürütme noktası olarak düşünmek yanlıştır. Çoğu durumda her şey kancaya takılmalı ve çalıştırılmamalıdır init. Codex widget'ına göre kayıt ile bağlı register_widget()olmanız gerekir widget_init.

Bu durumda bu yükleme sırası önemli değil, zaman widget'ının yüklediği her şeyi her durumda ihtiyaç duyacaksınız.


3
WP çekirdek yükü hiçbir zaman bir anlam ifade etmeyecektir.
gagarine

7
2016'da güncellenmiş bir tablo alabilmemiz için herhangi bir şans var mı? ;-)
jgraup

9
@jgraup, WordPress çekirdeğindeki şeylerin değiştiğini söylüyorsunuz ... :)
Rarst

1
@Rarst, touché ;-)
saat

2
@IacacLubow evet, aynı önemli çekirdek yükünü görebildiğiniz için, birden fazla sütunda yer alan şeyler, ilgili bağlamlar için çalışır;
Rarst

16

İlginç bir yaklaşım, tüm kancaları bir yürütme sırasındaki bir dosyaya listelemek olacaktır.

add_action( 'all', '_20161224_printer' );
function _20161224_printer( $r ){

    $line =  microtime(true)*10000 . ' ' . $r .  "\n";
    $fp = fopen( ABSPATH . 'hooks.txt', 'a+');
    fwrite($fp, $line);
    fclose($fp);

}

Ve böyle bir çıktı alacaksınız:

14825992300742 pre_option_blog_charset
14825992300743 option_blog_charset
14825992300743 plugins_loaded
14825992300744 load_default_widgets
14825992300745 load_default_embeds
14825992300745 wp_audio_extensions
14825992300745 wp_audio_embed_handler
14825992300746 wp_video_extensions
14825992300746 wp_video_embed_handler
14825992300746 sanitize_comment_cookies
14825992300747 pre_option_permalink_structure
14825992300747 option_permalink_structure
14825992300748 pre_option_wp_user_roles
14825992300748 option_wp_user_roles
14825992300749 wp_roles_init
14825992300749 setup_theme
14825992300749 pre_option_template
14825992300750 option_template
14825992300750 template
14825992300750 theme_root
14825992300751 template_directory
14825992300751 pre_option_stylesheet
14825992300751 option_stylesheet
14825992300751 stylesheet
14825992300752 theme_root
14825992300752 stylesheet_directory
14825992300752 pre_option_WPLANG
14825992300753 query
14825992300754 default_option_WPLANG
14825992300755 locale
14825992300755 override_unload_textdomain
14825992300755 unload_textdomain
14825992300755 override_load_textdomain
14825992300756 load_textdomain
14825992300756 load_textdomain_mofile
14825992300756 locale
...
many many more action hooks
...
14825992302886 wp_parse_str
14825992302886 nonce_life
14825992302886 salt
14825992302886 wp_parse_str
14825992302887 esc_html
14825992302887 logout_url
14825992302887 clean_url
14825992302887 gettext
14825992302887 wp_after_admin_bar_render
14825992302888 pre_option_template
14825992302888 option_template
14825992302888 template
14825992302888 theme_root
14825992302888 template_directory
14825992302889 parent_theme_file_path
14825992302889 shutdown

Tüm listenin WPSO yazısına göre 30.000 karakter sınırlamasına uymayacağını, bu yüzden birçok eylem kancasını kaldırdım.

Yukarıdaki kodu bir eklentinin içine yerleştirin. Bunu temalardan functions.phpyaparsanız yakalayamazsınız plugins_loaded. Eklentilerin temadan önce yüklendiğinin bir başka kanıtı.

Bu kontrolün olası hedefleri çoktur, ancak lütfen arayacağınız farklı sayfa şablonları için veya bir gösterge tablosundaysanız, çıktının farklı olacağını unutmayın.

Bunu basitçe /?p=1veya Merhaba Dünya sayfasından aradım .

Etkinleştirilmiş tek bir eklentiniz yoksa, bu kodu mu-pluginsklasöre koyabilirsiniz .

WP FS API kullanmak daha iyi olabilir , ancak bu şekilde gerçekten özlü.


Wp-admin eklentileri, temadan sonra veya kurulum sırasına göre yüklenir ... ve ön uç eklentiler temadan önce yüklenir ...
Vishal Kumar Sahu

3

İstediğiniz şey buysa, eklentinin .php dosyasının içinde bir widget'ı (ve her ikisinin de kullanabileceği paylaşılan bir global değişkeni olabilir) olabilir. İşte bir süre önce tökezlediğim örnek kod ile bir öğretici .

Ayrıca, burada yürütme sırasına göre tipik bir istek sırasında yürütülen eylemlerin listesi . # 2 ve # 10, eklentilerin önce yüklendiğini; functions.php hakkında emin değilim.


1
Doğru, eklentiler tema dosyalarından önce yüklenir. Eklenti kod içeriyor, ancak istediğiniz widget'i içermiyorsa, widget'ı kendi işlevlerinizde tanımlamak mümkündür.
goldenapples
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.