Ich schreibe ein Plugin, das (unter anderem) einen benutzerdefinierten Beitragstyp instanziiert. Es ist ein Multisite-Plugin und befindet sich im Verzeichnis mu-plugins .
Was ist in dieser Situation die beste Vorgehensweise für den Umgang mit flush_rewrite_rules () ? Für ein "normales" Plugin würden Sie dies in einem Aktivierungs-Hook tun - was für ein Plugin, das unbedingt verwendet werden muss, nicht möglich ist, da diese Hooks nicht verfügbar sind.
Da dies nach der Registrierung des benutzerdefinierten Beitragstyps ein "einmaliges" Ereignis sein soll, wäre es sinnvoll, in meiner Klasse, die das CPT registriert, so etwas zu tun:
private function check_flush_my_CPT() {
global $wp_rewrite;
if ( !get_option('my_plugin_firstrun') ) {
$wp_rewrite->init();
$wp_rewrite->flush_rules(true);
update_option('my_plugin_firstrun', 'yes');
}
}
public function register_my_CPT() {
// do all the CPT setup steps for the $args array...
register_post_type('my_CPT', $args);
$this->check_flush_my_CPT();
}
add_action( 'init', array(&$this, 'register_my_CPT' ) );
Die CPT-Registrierung erfolgt also bei jeder Init-Aktion. Wenn ich dieses Recht habe, erfolgt das Löschen der Umschreiberegeln nur einmal. Immer .
Bin ich auf dem richtigen Weg?
(bearbeiten): Ich habe es gerade versucht; Mein CPT gibt einen 404 nicht gefundenen Fehler aus, daher funktionieren die Umschreibregeln nicht :-(
(Bearbeiten # 2): Ich habe die Lösung für den Zugriff auf die globale Variable ausprobiert, wie in dieser Frage gezeigt: Wie werden Umschreibregeln auf mehreren Standorten zuverlässig gelöscht? - Ich werde mein Codebeispiel oben aktualisieren, um dies zu zeigen. Leider wird beim Laden eines CPT immer noch ein 404-Fehler angezeigt. Ich sehe, dass die Umschreiberegeln in der Datenbank gespeichert werden. Es scheint nur, dass sie nicht verwendet werden. Ich bin verloren.
Antworten:
Die
flush_rewrite_rules
Funktion ist in einigen Kontexten zuverlässig, z. B. bei einem Thema oder einem Plugin, das auf Hooks basiert, aber ich bin mir nicht sicher, ob sie für a funktioniertmu-plugin
Meine Aussage basiert auf der Tatsache, dass WordPress auf diese Weise initialisiert wird:
wp-settings.php
Datei aufdo_action( 'muplugins_loaded' );
Hook auf, hier wird Ihr Plugin initialisiert$GLOBALS['wp_rewrite'] = new WP_Rewrite();
hier auf, die Methodeflush_rules
ist initialisiert und ab sofort verfügbardo_action( 'setup_theme' );
heißt und ich wette mein ganzes Geld, dass an diesem Haken derflush_rewrite_rules
Wille funktioniertLösung?
Persönlich finde ich das Löschen der Option rewrite_rules zuverlässig.
oder
Wann immer WordPress fehlt
rewrite_rules
, baut es sie wieder auf, dies ist auch das, was dieflush_rules
Methode tut.Es gibt Punkte im Ausführungsablauf von WordPress, an denen solche Funktionen nicht verfügbar sind. Selbst im Kern von WordPress habe ich diese Aussage gefunden
Das einzige Problem wäre die Leistung. Tun Sie dies nicht bei jeder Anfrage, da es schwierig ist, sie wieder aufzubauen. Wie ich sehen kann, möchten Sie sie erst beim ersten Anruf spülen, und das ist gut so.
PS: Ich bin kein so selbstbewusster Fan, aber ich habe auch vor langer Zeit einen Artikel darüber geschrieben und ich denke, dass er immer noch dafür steht
quelle
Wenn Ihr Mu-Plugin Optionen hat, würde ich den Flush direkt nach dem Update setzen:
quelle