Ich habe eine Funktion, die ein benutzerdefiniertes Feld für einen Beitragstyp definiert. Angenommen, das Feld ist "subhead".
Wenn der Beitrag gespeichert wird, möchte ich eine Überprüfung der Eingabe durchführen und bei Bedarf eine Fehlermeldung auf dem Bildschirm zum Bearbeiten des Beitrags anzeigen. So etwas wie:
// Handle post updating
function wpse_update_post_custom_values($post_id, $post) {
// Do some checking...
if($_POST['subhead'] != 'value i expect') {
// Add an error here
$errors->add('oops', 'There was an error.');
}
return $errors;
}
add_action('save_post','wpse_update_post_custom_values',1,2);
Ich versuche, dies mit der Aktion save_post zu verknüpfen, aber ich kann nicht herausfinden, wie ich mit Fehlern umgehen soll. Es scheint, dass kein Fehlerobjekt an die Funktion übergeben wurde, und wenn ich mein eigenes WP_Error-Objekt erstelle und es zurückgebe, wird es von keinem der Mechanismen beachtet, die Fehler auf der Nachbearbeitungsseite ausspucken.
Ich habe derzeit eine On-Page-Fehlermeldung in meiner benutzerdefinierten Meta-Box, aber dies ist weniger als ideal - ich hätte lieber einen großen, roten Fehler oben, wie er normalerweise in WP angezeigt wird.
Irgendwelche Ideen?
AKTUALISIEREN:
Basierend auf der Antwort von @Denis habe ich ein paar verschiedene Dinge ausprobiert. Das Speichern von Fehlern als global hat nicht funktioniert, da Wordpress während des Prozesses save_post eine Umleitung durchführt, die das globale Element beendet, bevor Sie es anzeigen können.
Am Ende habe ich sie in einem Metafeld gespeichert. Das Problem dabei ist, dass Sie sie löschen müssen oder sie nicht verschwinden, wenn Sie zu einer anderen Seite navigieren. Deshalb musste ich dem admin_footer eine weitere Funktion hinzufügen, die nur die Fehler löscht.
Ich hätte nicht erwartet, dass die Fehlerbehandlung für etwas so Häufiges (Aktualisieren von Posts) so umständlich wäre. Fehlt mir etwas Offensichtliches oder ist dies der beste Ansatz?
// Handle post updating
function wpse_5102_update_post_custom_values($post_id, $post) {
// To keep the errors in
$errors = false;
// Do some validation...
if($_POST['subhead'] != 'value i expect') {
// Add an error here
$errors .= 'whoops...there was an error.';
}
update_option('my_admin_errors', $errors);
return;
}
add_action('save_post','wpse_5102_update_post_custom_values',1,2);
// Display any errors
function wpse_5102_admin_notice_handler() {
$errors = get_option('my_admin_errors');
if($errors) {
echo '<div class="error"><p>' . $errors . '</p></div>';
}
}
add_action( 'admin_notices', 'wpse_5102_admin_notice_handler' );
// Clear any errors
function wpse_5102__clear_errors() {
update_option('my_admin_errors', false);
}
add_action( 'admin_footer', 'wpse_5102_clear_errors' );
update_option('my_admin_errors', false);
unmittelbar nach der if-Anweisung am Ende von auszuführen wpse_5102_admin_notice_handler()
?
admin_footer
Haken loswerden, wenn Sie die Fehler am Ende Ihrer Benachrichtigungsfunktion beseitigen. Vereinfacht die Dinge nur ein bisschen.