Tra functions.php (tema), widget e plugin, quale viene caricato per primo?

22 ago 2011, 10:50:17
Visualizzazioni: 43.9K
Voti: 96

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

3
Commenti

Ciao, ho una domanda: per chiamare un'API esterna, in quale parte di WordPress dovrei farlo? Grazie

Nicolas Magnani Nicolas Magnani
25 nov 2020 01:51:47

Ciao - hai pubblicato questo come risposta a una domanda esistente, mentre in realtà è una nuova domanda. Potresti chiederlo come una nuova domanda, per favore? Questo sito è in inglese, ma esiste anche Stack Overflow in spagnolo.

Rup Rup
25 nov 2020 01:59:55

Ma la risposta generale penso sia che puoi chiamare un'API esterna da qualsiasi punto in un plugin o tema. Dovresti generalmente memorizzare nella cache la risposta ed evitare richieste a lunga esecuzione se possibile. Se riposti questa domanda, per favore fornisci maggiori dettagli sull'API che stai chiamando e su cosa vuoi fare. Grazie!

Rup Rup
25 nov 2020 02:01:10
Tutte le risposte alla domanda 3
6
224

I plugin vengono caricati subito prima del tema (sì, stavo cercando una scusa per usare questo):

Descrizione dell'immagine qui

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

Per questo motivo l'ordine di caricamento non ha importanza in questo caso, avrai tutto caricato nel momento in cui il widget ne avrà bisogno in ogni caso.

23 ago 2011 03:07:49
Commenti

Il caricamento del core di WP non avrà mai senso.

gagarine gagarine
27 ago 2015 16:45:09

C'è qualche possibilità di ottenere un grafico aggiornato nel 2016? ;-)

jgraup jgraup
10 gen 2016 17:04:18

@jgraup lo dici come se le cose cambino nel core di WordPress... :)

Rarst Rarst
10 gen 2016 23:19:39

@Rarst, touché ;-)

jgraup jgraup
10 gen 2016 23:27:12

Per essere sicuro di capire bene questo grafico - Le sezioni che si estendono su più di una delle 3 colonne principali sono comuni a tutte? Quindi sto seguendo una linea verticale verso il basso e attraversando gli eventi in ordine cronologico per una determinata richiesta?

Isaac Lubow Isaac Lubow
11 ott 2018 03:30:23

@IsaacLubow sì, gli elementi presenti in più colonne si applicano ai rispettivi contesti, come puoi vedere la stessa porzione significativa del core load è sempre coinvolta per qualsiasi richiesta.

Rarst Rarst
15 ott 2018 14:13:54
Mostra i restanti 1 commenti
1
19

Un approccio interessante sarebbe elencare tutti gli hook in un file in ordine 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 un output simile a questo:

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
...
molti altri action hook
...
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 la lista completa semplicemente non potrebbe rientrare nel limite di 30.000 caratteri per post su WPSO, quindi ho rimosso molti action hook.

Inserisci il codice sopra in un plugin. Se lo fai dal functions.php del tema non catturerai plugins_loaded. Un'altra prova che i plugin vengono caricati prima del tema.

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

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

Se non hai alcun plugin attivato, puoi inserire questo codice nella cartella mu-plugins.

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

24 dic 2016 19:22:46
Commenti

All'interno di wp-admin i plugin vengono caricati dopo il tema o in base all'ordine di installazione... mentre nel front-end i plugin vengono caricati prima del tema...

Vishal Kumar Sahu Vishal Kumar Sahu
17 apr 2017 20:17:25
1

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

Inoltre, ecco una lista delle azioni eseguite durante una tipica richiesta, in ordine di esecuzione. I punti #2 e #10 suggeriscono che i plugin vengono caricati per primi; non sono sicuro riguardo a functions.php.

23 ago 2011 02:35:01
Commenti

Corretto, i plugin vengono caricati prima dei file del tema. Se il plugin include il codice, ma non il widget desiderato, è possibile definire il widget nel file functions.php del tuo tema.

goldenapples goldenapples
23 ago 2011 02:47:27