Eu tenho o problema de ter que carregar o functions.php
arquivo do meu tema pai antes que o functions.php
arquivo do tema filho seja carregado. Isso é necessário para o procedimento de instalação e inicialização. Eu olhei para os ganchos dentro de /wp_core_root/wp-settings.php (nomeado:) do_action('setup_theme');
.
O problema é que eu não sei como me conectar lá, porque o primeiro arquivo que recebo é do tema filho functions.php
, então não add_action( 'setup_theme', 'my_init_function' );
funcionará.
Edit:
a) Eu sei que os plug-ins carregam mais cedo que o tema e, portanto, podem acessar até a consulta inicial, mas não quero confiar em um plug-in.
b) Aqui está o código (abreviado) do arquivo wp-settings.php
// happens a lot earlier:
do_action( 'plugins_loaded' );
// localize stuff happening here
do_action( 'setup_theme' );
// Load the functions for the active theme, for both parent and child theme if applicable.
if ( TEMPLATEPATH !== STYLESHEETPATH && file_exists( STYLESHEETPATH . '/functions.php' ) )
include( STYLESHEETPATH . '/functions.php' );
if ( file_exists( TEMPLATEPATH . '/functions.php' ) )
include( TEMPLATEPATH . '/functions.php' );
// first available hook, *after* functions.php was loaded
do_action( 'after_setup_theme' );
Quero evitar duas coisas: primeiro, muitas explicações para os usuários. Segundo, a chance de alguém quebrar alguma coisa se cortar a corda acidentalmente com a exclusão do procedimento inicial dos pais. As pessoas devem apenas tocar dentro do functions.php sem correr o risco de quebrar nada sem saber.
Em outras palavras: Como faço para manter limpo o arquivo functions.php dos temas filhos, mas faço a inicialização dos temas pai?
Alguma ideia? Muito obrigado!
functions.php
. Dê uma olhada nowp-settings.php
arquivo "molto loko" no núcleo (linha: 275-279 @wp 3.1 rc) ... fica assim:if ( TEMPLATEPATH !== STYLESHEETPATH && file_exists( STYLESHEETPATH . '/functions.php' ) ) include( STYLESHEETPATH . '/functions.php' ); if ( file_exists( TEMPLATEPATH . '/functions.php' ) ) include( TEMPLATEPATH . '/functions.php' );
assim não vejo chance ... E não quero usar um plugin para iniciar meu tema.include(/path/to/parent/themes/functions.php)
no topo dos temas filhos functions.php, tudo será carregado antes. Não?Respostas:
Justin Tadlock recentemente escreveu um ótimo post sobre como criar um arquivo functions.php melhor,
onde (se bem me lembro) ele lida com esse problema exato.
Infelizmente, o site dele está fora do ar no momento, então tenho que confiar na minha memória por enquanto.
Você está no caminho certo com o
after_setup_theme
gancho.Veja o exemplo abaixo.
functions.php
arquivos.Um pouco de código vale mais que mil palavras - o tema principal
function.php
deve ser assim:fonte
after_setup_theme
é tarde demais, porque os arquivos functions.php já foram carregados.Em primeiro lugar, você não pode. As funções do tema filho.php sempre carregam primeiro, ponto final.
Segundo, os temas não podem se conectar ao setup_theme. Os plugins podem, mas a primeira coisa que um tema pode se conectar é after_setup_theme.
Se seu pai ou mãe foi projetado corretamente, o filho poderá substituir funções e itens do pai, mas apenas quando ele for carregado primeiro.
Em termos gerais, se você acha que precisa carregar o arquivo de funções dos pais primeiro, provavelmente está fazendo algo errado, de alguma forma. Você precisa explicar o problema maior.
fonte
after_setup_theme
? Só para não "spam" o gancho, ou porque é mais "empreendedor" ou "kool" er? Quero dizer: a idéia de "melhores práticas" por trás dos ganchos paralelos específicos do tema "deixa ganchos principais para plug-ins"? (Isso é como eu lidar com isso no momento.)Então você está tentando executar o código a partir do functions.php da criança, mas após o carregamento do tema pai. Simples, basta usar uma ação personalizada:
No final de
parent/functions.php
:Em
child/functions.php
:Todos os temas dos pais que valem a pena fazem dessa maneira. Além disso, eles têm várias outras ações e filtros espalhados para o tema filho usar.
fonte
Por que você não inclui o
functions.php
arquivo do tema pai no arquivo do tema filhofunctions.php
, desta forma:No
functions.php
arquivo do tema filho :Dessa maneira, o
functions.php
arquivo do tema pai não é alterado (às vezes isso é importante).fonte
Eu tive um problema semelhante antes e o corrigi criando um "child-functions.php" extra vazio no pai e incluindo-o em "functions.php" (pai também) logo após os arquivos / funções que eu quero usar no child, então, no tema filho, crio um arquivo "child-functions.php" e é aí que eu posso começar a simular child functions.php, executar após o pai não é uma solução elegante, mas fez o trabalho.
fonte