Chaque exemple d’ajout de règles rewrtie ressemble à
function addsomerule() {
add_rewrite_rule(some regex,some parse result);
}
add_action('init','addsomerule');
Cela ne calcule pas pour moi. car les ajouts aux règles de réécriture de ce type sont ignorés si l’option rewrite_rule
n’est pas vide (c’est-à-dire qu’il n’ya pas eu de règles de réécriture vides pour le moment), quel est donc l’intérêt de l’accrocher là?
Il semble beaucoup plus logique de l’accrocher à admin_init
car écrire dans la base de données, et donc réécrire le flush, ne devrait se produire que du côté de l’administrateur.
N'existe-t-il pas une action plus logique pour utiliser cette fonction ou s'agit-il d'init ou d'utiliser le filtre de niveau inférieur?
Vous avez raison de dire que sans règles vides, add_rewrite_rule()
ne fonctionne pas et que la raison en est que WordPress récupère les règles de la base de données et que add_rewrite_rule()
le fait not ajoute la règle à la base de données.
Cependant, il est impossible d'utiliser admin_init
et la raison en est que admin_init
est trop tard.
WordPress appelle parfois flush_rewrite_rules()
sur les écrans d'administration avant que admin_init
ne soit déclenché (par exemple ici ), et pour être sûr que la règle est ajoutée lorsque WordPress appelle flush_rewrite_rules()
, vous devez utiliser init
(ou peut-être wp_loaded
).
Quelque chose comme ça pourrait marcher:
function addsomerule() {
if ( is_admin() ) add_rewrite_rule(some regex,some parse result);
}
add_action( 'init','addsomerule' );
Cela garantit que la règle n'est ajoutée que lors des requêtes de l'administrateur.
Cependant, l'instruction if
qui appelle une fonction entraîne un coût (faible) en termes de performances, et si l'on considère que le add_rewrite_rule
n'est pas très coûteux (il écrit uniquement une valeur dans un tableau global et ne touche pas db), alors probablement il ne vaut pas la peine d'ajouter cette condition.
De plus, vous n'avez pas toujours le contrôle sur tout le code utilisé par votre site. Si some plugin appelle flush_rewrite_rules()
sur des demandes frontales, votre règle est perdue car elle n’a été ajoutée que sur le backend.
Pour toutes ces raisons, ajouter des règles de réécriture sur init
sans autre vérification est probablement la bonne chose à faire: cela évite tout problème et les faibles coûts qu’il ajoute aux requêtes frontales sont à peu près inutiles et perdus au moment du démarrage de WordPress.