Între functions.php (temă), widget-uri și plugin-uri, care se încarcă primul?
Un client întreabă dacă un plugin specific de carusel pe care îl folosește poate fi transformat în widget. Asta înseamnă că ar trebui să creez un widget în functions.php care să apeleze funcția plugin-ului. Prin urmare, codul plugin-ului trebuie să fie încărcat primul pentru ca funcția să fie disponibilă în WordPress când se încarcă fișierul functions.php, corect? Ar funcționa acest lucru?

Plugin-urile sunt încărcate chiar înaintea temei (da, am căutat o scuză să folosesc asta):
Totuși, este greșit să considerăm oricare dintre ele ca punct de execuție a codului. Pentru majoritatea cazurilor, totul ar trebui să fie conectat prin hook-uri și executat nu mai devreme de hook-ul init
. Conform Codex, înregistrarea widget-urilor cu register_widget()
ar trebui să fie conectată la hook-ul widget_init
.
Datorită acestui fapt, ordinea încărcării nu contează pentru acest caz, deoarece vei avea totul încărcat până în momentul în care widget-ul are nevoie de el, indiferent de situație.

@jgraup spui asta de parcă lucrurile se schimbă în nucleul WordPress... :)

Doar să fiu sigur că înțeleg corect acest grafic - Secțiunile care se întind pe mai mult de una dintre cele 3 coloane principale sunt comune pentru toate? Deci urmăresc o linie verticală în jos și trec prin evenimente în ordine cronologică pentru o anumită solicitare?

O abordare interesantă ar fi să listezi toate hook-urile într-un fișier în ordinea de execuție.
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);
}
Și vei obține un rezultat de genul:
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
...
multe alte hook-uri de acțiune
...
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
Reține că lista completă nu ar fi putut încăpea în limita de 30.000 de caractere per postare WPSO, așa că am eliminat multe hook-uri de acțiune.
Pune codul de mai sus într-un plugin. Dacă faci asta din
functions.php
al temei, nu vei prindeplugins_loaded
. Încă o dovadă că plugin-urile se încarcă înaintea temei.
Beneficiile acestei verificări sunt multe, dar reține că rezultatul va fi diferit pentru diferite șabloane de pagină pe care le vei apela sau dacă ești în panoul de administrare.
Eu am apelat acest cod de pe /?p=1
sau pagina Hello World.
Dacă nu ai niciun plugin activat, poți pune acest cod în folderul mu-plugins
.
Ar putea fi mai bine să folosești WP FS API, dar această metodă este foarte concisă.

Poți avea un widget în fișierul .php al plugin-ului (și poți avea o variabilă globală partajată pe care ambele le pot folosi), dacă asta întrebi. Iată un tutorial cu cod exemplu pe care l-am găsit acum ceva vreme.
De asemenea, iată o listă de acțiuni care rulează în timpul unei cereri tipice, în ordinea de execuție. #2 și #10 sugerează că plugin-urile se încarcă primele; nu sunt sigur despre functions.php.
