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

77

O Cliente pergunta se um plug-in de carrossel específico que ele usa pode ser widgetizado. Isso significa que eu devo criar um widget dentro de functions.php que chama a função do plugin. Isso significa que o código do plug-in 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?

pixeline
fonte

Respostas:

184

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

insira a descrição da imagem aqui

No entanto, é errado pensar nisso como um ponto de execução de código. Na maioria dos casos, tudo deve ser conectado e executado não antes do que o inithook. De acordo com o registro do widget do Codex, register_widget()deve estar ligado ao widget_init.

Como essa ordem de carga não importa para este caso, você terá tudo carregado pelo tempo que o widget precisar, em qualquer caso.

Rarst
fonte
3
A carga principal do WP nunca fará sentido.
precisa saber é o seguinte
7
Alguma chance de termos um gráfico atualizado em 2016? ;-)
jgraup
9
@jgraup você diz que, como as coisas mudam no núcleo WordPress ... :)
Rarst
1
@Rarst, touché ;-)
jgraup 10/01
2
@IsaacLubow sim, as coisas em mais de uma coluna são executadas para os respectivos contextos, pois você pode ver o mesmo pedaço significativo de carga principal sempre envolvido em qualquer solicitação.
Rarst
16

Uma abordagem interessante seria listar todos os ganchos em um arquivo em uma sequê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ê obterá 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

Observe que a lista completa simplesmente não poderia caber na limitação de 30.000 caracteres por postagem da WPSO, então removi muitos ganchos de ação.

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

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

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

Se você não tiver um único plug-in ativado, poderá colocar esse código na mu-pluginspasta

Pode ser melhor usar a API do WP FS , mas dessa maneira é muito conciso.

prosti
fonte
Dentro plugins wp-admin são carregados após o tema ou no fim da instalação ... e em plugins front-end são carregados antes de o tema ...
Vishal Kumar Sahu
3

Você pode ter um widget dentro do arquivo .php do plug-in (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 exemplo que eu encontrei há um tempo.

Além disso, aqui está uma lista de ações executadas durante uma solicitação típica , em ordem de execução. Os nºs 2 e 10 sugerem que os plug-ins sejam carregados primeiro; não tenho certeza sobre o functions.php.

montrealista
fonte
1
Correto, os plugins são carregados antes dos arquivos do tema. Se o plugin incluir código, mas não o widget que você deseja, é possível definir o widget nas funções do seu tema.php.
goldenapples