Lege die Regeln für das Aktualisieren der Optionen mit der Einstellungs-API nach oben

Ich arbeite an einem Plugin, wo ich benutzerdefinierte URL-Umschreibungen aktivieren muss. Ich möchte die Bearbeitung von benutzerdefinierten URLs über die Einstellungs-API aktivieren, also habe ich im Grunde genommen alles getan, was benötigt wird, um Optionen zu validieren und zu aktualisieren. Die Option “URL neu schreiben” wurde bereits bei der Aktivierung des Plugins beim Registrieren des benutzerdefinierten Post-Typs übergeben. Daher muss ich diese Option nach der Aktualisierung der Option ändern. Das Hauptproblem, das existiert, ist, wie flush_rewrite_rules () nach der validation, dass der Wert der Umschreib-URL tatsächlich geändert wurde.

Ich registriere benutzerdefinierten Post-Typ bei der Aktion init und die validation, über die ich schreibe, ist auf register_setting in der Aktion admin_init gesetzt. Die validationsfunktion wird einmal ausgeführt, nachdem Änderungen an den Einstellungen gespeichert wurden. Anschließend wird die Anfrage zurück zur Options-Seite geleitet.

Ich habe es mit dem folgenden Code versucht, aber die URLs ändern sich erst nach dem zweiten Update (ich muss zweimal auf die Schaltfläche Änderungen speichern klicken):

function my_plugin_name_validate_options($args) { foreach($args as $key => $value) { switch ($key) { case 'rewrite_url': flush_rewrite_rules(); break; case 'other': // code for other cases... too long to post here break; } } } 

Dieser Code ist nur ein Beispiel, wo ich die Umschreibregeln lösche, es wird nicht wirklich benutzt, aber ich validiere jedes Optionsfeld so.

Die Frage ist, wo sollte ich flush_rewrite_rules () ausführen, um Änderungen nach der validation / Aktualisierung von Optionen zu aktualisieren?

Solutions Collecting From Web of "Lege die Regeln für das Aktualisieren der Optionen mit der Einstellungs-API nach oben"

Ich registriere benutzerdefinierten Post-Typ bei der Aktion init und die validation, über die ich schreibe, ist auf register_setting in der Aktion admin_init gesetzt.

Dies ist der Schlüssel zu Ihrem Problem. Sie registrieren den benutzerdefinierten Post-Typ und vermutlich richten Sie die Umschreibungsregeln für diese Registrierung ein.

Wenn Sie flush_rewrite_rules() aufrufen, werden die Regeln zu diesem Zeitpunkt dann flush_rewrite_rules() . In Ihrer validationsfunktion haben Sie also die neue Einstellung für Ihre Umschreibungsregeln noch nicht gespeichert, noch haben Sie die Registrierung des benutzerdefinierten Posttyps mit der neuen Regel aktualisiert.

Hinweis: Ein callback für die Bereinigung / validation wurde mithilfe von register_setting Läufen hinzugefügt, bevor die Einstellungen in der database gespeichert werden und nicht danach.

Grundsätzlich müssen Sie mit der Änderung besser umgehen. Sie können dies in der validationsfunktion tun, müssen aber möglicherweise zuerst den bereits registrierten CPT ändern. Im Grunde registrieren Sie es erneut mit den Änderungen. Wenn Sie die Umschreibregeln dann leeren, sollten Sie sie mit Ihren Änderungen korrekt neu erstellen.

Der Grund, warum dies beim zweiten Versuch für Sie funktioniert, ist die Art und Weise, wie Sie speichern und löschen. Sie spülen das erste Mal, aber nichts ändert sich in den Rewrite-Regeln. Dann wird Ihre Option gespeichert. Beim nächsten Ladevorgang wird der CPT mit Ihren neuen Informationen registriert. Ihre neue Regel ist also vorhanden, aber Sie haben noch nicht geleert. Das erneute Speichern führt zu einem zweiten Flush, und nun wird Ihre Regel wirksam.