Tra funzioni.php, widget e plugin, che viene caricato per primo?


77

Il cliente chiede se uno specifico plug-in carosello che utilizza può essere widget. Ciò significa che dovrei creare un widget all'interno di Functions.php che chiama la funzione del plugin. Ciò significa che il codice del plug-in deve essere caricato per primo in modo che la funzione sia disponibile per WordPress quando viene caricato il file Functions.php, giusto? Funzionerebbe?

Risposte:


184

I plugin sono caricati proprio prima del tema (sì, ho cercato scuse per usarlo):

inserisci qui la descrizione dell'immagine

Tuttavia è sbagliato pensare a entrambi come punto di esecuzione del codice. Nella maggior parte dei casi, tutto dovrebbe essere agganciato ed eseguito non prima initdell'amo. Secondo Codex la registrazione del widget con register_widget()dovrebbe essere agganciata a widget_init.

A causa di questo ordine di carico non importa per questo caso, avrai tutto ciò che è caricato dal widget tempo che ne ha bisogno in ogni caso.


3
Il carico del core WP non avrà mai senso.
gagarine,

7
Qualche possibilità di ottenere un grafico aggiornato nel 2016? ;-)
jgraup

9
@jgraup dici che come le cose cambiano nel core di WordPress ... :)
Rarst

1
@Rarst, touché ;-)
jgraup

2
@IsaacLubow sì, le cose in più di una colonna vengono eseguite per quei rispettivi contesti, come puoi vedere lo stesso blocco significativo di carico principale è sempre coinvolto per qualsiasi richiesta.
Rarst

16

Un approccio interessante sarebbe quello di elencare tutti gli hook di un file in una sequenza di esecuzione.

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);

}

E otterrai l'output in questo modo:

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

Nota che l'elenco completo semplicemente non poteva adattarsi alla limitazione di 30.000 caratteri per post WPSO, quindi ho rimosso molti hook di azione.

Inserisci il codice sopra in un plugin. Se lo fai dai temi functions.phpche non capirai plugins_loaded. Un'altra prova che i plugin sono caricati prima del tema.

I possibili vantaggi di questo controllo sono molti, ma tieni presente che l'output sarà diverso per i diversi modelli di pagina che chiamerai o se sei in una dashboard.

Ho semplicemente chiamato questo dalla /?p=1pagina Hello World.

Se non hai attivato un singolo plug-in, puoi inserire questo codice nella mu-pluginscartella.

Potrebbe essere meglio usare l' API WP FS , ma in questo modo è davvero conciso.


All'interno dei plugin di wp-admin vengono caricati dopo il tema o nell'ordine dell'installazione ... e nei plugin front-end vengono caricati prima del tema ...
Vishal Kumar Sahu

3

Puoi avere un widget all'interno del file .php del plugin (e avere una variabile globale condivisa che entrambi possono usare), se è quello che stai chiedendo. Ecco un tutorial con un codice di esempio su cui mi sono imbattuto qualche tempo fa.

Inoltre, ecco un elenco di azioni eseguite durante una richiesta tipica , in ordine di esecuzione. # 2 e # 10 suggeriscono che i plug-in vengano caricati per primi; non sono sicuro di funzioni.php.


1
Corretti, i plug-in vengono caricati prima dei file dei temi. Se il plugin include il codice, ma non il widget desiderato, è possibile definire il widget nelle funzioni.php del tema.
goldenapples,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.