after_setup_theme sempre é executado

11

Estou configurando um tema filho para alguns membros do meu corpo docente e, como parte do tema, gostaria que alguns plugins fossem ativados no momento em que o tema fosse ativado. Então, naturalmente, usei a ação after_setup_theme e chamei minha função de configuração. Ele funciona muito bem, exceto que ele é executado em TODOS os pedidos (admin e outros). Eu provei isso adicionando isso ao final da função de configuração:

echo '<script type="text/javascript">alert("This action was run")</script>';

E como resultado, obtenha um alerta de javascript em todas as solicitações de administrador e todas as solicitações de front-end (eu tenho uma configuração de rede, então obviamente em sites onde esse tema não está ativo, ele não está executando a função)

Então a questão é, isso é um bug? Estou de alguma forma fazendo algo errado? Aqui está o código completo que estou usando:

add_action( 'after_setup_theme', 'fwp_setup' );
function fwp_setup(){
    // -- Unrelated code remove for the sake of brevity 
    require_once($_SERVER['DOCUMENT_ROOT'].'/wp-admin/includes/plugin.php');
    activate_plugin('enable-media-replace/enable-media-replace.php');
    activate_plugin('seo-image/seo-friendly-images.php');
    activate_plugin('w3-total-cache/w3-total-cache.php');
    echo '<script type="text/javascript">alert("This action was run")</script>';
}

Qualquer ideia seria muito apreciada!

    
por Aaron Wagner 26.04.2012 / 14:19

5 respostas

8

SOLUÇÃO: after_switch_theme faz exatamente o que eu pretendia aqui. Ele dispara depois que o tema é alterado para o seu tema. Uma das soluções mencionadas abaixo usa switch_theme . Isso não tem os resultados desejados, pois só acontece quando você sai do seu tema.

Aqui está um artigo que eu encontrei como referência: enlace

Aqui está o meu código modificado

add_action( 'after_switch_theme', 'fwp_theme_setup' );
function fwp_theme_setup(){ 
    require_once($_SERVER['DOCUMENT_ROOT'].'/wp-admin/includes/plugin.php');
    activate_plugin('enable-media-replace/enable-media-replace.php');
    activate_plugin('seo-image/seo-friendly-images.php');
    activate_plugin('w3-total-cache/w3-total-cache.php');
}
    
por Aaron Wagner 26.04.2012 / 22:20
5

A ação after_setup_theme é planejada para disparar em cada carga do WordPress. É simplesmente parte do processo durante o qual o WordPress invoca o sistema de modelos, determina os vários parâmetros de configuração para o Tema e, em seguida, prossegue com o processamento subsequente, como determinar o modelo correto a ser exibido, etc.

Em outras palavras, o after_setup_theme representa o ponto no qual o WordPress configura o tema atual, não o ponto em que o administrador ativa e / ou configura o tema atual.

O que você está procurando é um gancho ativação do Tema, que atualmente não está disponível, mas está sob consideração / desenvolvimento .

    
por Chip Bennett 26.04.2012 / 14:30
4

Infelizmente, não há gancho de ativação do tema. No entanto, uma esta questão fornece uma solução para isso.

Basta usar o 'gancho de ativação do tema' para ativar os plug-ins.

Uma solução melhor, na mesma linha é essa . Ambos essencialmente usam o gancho switch_theme .

De acordo com os comentários do OP e o ticket trac vinculado - after_switch_theme é o gancho necessário.

Isso passa o nome do tema antigo como um argumento. No entanto, se isso estiver no seu functions.php (que deve ser ...), o retorno de chamada será acionado somente quando o tema estiver sendo ativado .

add_action( 'after_switch_theme', 'wpse50298_setup' );
function wpse50298_setup($theme_switching_from){
    // Your theme is being activated
}

Da mesma forma, adicionar um retorno de chamada a switch_theme só será chamado quando seu tema for desativado.

add_action( 'switch_theme', 'wpse50298_deactivate' );
function wpse50298_deactivate($theme_switching_to){
    // Your theme is being deactivated
}
    
por Stephen Harris 26.04.2012 / 14:30
0

Uma solução melhor pode ser usar o script de ativação de plug-in do Thomas Griffin . Isso solicitará que os usuários instalem plug-ins de sua escolha quando o tema estiver em uso. Acho que essa é uma ótima maneira de separar o plug-in do tema e ainda usá-lo.

Dentro do seu tema, verifique se o plugin está ativo antes de usar suas funções. Isso permitirá que os usuários tenham mais opções e controle.

Você pode configurar o script de ativação facilmente com mochila .

    
por Jeff Sebring 05.05.2012 / 03:35
0

A sua melhor correção seria agora usar switch_theme hook e filtrar o argumento '$ theme' passado para ver se é o atual, então se não retornar;

function nw_update_network($theme) {
   if ($theme !== 'my_theme_name') return;

   // Your code here
}

add_action('switch_theme', 'nw_update_network');
    
por numediaweb 07.06.2015 / 21:19