web-dev-qa-db-fra.com

after_setup_theme est toujours exécuté

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 de l'activation du thème. 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). J'ai prouvé cela 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 évidemment sur les sites où ce thème n'est pas actif, la fonction n'est pas exécutée)

Donc la question est, 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!

11
Aaron Wagner

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 vous éloignez de 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');
}
8
Aaron Wagner

L'action after_setup_theme est destinée à se déclencher à chaque chargement WordPress. Cela fait simplement partie du processus au cours duquel WordPress appelle le système de gabarit, détermine les divers paramètres de configuration du thème, puis poursuit le traitement suivant, tel que la détermination du modèle correct à afficher, etc.

En d’autres termes, le after_setup_theme représente le point où WordPress définit le thème actuel, not le point où le administrateur active et/ou configure le thème actuel.

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

5
Chip Bennett

Malheureusement, il n'y a pas de crochet d'activation de thème. Cependant, un cette question fournit un moyen de contourner ce problème.

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

Une meilleure solution, dans le même sens est-ce . Les deux utilisent essentiellement le hook switch_theme.


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

Cela passe le nom de l'ancien thème en argument. Cependant, si cela se trouve dans votre functions.php (comme il se doit ...), le rappel sera 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_theme ne sera appelé que lorsque votre thème est désactivé.

add_action( 'switch_theme', 'wpse50298_deactivate' );
function wpse50298_deactivate($theme_switching_to){
    // Your theme is being deactivated
}
4
Stephen Harris

Votre meilleure solution serait maintenant d’utiliser switch_theme hook et de filtrer l’argument '$ theme' passé pour voir s’il s’agissait bien de leur actuel, sinon de retourner;

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

   // Your code here
}

add_action('switch_theme', 'nw_update_network');
0
numediaweb

Une meilleure solution consisterait peut-être à utiliser le script d’activation du plugin 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 .

0
Jeff Sebring