Wordpress: Anzeige einer Fehlermeldung - Hook admin_notices schlägt bei wp_insert_post_data oder publish_post fehl
Ich füge eine Validierung hinzu. Wenn sich ein Beitrag in einer bestimmten Kategorie befindet, müssen bestimmte benutzerdefinierte Felder festgelegt werden.
Dies sollte ein einfaches Einhängen seinwp_insert_post_data
undadmin_notices
, aber es gibt eine Umleitung, die das verursachtadmin_notices
Rückruf zum Verschwinden.
OK - Also habe ich einen Hack erstellt, der die Sitzung verwendet, um meine Fehlermeldung über die Umleitung zu speichern:
function set_post_pending($data, $postarr) {
// If it's not valid...
$error = "You are missing some Custom Fields.";
$_SESSION['admin_notices'] = $error;
$data['post_status'] = 'pending';
return $data;
}
add_filter('wp_insert_post_data', 'set_post_pending',1,2);
function session_admin_notice() {
if($out = $_SESSION['admin_notices']) {
$_SESSION["admin_notices"] = "";
echo $out;
}
return false;
}
add_action('admin_notices', "session_admin_notice");
Das Problem mit dieser Lösung ist dasetwaswie die Sitzung beim Anrufen nicht verfügbar istsession_admin_notice
, das hat ein leichtes (aberverrückt) Lösung:
public static function fix_session_bs() {
// TODO: Why do I have to do this?
if(!session_id() && $_COOKIE["PHPSESSID"]) {
session_start($_COOKIE["PHPSESSID"]);
}
}
add_action('admin_init', 'fix_session_bs');
Die Frage ist: Warum muss ich diese ganze Verrücktheit durchmachen, um eine Fehlermeldung zu werfen?
Was mache ich falsch?