add_rewrite_rule, Plugin-Aktivierung und Plugin-Deaktivierung

Ich sehe eine Menge Beispiel, wie man add_rewrite_rule in Ihrem init Hook add_rewrite_rule , z

 function add_my_custom_rewrite() { add_rewrite_rule(... } add_action('init', 'add_my_custom_rewrite'); 

und in deinem Plugin-Aktivierungs-Hook,

 register_activation_hook( __FILE__, 'my_plugin_activation'); function my_plugin_activation() { add_my_custom_rewrite(); flush_rewrite_rules(false); } 

Also, wenn Ihr Plugin aktiviert ist, werden Sie neu geschrieben in db, scheint zu arbeiten, aber, es gibt ein Hauptproblem

Es triggers immer noch nicht das Problem, das flush_rewrite_rules zu entfernen, wenn Leute dein Plugin deaktivieren, du kannst flush_rewrite_rules nicht einfach in deinen Deaktivierungs-Hook setzen, da init bereits vor dem Deaktivieren aufgerufen wurde und es keine Möglichkeit gibt, existierende Rewrite-Regeln zu entfernen

 register_deactivation_hook( __FILE__, 'my_plugin_deactivation'); function my_plugin_deactivation() { flush_rewrite_rules(false); // will not work, since init (hence add_my_custom_rewrite) was already called at this point } 

Gibt es einen besseren Weg, den Konflikt zwischen add_rewrite_rule, Plugin-Aktivierung und Plugin-Deaktivierung zu lösen?

Solutions Collecting From Web of "add_rewrite_rule, Plugin-Aktivierung und Plugin-Deaktivierung"

Das Problem beim Aufruf von flush_rewrite_rules() besteht darin, dass die Regeln sofort neu flush_rewrite_rules() , während die Haken des Plugins noch aktiv sind.

Was ich normalerweise tue, weil es der einfachste Weg zum Erfolg ist, ist die Option rewrite_rules bei Aktivierung / Deaktivierung zu löschen. Die Regeln werden dann beim nächsten Seitenladen statt dem aktuellen erneut generiert:

 register_deactivation_hook( __FILE__, 'my_plugin_deactivation'); function my_plugin_deactivation() { delete_option( 'rewrite_rules' ); } 

Eine bessere Lösung ist es, Ihre Regeln vor dem Leeren aus dem Stack zu entfernen, aber das ist ein bisschen mühsam (siehe https://core.trac.wordpress.org/ticket/29118 ).