web-dev-qa-db-fra.com

Quand appeler `add_rewrite_rule` pour des raisons de sécurité

Je commence à rencontrer des situations sur des projets où je combine plusieurs plugins qui utilisent tous add_rewrite_rule et flush_rewrite_rules à des moments différents. Comme nous le savons tous, , appeler flush_rewrite_rules à chaque chargement de page est une mauvaise chose .

Le problème se pose lorsque le plug-in A n'a pas encore ajouté ses règles de réécriture, mais que le plug-in B appelle flush_rewrite_rules. Le plugin A est un bon citoyen, et n'appelle pas flush_rewrite_rules sauf si c'est nécessaire et donc maintenant c'est les règles de réécriture ne sont plus présentes.

Je recherchais une action appelée avant que les règles ne soient assemblées par flush_rewrite_rules, que je peux utiliser pour mes appels add_rewrite_rule afin de m'assurer que toutes les règles sont présentes avant d'être compilées, mais je n'en ai pas trouvé. Aucune suggestion?

3
Simon Wheatley

La solution la plus simple consiste à accrocher vos ajouts à la dernière action déclenchée avant la reconstruction des règles pendant le processus de vidage.

La première partie du processus de vidage consiste à supprimer l'option rewrite_rules. Lorsque cela se produit, les actions suivantes sont déclenchées:

do_action( 'delete_option', $option );
do_action( "delete_option_$option", $option );
do_action( 'deleted_option', $option );

Remarque: S'il n'y a pas d'option rewrite_rules dans la base de données, ces actions ne sont pas déclenchées. Vous devrez donc également enregistrer vos règles lorsque quelqu'un appellera get_option ('rewrite_rules') et qu'il retournera une chaîne vide. filtres dans get_option que vous pouvez utiliser pour cela.

2
Peter Westwood