it-swarm.com.de

Wann sollte aus Sicherheitsgründen add_rewrite_rule aufgerufen werden?

Bei Projekten, in denen ich mehrere Plugins kombiniere, die alle add_rewrite_rule und flush_rewrite_rules an verschiedenen Stellen verwenden, stoßen ich auf Situationen. Wie wir alle wissen, ist das Aufrufen von flush_rewrite_rules bei jedem Seitenaufruf eine schlechte Sache .

Das Problem tritt auf, wenn Plugin A noch keine Rewrite-Regeln hinzugefügt hat, Plugin B jedoch flush_rewrite_rules aufruft. Plugin A ist ein guter Bürger und ruft flush_rewrite_rules nicht auf, es sei denn, es muss und daher gibt es jetzt keine Umschreiberegeln mehr.

Ich habe nach einer Aktion gesucht, die aufgerufen wird, bevor die Regeln von flush_rewrite_rules zusammengestellt werden. Diese Aktion kann ich für meine add_rewrite_rule-Aufrufe verwenden, um sicherzustellen, dass alle Regeln vorhanden sind, bevor sie kompiliert werden. Ich habe jedoch keine gefunden. Irgendwelche Vorschläge?

3
Simon Wheatley

Die einfachste Lösung besteht darin, Ihre Add-Aufrufe an die letzte Aktion anzuhängen, die ausgelöst wird, bevor die Regeln während des Flush-Vorgangs neu erstellt werden.

Der erste Teil des Spülvorgangs besteht darin, die Option rewrite_rules zu löschen. In diesem Fall werden die folgenden Aktionen ausgelöst:

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

Hinweis: Wenn es in der Datenbank keine Option rewrite_rules gibt, werden diese Aktionen nicht ausgelöst. Sie müssen daher auch sicherstellen, dass Ihre Regeln registriert werden, wenn jemand get_option ('rewrite_rules') aufruft und eine leere Zeichenfolge zurückgibt - es gibt ähnliche Filter in get_option können Sie dafür verwenden.

2
Peter Westwood