Tôi có một chức năng xác định một trường tùy chỉnh trên một loại bài. Nói trường là "tiêu đề phụ".
Khi bài đăng được lưu, tôi muốn thực hiện một số xác nhận trên đầu vào và hiển thị thông báo lỗi trên màn hình chỉnh sửa bài đăng nếu cần. Cái gì đó như:
// 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);
Tôi đang cố gắng thực hiện hành động này với hành động save_post, nhưng tôi không thể tìm ra cách xử lý lỗi. Dường như không có một đối tượng lỗi nào được truyền vào hàm và nếu tôi tạo WP_Error obj của riêng mình và trả lại nó, nó sẽ không được tôn trọng bởi bất kỳ cơ chế nào phát sinh lỗi trên trang chỉnh sửa bài đăng.
Tôi hiện đang có một thông báo lỗi trên trang bên trong hộp meta tùy chỉnh của mình, nhưng điều này không lý tưởng - tôi muốn có một lỗi lớn, màu đỏ, nổi bật như WP thường hiển thị.
Có ý kiến gì không?
CẬP NHẬT:
Dựa trên câu trả lời của @Denis, tôi đã thử một vài thứ khác nhau. Lưu trữ các lỗi như toàn cầu không hoạt động, vì Wordpress thực hiện chuyển hướng trong quá trình save_post, nó sẽ giết chết toàn cầu trước khi bạn có thể hiển thị nó.
Tôi đã kết thúc việc lưu trữ chúng trong một trường meta. Vấn đề với điều này là bạn cần phải xóa chúng hoặc chúng sẽ không biến mất khi bạn điều hướng đến một trang khác, vì vậy tôi đã phải thêm một chức năng khác được đính kèm vào admin_footer để xóa các lỗi.
Tôi không mong đợi rằng việc xử lý lỗi cho một cái gì đó quá phổ biến (cập nhật bài viết) sẽ trở nên rắc rối như vậy. Tôi đang thiếu một cái gì đó rõ ràng hay đây là cách tiếp cận tốt nhất?
// 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);
ngay sau câu lệnh if ở cuối wpse_5102_admin_notice_handler()
?
admin_footer
hook nếu bạn xóa các lỗi ở cuối chức năng xử lý thông báo của bạn. Đơn giản hóa mọi thứ chỉ một chút.