WordPress : Exécutez le bloc de code dans functions.php UNIQUEMENT lorsque le thème est activé. Utiliser register_activation_hook ?
J’ai un code de configuration spécifique pour mon thème que je ne veux traiter que lorsque le thème est activé pour la première fois. J’avais l’impression que je pouvais utiliser register_activation_hook pour cela, mais cela ne semble pas fonctionner.
Exemple…
Dans mon fichier functions.php, je souhaite que la fonction doThemeSetup() ne s’exécute qu’à l’activation du thème et à aucun autre moment…
function doThemeSetup(){
//stuff here only runs once, when theme is activated
}
register_activation_hook(__FILE__, 'doThemeSetup');
MISE À JOUR : depuis la publication de cette question, j’ai constaté que register_activation_hook n’est disponible que pour les plugins et non pour les thèmes.
J’ai trouvé un moyen de faire une action similaire dans les thèmes mais j’obtiens des résultats incohérents:
if ( is_admin() && isset($_GET['activated'] ) && $pagenow == 'themes.php' )
{
//do something
}
Le code ci-dessus ne semble pas s’exécuter lorsque le thème est activé pour la première fois, mais plutôt lorsque le thème est remplacé par un autre thème.
Solution n°1 trouvée
/**
* Install script to create databasetables and then insert default data.
* And inserting defautl theame settings.
* Only run if theme is being activated for the first time.
*/
$flag = get_option('first_time_theme_activation_check');
if ( $flag == false && is_admin())
{
// put your code to run when theme is activated at first time by admin
// update option at last
update_option('first_time_theme_activation_check', 'true');
}
Solution n°2 trouvée
C’est plus une solution de contournement qu’une solution, mais si tout le reste échoue, vous pouvez l’essayer :
<?php
if (get_option('themename_installed') != 'true'){
if (doThemeSetup()){
add_option('themename_installed','true');
}
}
?>
De cette façon, doThemeSetup n’est exécuté qu’une seule fois.
0 commentaire