Comment vider les règles sur l'activation ou la désactivation du thème uniquement?
5 réponses
- votes
-
- 2013-10-31
Bien que les solutionsproposéesicifonctionnenttoujours,WordPress a évolué depuiset fournitmaintenant (depuis 3.3,je crois) des hooks directspour l'activation duthème.
after_switch_theme
se déclenchera lors de l'activation duthèmeetswitch_theme
avant de désactiver un ancienthème.La réponse àjourest donc:
function reflush_rules() { global $wp_rewrite; $wp_rewrite->flush_rules(); } add_action( 'after_switch_theme', 'reflush_rules' );
While the solutions provided here do still work, WordPress has evolved since and does now (since 3.3, I believe) provide direct hooks for theme activation.
after_switch_theme
will fire on theme activation andswitch_theme
before deactivating an old theme.Hence the up-to-date answer is:
function reflush_rules() { global $wp_rewrite; $wp_rewrite->flush_rules(); } add_action( 'after_switch_theme', 'reflush_rules' );
-
- 2010-10-21
ce code (extrait du commentaire d'Ozhici avec unpetit ajout)peut vous aider.
function reflush_rules() { if ( is_admin() && isset($_GET['activated'] ) && $pagenow == "themes.php" ) { global $wp_rewrite; $wp_rewrite->flush_rules(); } } add_action('init', 'reflush_rules');
<↓edit:
ajoutez cettefonction sur votre
functions.php
.Cettefonctionne sera chargée que lorsque lethèmeest activé (le seulmoment où$_GET['activated']
est défini).this code (taken from Ozh's comment here with small addition) may help you.
function reflush_rules() { if ( is_admin() && isset($_GET['activated'] ) && $pagenow == "themes.php" ) { global $wp_rewrite; $wp_rewrite->flush_rules(); } } add_action('init', 'reflush_rules');
edit:
add this function on your
functions.php
. This function will only loaded when theme activated (the only time$_GET['activated']
is set). -
- 2010-10-21
Jene suispas sûr du vidage lors de la désactivation,mais l'activationest assez simple.
Dans votrefichier
functions.php
,configurez un code comme celui-ci:function flush_rules_on_activation() { global $wp_rewrite; $is_installed = get_option('theme_installed'); if(!$is_installed) { $wp_rewrite->flush_rules(); add_option('theme_installed', true); } } add_action('init', 'flush_rules_on_activation');
Cela s'exécutera à chaquefois,mais les règlesne seront vidées qu'une seulefois car vous avez défini unindicateur dans votretable d'optionspour éviter de les vider à chaquefois.
Not sure about flushing on deactivation, but activation is pretty easy.
In your
functions.php
file, set up some code like the following:function flush_rules_on_activation() { global $wp_rewrite; $is_installed = get_option('theme_installed'); if(!$is_installed) { $wp_rewrite->flush_rules(); add_option('theme_installed', true); } } add_action('init', 'flush_rules_on_activation');
This will run every time, but the rules will only be flushed once because you set a flag in your options table to prevent flushing them every time.
-
Ce code atuétoute lapage.That code killed the whole page.
- 0
- 2010-10-21
- jnthnclrk
-
Je viens de letester surmonpropre site ... çan'a rientué.Just tested it on my own site ... it didn't kill anything.
- 0
- 2010-10-21
- EAMann
-
Probablement uneerreur demon côté.Bien queje préfère la solution Ozh.Probably an error on my side. Although I prefer the Ozh solution.
- 0
- 2010-10-21
- jnthnclrk
-
Jepréfère aussi la solution d'Ozh ... la seule raisonpour laquellej'aiposté ceci étaiten réponse à votre commentaire "Non,çan'apasfonctionné".I prefer Ozh's solution as well ... the only reason I posted this was in response to your "Nope, that didn't work" comment.
- 0
- 2010-10-21
- EAMann
-
- 2010-10-22
J'ai dûmodifier la réponse debangbambangpour que celafonctionne.
Le code doit être:
add_action('init', 'reflush_rules'); function reflush_rules() { $pagenow = $_SERVER['SCRIPT_NAME']; if ( is_admin() && isset($_GET['activated'] ) && $pagenow == "/wp-admin/themes.php" ) { global $wp_rewrite; $wp_rewrite->flush_rules(); } }
I had to modify bangbambang's answer to get this to work.
The code should be:
add_action('init', 'reflush_rules'); function reflush_rules() { $pagenow = $_SERVER['SCRIPT_NAME']; if ( is_admin() && isset($_GET['activated'] ) && $pagenow == "/wp-admin/themes.php" ) { global $wp_rewrite; $wp_rewrite->flush_rules(); } }
-
-
Celafonctionne,mais c'estinefficace,vousne devriez doncpas l'appeler à chaque `init`.This works, but it is inefficient, so you should not call it on every `init`.
- 0
- 2010-10-21
- Jan Fabry
-
OK,supprimé auprofit d'un hookinit.Jene comprendspas vraimentpourquoi,maisje prends quandmêmeton conseilOK, deleted in favour of an init hook. Don't really understand why, but taking your advice anyway.
- 0
- 2010-10-21
- jnthnclrk
-
Les règles de vidage sont clairement un élémentimportant de la création dethèmes avec destypes depublicationpersonnalisés.Voir ici et ici .
Quelqu'un a-t-il unexemple de code sur lafaçon de vider les règles defunctions.php?
Je suis unpeu surpris que celane soitpas couvert dans lespages detype demessagepersonnalisé du Codex.
Mise àjour:j'aiessayé d'ajouter ceci àfunctions.php,mais celan'apasfonctionné: