Ich habe ein seltsames Problem damit, dass Umschreiberegeln nicht richtig geleert werden.
Ich habe versucht, flush_rewrite_rules();
und zu verwenden flush_rewrite_rules(true);
.
Ich habe auch versucht, $wp_rewrite
mit $wp_rewrite->flush_rules();
und zu globalisieren$wp_rewrite->flush_rules(true);
Keiner von beiden scheint die Umschreiberegeln korrekt zu leeren. Diese Aufrufe leeren tatsächlich die Umschreiberegeln, wenn sie aufgerufen werden. Woher weiß ich das? Verwenden der Lösung zum Debuggen zum Löschen von Umschreiberegeln .
Derzeit habe ich Regeln für die Aktivierung und Deaktivierung von Plugins neu geschrieben. Keine Probleme da.
Ich habe eine Seite mit den Einstellungen für die Plugin-Verwaltung, auf der Benutzer das Plugin konfigurieren können. Einige der Einstellungen passen die Permalink-Struktur an, sodass die Umschreiberegeln auf der Seite "Einstellungen speichern" der Plugin-Verwaltungseinstellungen gelöscht werden müssen. (Verwendet den Standard update_option();
) zum Speichern von Einstellungen.
Ich möchte darauf hinweisen, dass abhängig von den angegebenen Einstellungen benutzerdefinierte Beitragstypen erstellt werden, die den benutzerdefinierten Einstellungen entsprechen. Daher müssen die Umschreiberegeln sofort nach dem Speichern der Einstellungen gelöscht werden. Hier funktionieren die Dinge nicht richtig.
Die obige Link-Lösung zum Debuggen von Umschreiberegeln, die von bereitgestellt @toscho
wird, zeigt an, dass Tonnen von Umschreiberegeln gelöscht werden. Wenn Sie jedoch das einzelne Element des benutzerdefinierten Beitragstyps oder sogar das Archiv des benutzerdefinierten Beitragstyps besuchen, wird jedes als 404-Fehler zurückgegeben.
Der benutzerdefinierte Beitragstyp wird korrekt und entsprechend registriert. Ich weiß mit Sicherheit, dass das nicht das Problem ist.
Sofort nach dem Einfügen der Plugin-Verwaltungsseite Einstellungen speichern. Die benutzerdefinierten Beitragstypen werden erstellt, die Permalink-Struktur wird angepasst und es wird versucht, alle Umschreiberegeln zu löschen.
Die benutzerdefinierten Beitragstypen werden dann immer geladen und init
wie gewohnt geladen .
Aus irgendeinem Grund werden die Umschreiberegeln nicht richtig geleert, da, wie ich bereits sagte, beim Besuch einzelner oder archivierter Abschnitte des benutzerdefinierten Beitragstyps 404 Fehler zurückgegeben werden.
Der seltsame Teil: Wenn ich nur die Einstellungsseite für Administrationspermalinks besuche und dann zum Front-End zurückkehre, um entweder einzelne oder Archivabschnitte des benutzerdefinierten Beitragstyps anzuzeigen, funktionieren sie auf magische Weise wie erwartet.
Was macht diese Einstellungsseite für Administrationspermalinks, die ich nicht mache, damit die Umschreiberegeln ordnungsgemäß geleert werden können und meine nicht?
Ich meine, als temporäre Lösung leite ich den Benutzer nach dem Speichern der Seite mit den Einstellungen für die Plugin-Verwaltung auf die Seite mit den Einstellungen für Administrationspermalinks um, aber dies ist keine ideale Lösung. Ich würde es vorziehen, wenn die Umschreiberegeln im Code meines Plugins ordnungsgemäß gelöscht werden.
Gibt es einen bestimmten Punkt in WordPress, an dem das Löschen der Umschreiberegeln nicht mehr ALLE Regeln löscht?
admin_menu
- Die Seite mit den Plugin-Einstellungen wurde zur WordPress-Administration hinzugefügt.
add_options_page()
- Die Seite mit den Plugin-Einstellungen wurde im Menü Einstellungen hinzugefügt.
Die Einstellungsseite wird im Rückruf für gerendert add_options_page()
. Hier wird auch das $_POST
Aktualisieren der Plugin-Einstellungen und das Löschen von Umschreiberegeln verarbeitet.
Da dies bereits eine lange Frage ist, wäre ich bereit, Codeblöcke (falls dies hilfreich ist) in einem externen Link bereitzustellen, um die Erstellung einer gültigen Antwort zu unterstützen.
init
die die Beitragstypen registriert. Ich dachte mir, die Seiteneinstellungen würden gespeichert und die Seite würde neu geladen ... und dann den init
Hook erneut ausgelöst, um die erforderlichen Beitragstypen zu registrieren. Also dachte ich, dass die Beitragstypen bereits geladen sein würden, und alles, was ich tun musste, war, die Option zu aktualisieren und dann die Umschreiberegeln von meiner Plugin-Einstellungsseite zu löschen. Ich werde eine Antwort veröffentlichen, wie ich eine Lösung gefunden habe.
flush_rewrite_rules
, wodurch dierewrite_rules
Option gelöscht und neu generiert wird. Sie können die Datei öffnenwp-admin/options-permalinks.php
und sehen, wo dies geschieht. Da durch diesen Vorgang nur die gesamte Option gelöscht wird, können Regeln nicht teilweise gelöscht werden.