У мене є функція, яка визначає спеціальне поле для типу публікації. Скажіть, що поле "підзаголовок".
Коли повідомлення збережено, я хочу зробити деяку перевірку на вході та, якщо потрібно, відобразити повідомлення про помилку на екрані редагування публікації. Щось на зразок:
// 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);
Я намагаюся підключити це до дії save_post, але я не можу зрозуміти, як впоратися з помилками. Не здається, що об’єкт помилки передається у функцію, і якщо я створити власний об'єм WP_Error і повернути його, він не буде дотриманий будь-яким механізмом, який вигадує помилки на сторінці редагування публікації.
Наразі у моєму користувальницькому мета-вікні є повідомлення про помилку на сторінці, але це менше, ніж ідеально - я б швидше мав велику, червону помилку вгорі, як, наприклад, WP.
Будь-які ідеї?
ОНОВЛЕННЯ:
На основі відповіді @Denis я спробував кілька різних речей. Збереження помилок як глобальних не спрацювало, тому що Wordpress виконує перенаправлення під час процесу save_post, який вбиває глобальну інформацію, перш ніж ви зможете її відобразити.
Я закінчив зберігати їх у метаполі. Проблема в цьому полягає в тому, що вам потрібно їх очистити, інакше вони не зникнуть, коли ви перейдете на іншу сторінку, тому мені довелося додати ще одну функцію, приєднану до адмін_фотера, що просто очищає помилки.
Я б не очікував, що обробка помилок для чогось такого поширеного (оновлення дописів) буде цим незграбним. Я пропускаю щось очевидне чи це найкращий підхід?
// 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);
одразу після оператора if в кінці wpse_5102_admin_notice_handler()
?
admin_footer
гачка, якщо ви очистите помилки наприкінці функції обробника повідомлень. Просто спрощує речі.