ИА
Для себя пока выбрал такой алгоритм (смущает очищение опции ошибок, это по сути каждый раз запрос в базу при загрузке админ страниц, если бы каждый плагин так организовывал, то был бы треш):
//Проверяем поле, устанавливаем ошибку
function validate_seo_data($post_id, $post) {
$errors = false;
if($_POST['subhead'] != 'проверка') {
remove_action('save_post', 'album_save_post');
$errors .= 'Поле не прошло валидацию';
$post->post_status = 'draft';
wp_update_post( $post );
add_action('save_post', 'validate_seo_data');
}
update_option('seo_errors', $errors);
return;
}
add_action('save_post','validate_seo_data',1,2);
//показываем ошибку после сохранения
function show_seo_fieds_errors() {
$errors = get_option('seo_errors');
if($errors) {
echo '<div class="error"><p>' . $errors . '</p></div>';
}
}
add_action( 'admin_notices', 'show_seo_fieds_errors' );
//очищаем опцию ошибок, чтобы не висело всегда
function clear_seo_fields_errors() {
update_option('seo_errors', false);
}
add_action( 'admin_footer', 'clear_seo_fields_errors' );