Em que ordem o WordPress carrega os arquivos de plug-in?

21

Em que ordem os plugins são carregados no WordPress?

E dentro da pasta de um plugin específico, que ordem é seguida para o carregamento?

urok93
fonte
Você pode depurar profundamente este plugin: https://wordpress.org/plugins/whats-running/ Ele lista todos os arquivos necessários no WordPress.
Szépe Viktor

Respostas:

26

Resposta à primeira pergunta:

  1. No wp-settings.php, o WordPress primeiro verifica se há plugins de uso obrigatório (plug-ins na mu-pluginspasta opcional ) e os carrega.

  2. Então, se você estiver executando uma instalação multisite, ele verifica plug-ins ativados pela rede e os carrega.

  3. Em seguida, ele verifica todos os outros plug-ins ativos, observando a active_pluginsentrada da wp_optionstabela do banco de dados e os percorre. Os plugins serão listados em ordem alfabética.

Aqui está a ordem em que o WordPress carrega praticamente tudo: http://codex.wordpress.org/Action_Reference#Actions_Run_During_a_Typical_Request

O problema é que geralmente não importa em que ordem cada plug-in individual é carregado, porque plug-ins escritos corretamente usarão ganchos do WordPress, que permitem conectar funcionalidades em pontos específicos posteriormente na inicialização do WordPress. (Plugins escritos corretamente também prefixam suas funções e classes para que não haja conflitos.)

Mais informações sobre a API do plugin: http://codex.wordpress.org/Plugin_API/

Resposta à segunda pergunta:

Depende totalmente do plugin. O WordPress carrega apenas um arquivo no plug-in, o que geralmente é chamado the-plugin-name.phpe contém o título, a descrição, o autor etc. na parte superior. Cabe ao plugin carregar o restante de seus arquivos, usando require_onceand wp_enqueue_scripte outros enfeites.

SeventhSteel
fonte
Portanto, se eu criar um plug-in e depois lançar um plug-in complementar que deve ser executado após a execução do plug-in original, como posso garantir esse pedido?
Urok93
Realmente depende do que você está tentando fazer. Mas geralmente você configuraria cada um deles para executar em um gancho específico usando a função add_action (), que permite definir a prioridade. codex.wordpress.org/Function_Reference/add_action
SeventhSteel
@ SeventhSteel Mas e se um plug-in depender do gancho criado por outro plug-in. Se um plug-in usa apply_filters()para criar um gancho, mas é executado antes de um plug-in que usa add_filter(), ainda funcionará? Logicamente, parece que apply_filters()já foi acionado, então as add_filter()chamadas no segundo plugin não farão nada. Importa em que ordem os plug-ins são carregados ao usar apenas ganchos criados por plug-ins?
trusktr
O que importa é o que é carregado com o tempo apply_filters(). add_filter()deve executar antes apply_filters(). Se add_filter()estiver em um arquivo de plug-in e não em outra função, ele será executado no plugins_loadedgancho, o que geralmente acontece antes que você precise apply_filters().
SeventhSteel
Um cenário comum é ter vários plugins que acrescentam seu conteúdo depois the_content- como é determinada a ordem de aparência?
Dan Knauss 23/03
9

Acho que é útil incluir uma ação de 'carregamento tardio' no meu plug-in que é executada depois que todos os plug-ins concluíram seu carregamento da seguinte maneira:

add_action('plugins_loaded', 'my_late_loader');

A função my_late_loader é iniciada depois de todos os outros plugins, o que me permite usar ganchos definidos por outros plugins em minha própria função my_other_function, que é iniciada em my_late_loader

/**
 * Late loading function for actions that must run after all plugins 
 * have loaded
 */
function my_late_loader(){
    add_action( 'some_hook', 'my_other_function', 10, 1);
}

Um pouco complicado (eu sei), mas isso garante que ganchos em outros plug-ins sejam criados antes de serem adicionados, independentemente da ordem de carregamento do plug-in.

Clinton
fonte