Bir yazı tipinde özel bir alanı tanımlayan bir işleve sahibim. Alanın "alt başlık" olduğunu söyleyin.
Gönderi kaydedildiğinde, girdi üzerinde bir miktar doğrulama yapmak ve gerekirse yazı düzenleme ekranında bir hata mesajı görüntülemek istiyorum. Gibi bir şey:
// 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);
Bunu save_post eylemine bağlamaya çalışıyorum, ancak hataları nasıl ele alacağımı bulamıyorum. İşleve iletilen bir hata nesnesi görünmüyor ve kendi WP_Error objemi oluşturup geri döndürürsem, düzenleme sonrası sayfada hataları yayan herhangi bir mekanizmaya saygı duymuyor.
Şu anda özel meta kutumun içinde sayfa içi bir hata mesajı var, ancak bu idealden daha az. WP normalde gösterdiği gibi büyük, kırmızı, en üstte bir hatam olmasını tercih ederim.
Herhangi bir fikir?
GÜNCELLEŞTİRME:
@Denis'in cevabına dayanarak birkaç farklı şey denedim. Hataları bir genel olarak saklamak işe yaramadı çünkü Wordpress, onu görmeden önce genelini öldüren save_post işlemi sırasında bir yönlendirme yapıyor.
Onları meta bir alanda sakladım. Bununla ilgili sorun, onları temizlemeniz gerekmesi veya başka bir sayfaya gittiğinizde kaybolmamalarıdır, bu yüzden sadece hataları gideren admin_footer'a bağlı başka bir işlev eklemek zorunda kaldım.
Bu kadar yaygın olan bir şey için hata işlemenin (gönderilerin güncellenmesi) bu kadar zor olacağını ummazdım. Açıkça net bir şey mi eksik yoksa bu en iyi yaklaşım mı?
// 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);
sonunda if ifadesinden hemen sonra çalıştırmak biraz daha etkili olur wpse_5102_admin_notice_handler()
mu?
admin_footer
Dikkat işleyicisi işlevinin sonundaki hataları giderirseniz , kancadan kurtulabileceğinizi düşünüyorum . İşleri bir parça basitleştirir.