Saya memiliki fungsi yang mendefinisikan bidang khusus pada jenis posting. Katakanlah bidangnya adalah "subjudul".
Ketika posting disimpan, saya ingin melakukan validasi pada input, dan menampilkan pesan kesalahan pada layar edit posting jika perlu. Sesuatu seperti:
// 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);
Saya mencoba mengaitkan ini dengan tindakan save_post, tapi saya tidak tahu cara menangani kesalahan. Tampaknya tidak ada objek kesalahan yang diteruskan ke fungsi, dan jika saya membuat objek WP_Error saya sendiri dan mengembalikannya, itu tidak dihormati oleh mekanisme apa pun yang meludahkan kesalahan pada halaman edit posting.
Saat ini saya memiliki pesan kesalahan pada halaman di dalam kotak meta khusus saya, tetapi ini kurang dari ideal - Saya lebih suka memiliki kesalahan besar, merah, atas-di-the-top seperti yang biasanya ditampilkan WP.
Ada ide?
MEMPERBARUI:
Berdasarkan jawaban @Denis, saya mencoba beberapa hal berbeda. Menyimpan kesalahan sebagai global tidak berfungsi, karena Wordpress melakukan redirect selama proses save_post, yang membunuh global sebelum Anda dapat menampilkannya.
Saya akhirnya menyimpannya di bidang meta. Masalah dengan ini adalah bahwa Anda perlu menghapusnya, atau mereka tidak akan hilang ketika Anda menavigasi ke halaman lain, jadi saya harus menambahkan fungsi lain yang melekat pada admin_footer yang baru saja menghapus kesalahan.
Saya tidak mengira bahwa penanganan kesalahan untuk sesuatu yang sangat umum (memperbarui posting) akan menjadi kikuk ini. Apakah saya kehilangan sesuatu yang jelas atau ini pendekatan terbaik?
// 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);
segera setelah pernyataan if pada akhir wpse_5102_admin_notice_handler()
?
admin_footer
hook jika Anda menghapus kesalahan di akhir fungsi handler pemberitahuan Anda. Menyederhanakan hal-hal sedikit saja.