Wordpress: отображение сообщения об ошибке - ловушка admin_notices завершается с ошибкой на wp_insert_post_data или publish_post
m добавление проверки, поэтому, если сообщение относится к определенной категории, для него необходимо установить определенные пользовательские поля.
Это должно быть легко зацепитьwp_insert_post_data
а такжеadmin_notices
, но есть перенаправление, которое вызываетadmin_notices
обратный вызов, чтобы исчезнуть.
Итак, я создал хак, который использует Session для хранения моего сообщения об ошибке через редирект:
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");
Проблема с этим решением заключается в том, чтонемногокак сеанс недоступен при звонкеsession_admin_notice
, который имеет легкий (нопсих) решение:
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');
Вопрос в том, почему я должен пройти через все это безумие, чтобы выдать сообщение об ошибке?
Что я делаю неправильно?