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