after_setup_theme s'exécute toujours


11

Je mets en place un thème enfant pour certains de mes professeurs, et dans le cadre du thème, j'aimerais qu'une poignée de plugins soient activés au moment où le thème est activé. Donc, naturellement, j'ai utilisé l'action after_setup_theme et appelé ma fonction de configuration. Cela fonctionne très bien, sauf qu'il s'exécute sur CHAQUE demande (administrateur ou autre). J'ai prouvé cela en ajoutant ceci à la fin de la fonction de configuration:

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

Et par conséquent, obtenez une alerte javascript sur chaque demande d'administration et chaque demande frontale (j'ai une configuration réseau, donc évidemment sur les sites où ce thème n'est pas actif, il n'exécute pas la fonction)

La question est donc: est-ce 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 opinion serait très appréciée!


SOLUTION: after_switch_themefait exactement ce que je voulais ici. Il se déclenche après que le thème est passé à votre thème. L'une des solutions mentionnées ci-dessous utilise switch_theme. Cela n'a pas les résultats escomptés, car cela ne se produit qu'en quittant votre thème. Référencer ce commentaire Trac
Aaron Wagner

veuillez poster cela comme réponse , plutôt que comme commentaire à votre question. :)
Chip Bennett

2
Mes excuses. Cela ne me permettrait pas encore de le faire. Je vais l'ajouter comme réponse dans un peu.
Aaron Wagner

Réponses:


8

SOLUTION: after_switch_themefait exactement ce que je voulais ici. Il se déclenche après que le thème est passé à votre thème. L'une des solutions mentionnées ci-dessous utilise switch_theme. Cela n'a pas les résultats escomptés, car cela ne se produit qu'en quittant votre thème.

Voici un article que j'ai trouvé comme référence: http://core.trac.wordpress.org/ticket/7795#comment:29

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

5

L' after_setup_themeaction est destinée à se déclencher à chaque chargement de 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 procède au traitement ultérieur, comme la détermination du modèle correct à afficher, etc.

En d'autres termes, le after_setup_themereprésente le point auquel WordPress configure le thème actuel, pas le point auquel l' administrateur active et / ou configure le thème actuel.

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


Le lien d' entrée au Codex est alors terriblement trompeur. Il indique "Ce crochet est appelé lors de l'initialisation d'un thème." Cela signifie, pour moi, que le crochet doit être appelé lorsqu'il est activé. Je comprends cependant ce que vous dites. Terriblement trompeur.
Aaron Wagner

5
init !== activation. Normalement, vous appelez __construct()fonction en php également une initfonction. Cela signifie: initialiser l'instance.
kaiser

Le ticket trac a 7 ans et ne semble pas être réparé!
numediaweb

4

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

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

Une meilleure solution, dans la même veine, est celle-ci . Les deux utilisent essentiellement le switch_themecrochet.


Selon les commentaires OP et le ticket Trac lié - after_switch_themele crochet est-il requis?

Cela passe le nom de l'ancien thème en argument. Cependant, si c'est dans votre functions.php(ce qu'il devrait être ...), le rappel ne se déclenchera que lorsque votre thème sera 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_themene 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
}

Aucune de ces options n'a fonctionné pour moi. switch_themene fonctionnait qu'après avoir désactivé le thème. Cependant, after_switch_themea parfaitement fonctionné.
Aaron Wagner

1
réponse mise à jour :)
Stephen Harris

switch_theme ne semble plus fonctionner. Je pense que c'est à cause des changements dans l'activation de 3.4. Au moins ça ne marche pas pour moi.
Jake

after_switch_theme fonctionne parfaitement. Cela devrait être la réponse acceptée. J'utilise WP 3.5
Ardee Aram

0

Une meilleure solution pourrait être d'utiliser le script d'activation du plugin de Thomas Griffin . Cela invitera les utilisateurs à installer les plugins de votre choix lorsque le thème est utilisé. Je pense que c'est un excellent moyen de séparer le plugin du thème, et de continuer à l'utiliser.

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

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



0

Votre meilleure solution serait maintenant d'utiliser le switch_themehook et de filtrer l'argument '$ theme' passé pour voir s'il s'agit bien de lui, sinon de le retourner;

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

   // Your code here
}

add_action('switch_theme', 'nw_update_network');
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.