it-swarm.com.de

Administratormeldung wird nicht angezeigt

Ich bin neu in der WordPress-Entwicklung und versuche, eine Administratorbenachrichtigung anzuzeigen, wenn der Benutzer beim Speichern eines benutzerdefinierten Beitrags die erforderlichen Felder auslässt. Wenn sie nicht angezeigt wurden, stellte ich fest, dass eine Umleitung stattfindet, und verschob den Code in meine Methode init(). Dabei sollte geprüft werden, ob eine verborgene Eingabe festgelegt ist (was auf ein Speichern hinweist), und anschließend, ob sie angezeigt werden soll. Nach einigem Debuggen befand ich mich in einer sehr verwirrenden Situation. Wenn ich einfach in die Zeile stecke

add_action('admin_notices', 'image_error');

der Administratorhinweis wird jedes Mal wie erwartet angezeigt. Wenn ich es in eine triviale if-Anweisung setze:

if (true) {
  add_action('admin_notices', 'image_error');
}

funktioniert auch wie erwartet. Wenn ich jedoch versuche, einem Codeblock zu folgen, wird der Administratorhinweis nicht angezeigt:

$flag_worked = isset($_POST['post_saved']);
if ($flag_worked) {
    $dumb = 1;
    add_action('admin_notices', 'image_error');
}

Das Durchgehen mit dem Debugger bestätigt, dass $flag_worked tatsächlich wahr ist, der Codeblock eingegeben wird, $dumb auf eins gesetzt wird und die Zeile add_action ausgeführt wird. Der Hinweis wird jedoch nicht angezeigt, wenn diese Anweisung im Wesentlichen dasselbe wie das Experiment if (true) auswerten sollte. Ich verstehe eindeutig etwas Grundlegendes falsch. Kann jemand meinen Fehler erklären und wie ich ihn korrigieren kann? Warum wird der Hinweis nicht angezeigt, wenn die hinzuzufügende Zeile getroffen wird? Ich fühle mich wie ich verrückte Pillen nehme.

1
swilkeni

Die Funktion add_action fügt die Aktion nur einer Warteschlange hinzu, die ausgeführt wird, wenn der entsprechende do_action heißt. Wenn Sie es also zu spät in die Warteschlange stellen, passiert nichts.

Um sicherzugehen, was in Ihrem Fall passiert, müssen Sie die Reihenfolge der Hook-Ausführung sorgfältig prüfen. Das erfordert einen Einblick in Ihr komplettes Setup, einschließlich Plugins und so weiter.

Ich vermute, dass zu dem Zeitpunkt, an dem isset($_POST['post_saved']) wahr ist , do_action ('admin_notices') bereits ausgeführt wird und etwas in die Warteschlange gestellt wird, ist es nutzlos.

Der Weg, dies zu lösen, besteht nicht darin, die Aktion bedingt hinzuzufügen. Fügen Sie immer die Aktion hinzu und fügen Sie den Test in die Funktion ein. So was:

add_action('admin_notices', 'image_error');
function image_error () {
  $flag_worked = isset($_POST['post_saved']);
  if ($flag_worked) {
    echo 'error';
    }
2
cjbj