Entre functions.php, widgets e plugins, que é carregado primeiro?

74

O cliente pergunta se um plugin de carrossel específico que ele usa pode ser widgetizado. Isso significa que eu deveria criar um widget dentro de functions.php que chama a função do plugin. Isso significa que o código do plugin deve ser carregado primeiro para que a função esteja disponível para o WordPress quando o arquivo functions.php for carregado, certo? Isso funcionaria?

    
por pixeline 22.08.2011 / 09:50
fonte

3 respostas

170

Os plugins são carregados logo antes do tema (sim, estou procurando por uma desculpa para usar isso):

Noentanto,éerradopensarcomopontodeexecuçãodecódigo.Namaioriadoscasos,tudodeveserenganchadoeexecutadoantesdeinithook.DeacordocomoregistrodewidgetdoCodexcom register_widget() deve ser ligado a widget_init .

Por causa dessa ordem de carga não importa para este caso, você terá tudo carregado pelo widget de tempo que precisa em qualquer caso.

    
por Rarst 23.08.2011 / 02:07
fonte
11

Uma abordagem interessante seria listar todos os ganchos para um arquivo em uma seqüência de execução.

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 você receberá a saída assim:

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
  

Note que a lista completa simplesmente não poderia caber a limitação de 30.000 caracteres por post WPSO, então eu removi muitos ganchos de ação.

     

Coloque o código acima dentro de um plugin. Se você fizer isso a partir dos temas functions.php , não irá capturar plugins_loaded . Um outro prova de que os plugins são carregados antes do tema.

Os itens possíveis dessa verificação são muitos, mas observe que a saída será diferente para os diferentes modelos de página a serem chamados ou se você estiver em um painel.

Eu simplesmente chamei isso da página /?p=1 ou Hello World.

Se você não tem um único plugin ativado, você pode colocar este código na pasta mu-plugins .

Pode ser melhor usar API do WP FS , mas desta forma é muito conciso.

    
por prosti 24.12.2016 / 18:22
fonte
3

Você pode ter um widget dentro do arquivo .php do plugin (e ter uma variável global compartilhada que ambos possam usar), se é isso que você está perguntando. Aqui está um tutorial com código de amostra eu tropecei um tempo atrás.

Além disso, aqui está uma lista de ações executadas durante uma solicitação típica , em ordem de execução. # 2 e # 10 sugerem que os plugins carreguem primeiro; não tenho certeza sobre functions.php.

    
por montrealist 23.08.2011 / 01:35
fonte