after_setup_theme est toujours exécuté

11

Je suis en train de créer un thème enfant pour certains membres de mon corps professoral et, dans le cadre de ce thème, j'aimerais qu'une poignée de plugins soit activée au moment où le thème est activé. Alors, naturellement, j'ai utilisé l'action after_setup_theme et appelé ma fonction de configuration. Cela fonctionne très bien, sauf qu'il fonctionne à CHAQUE demande (admin et autre). Je l'ai prouvé en ajoutant ceci à la fin de la fonction d'installation:

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

Et par conséquent, recevez une alerte javascript sur chaque requête de l'administrateur et chaque requête du serveur frontal (j'ai une configuration réseau, donc bien évidemment sur les sites où ce thème n'est pas actif, il ne lance pas la fonction)

La question est donc de savoir s'il s'agit d'un bug? Suis-je en train de faire quelque chose de mal? Voici le code complet que j'utilise:

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>';
}

Toute idée serait très appréciée!

    
posée Aaron Wagner 26.04.2012 - 14:19

5 réponses

8

SOLUTION: after_switch_theme fait exactement ce que je voulais ici. Il se déclenche lorsque le thème est basculé sur votre thème. Une des solutions mentionnées ci-dessous utilise switch_theme . Cela ne donne pas les résultats souhaités, car cela ne se produit que lorsque vous quittez votre thème.

Voici un article que j'ai trouvé comme référence: enlace

Voici mon code modifié

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');
}
    
réponse donnée Aaron Wagner 26.04.2012 - 22:20
5

L'action after_setup_theme est destinée à être déclenchée à chaque chargement WordPress. Cela fait simplement partie du processus au cours duquel WordPress appelle le système de modèles, détermine les différents paramètres de configuration du thème, puis poursuit le traitement suivant, tel que le modèle à afficher, etc.

.

En d'autres termes, le after_setup_theme représente le point où WordPress configure le thème actuel, pas le point où l'administrateur > active et / ou configure le thème actuel.

Ce que vous recherchez est un crochet d'activation , qui n'est actuellement pas disponible, mais est à l'étude / en cours de développement .

    
réponse donnée Chip Bennett 26.04.2012 - 14:30
4

Malheureusement, il n'y a pas de crochet d'activation de thème. Cependant, une cette question fournit une solution de contournement à cette question.

Utilisez simplement le "crochet d'activation de thème" pour activer les plug-ins.

Une meilleure solution, dans le même sens, est la suivante. . Les deux utilisent essentiellement le crochet switch_theme .

Selon les commentaires de l'OP et le ticket de trace lié - after_switch_theme requis.

Ceci passe le nom du vieux thème en argument. Toutefois, si cela se trouve dans votre functions.php (comme il se doit ...), le rappel ne sera déclenché que lorsque votre thème est activé .

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

De même, ajouter un rappel à switch_theme ne sera appelé que lorsque votre thème sera désactivé.

add_action( 'switch_theme', 'wpse50298_deactivate' );
function wpse50298_deactivate($theme_switching_to){
    // Your theme is being deactivated
}
    
réponse donnée Stephen Harris 26.04.2012 - 14:30
0

Une meilleure solution consisterait peut-être à utiliser le script d'activation du plug-in de Thomas Griffin . Cela incitera les utilisateurs à installer les plugins de votre choix lorsque le thème sera utilisé. Je pense que c’est un excellent moyen de séparer le plugin du thème et d’en utiliser l’utilisation.

Dans votre thème, vérifiez si le plug-in est actif avant d'utiliser ses fonctions. Cela permettra aux utilisateurs plus de choix et de contrôle.

Vous pouvez facilement configurer le script d'activation avec Knapsack .

    
réponse donnée Jeff Sebring 05.05.2012 - 03:35
0

Votre meilleure solution serait maintenant d’utiliser switch_theme hook et de filtrer l’argument '$ theme' passé pour voir s’il s’agit de la version actuelle, sinon si elle ne retourne pas;

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

   // Your code here
}

add_action('switch_theme', 'nw_update_network');
    
réponse donnée numediaweb 07.06.2015 - 21:19

Lire d'autres questions sur les étiquettes