Wie soll man add_settings_error auf benutzerdefinierten Menüseiten implementieren?

8

Das Professional WordPress Plugin Development- Buch erklärt ausführlich, wie die Einstellungs-API richtig verwendet wird, und es zeigt auch, wie Menüs und Untermenüs hinzugefügt werden, aber leider enthält es keine zusammengehörigen Beispiele dafür. Obwohl ich es geschafft habe, das meiste zum Laufen zu bringen, kann ich nicht herausfinden, wie add_settings_error auf benutzerdefinierten Menüseiten richtig implementiert wird. Hier ist mein Code:

function settings_main_validate( $input ) {
$valid['text_string'] = preg_replace( '/[^a-zA-Z]/', '', $input['text_string'] );

if ( $valid['text_string'] != $input['text_string'] ) {
    //add_setting_error: $title, $id, $error_message, $class
    add_settings_error( 'fields_main_input', 'texterror', 'Incorrect value entered!', 'error' );
}   

return $valid;
}                  

Die obige Validierung funktioniert hervorragend bei Einstellungen, die mit gerendert werden add_options_page, zeigt jedoch nicht die Einstellungsfehler auf Seiten an, mit denen gerendert wurde add_menu_page.

jnthnclrk
quelle

Antworten:

8

Das Erstellen und Anzeigen von Fehlern / Hinweisen umfasst mehrere Komponenten:

  1. add_settings_error()Aufruf zum Hinzufügen eines Elements zum Stapel (globale $wp_settings_errorsVariable).
  2. settings_errors vorübergehend, wodurch die Fehler erhalten bleiben, damit sie überleben, bewegen Sie sich von Seite zu Seite.
  3. settings_errors()Funktion get_settings_errors()zum Abrufen von Fehlern aus dem Speicher oder vorübergehend und zeigt sie dann an.

Diese funktionieren wie ein Zauber für die Einstellungs-API, sind jedoch leider nicht für die allgemeine Verwendung eingerichtet. Andererseits ist es trivial, das zu umgehen.

Haken settings_errors()zu admin_noticesauf Ihrem Plugin Seite, übergeben Sie den Fehlercode , um es so ist es nur Ihre Sachen zeigt.

Speichern Sie Fehler manuell in settings_errorsTransienten (füllen Sie einfach diese globale Variable hinein).

Da get_settings_errors()in GET-Parametern ( $_GET['settings-updated']) ein Hinweis erwartet wird, dass transient anstelle von Speicher überprüft werden soll, können Sie dies entweder bereitstellen oder Fehler von transient selbst settings_errors()abrufen und diese vor Ihrem Aufruf in einer globalen Variablen speichern .

Aktualisieren

Sie verwandeln dies in ein Chaos mit mehreren Fragen, daher werde ich versuchen, Ihre Bedenken hier anzusprechen.

Die Einstellungs-API funktioniert mit Administrationsseiten, die den Abschnitt "Einstellungen" nicht als Basis verwenden. Ihr eigentliches Problem ist, dass in diesem Fall die Fehler- / Benachrichtigungsmeldung nicht funktioniert.

Zunächst geschieht Folgendes, wenn Sie ein Formular veröffentlichen, das mit der Einstellungs-API eingerichtet wurde:

  1. Daten werden auf einer speziellen options.phpSeite veröffentlicht.
  2. Dort werden Daten per Rückruf bereinigt / validiert.
  3. Alle Fehler / Hinweise, die während der Desinfektion / Validierung aufgetreten sind, werden gesammelt und vorübergehend gespeichert.
  4. Sie werden dorthin zurückgeleitet, wo Sie herkommen .

Wenn Sie jetzt die Administrationsseite laden, wird überprüft, ob diese Seite zum Abschnitt Einstellungen gehört und ob dieser Fall eine winzige options-head.phpDatei enthält, die sich mit dem Abrufen und Anzeigen von Fehlermeldungen befasst.

Das einzige, was auf anderen Seiten "nicht funktioniert", ist dieser letzte Schritt, der trivial ist, um sich einen Überblick über die oben genannten verwandten Funktionen zu verschaffen (ich habe wahrscheinlich zu viele Details zu Transienten behandelt, die Sie für den Basisfall nicht benötigen).

Selten
quelle
Wollen Sie damit sagen, dass die Einstellungs-API nicht wirklich für die Verwendung in Admin-Menüs und Bildschirmen konzipiert ist?
jnthnclrk
@trnsfrmr gut, es ist nicht an mir , zu sagen , ob es war oder nicht entworfen , aber es ist sicherlich nicht eingerichtet für das nativ.
Rarst
Verdammt, das habe ich damals völlig falsch verstanden. Die Einstellungs-API ist also nur für Bildschirme gedacht, die unter dem Menüpunkt Einstellungen angezeigt werden. Im Nachhinein erklärt dies, warum die Verwendung in benutzerdefinierten Menüs so schwierig war.
jnthnclrk
Schade, dass Plugins mit benutzerdefinierten Menüs nicht alle coolen Funktionen der Einstellungs-API zur Verfügung stehen.
jnthnclrk
@trnsfrmr Nun, Sie können immer noch versuchen, es zu nutzen, erfordert nur zusätzlichen Aufwand
Rarst
0

Ein bisschen spät, aber ich habe das gerade durchgemacht. Basierend auf dem OP-Code besteht die beste Lösung darin, diesen Code einzufügen:

function your_admin_notices_action() {
    settings_errors( 'fields_main_input' );
}
add_action( 'admin_notices', 'your_admin_notices_action' );

Dadurch wird die Anzeige der Administratorbenachrichtigung zu den mit add_menu_page gerenderten Administrationsseiten hinzugefügt

Bev
quelle
-1

Einfach hinzufügen

include_once 'options-head.php'; 

Die $ -Funktion meiner benutzerdefinierten Menüseite schien gut zu funktionieren, um die Fehlermeldungen auf benutzerdefinierten Menüseiten anzuzeigen.

James Smartt
quelle