方法1,禁用保存按钮,您可以做的是防止用户在必填字段未填写时保存表单。这可以通过javascript简单地完成。
function require_fields_script(){
echo "
<script type=\'text/javascript\'>
(function($){
$(\'#submit\').on(\'click\',function(e){
if (!$(\'#email\').val() || !$(\'#nickname\').val()){
e.preventDefault();
if (!$(\'#email\').val()) {
window.alert(\'Please enter your email before saving.\');
} else {
window.alert(\'Please enter your nickname before saving.\');
}
}
});
})(jQuery);
</script>";
}
add_action( \'admin_footer\', \'require_fields_script\' );
这也可以通过将值保存在瞬态/全局变量中并在失败保存后检索它们来实现,但这不是必需的。
关键是,如果没有设置字段,那么就没有理由让用户首先保存它。
方法2,恢复到默认值,还有另一个技巧。加载页面时,会有一些默认/预保存的值,如电子邮件和昵称。如果用户试图在不输入这些值的情况下保存表单,可以将其设置回旧值。要做到这一点,您可以这样做:
function require_fields_script(){
echo "
<script type=\'text/javascript\'>
(function($){
var currentMail = $(\'#email\').val();
var currentNickname = $(\'#nickname\').val();
$(\'#submit\').on(\'click\',function(e){
if (!$(\'#email\').val()){
$(\'#email\').val(currentMail);
}
if (!$(\'#nickname\').val()){
$(\'#nickname\').val(currentNickname);
}
});
})(jQuery);
</script>";
}
add_action( \'admin_footer\', \'require_fields_script\' );
方法3,使用jQuery伪造管理警报我们可以使用
$.before
如果未设置字段。我们就是这样做的:
function require_fields_script(){
echo "
<script type=\'text/javascript\'>
(function($){
$(\'#submit\').on(\'click\',function(e){
if (!$(\'#email\').val()){
e.preventDefault();
$( \'#your-profile\' ).before( \'<div class=\\\'error\\\'><p><strong>ERROR</strong>: Please enter an email.</p><button type=\\\'button\\\' class=\\\'notice-dismiss\\\'><span class=\\\'screen-reader-text\\\'>Dismiss this notice.</span></button></div>\' );
$(\'html,body\').animate({scrollTop:0},700);
}
if (!$(\'#nickname\').val()){
e.preventDefault();
$( \'#your-profile\' ).before( \'<div class=\\\'error\\\'><p><strong>ERROR</strong>: Please enter a nickname.</p><button type=\\\'button\\\' class=\\\'notice-dismiss\\\'><span class=\\\'screen-reader-text\\\'>Dismiss this notice.</span></button></div>\' );
$(\'html,body\').animate({scrollTop:0},700);
}
});
})(jQuery);
</script>";
}
add_action( \'admin_footer\', \'require_fields_script\' );
这将抛出一个错误并将页面滚动到顶部,以便用户可以注意到错误。我们可以删除
div
之后,由于它将在保存时自动删除,因此实际上没有必要这样做。无论如何,要删除错误,可以使用
$.remove()
:
if ($(\'.error\').length) {
$(\'.error\').remove();
}
补丁更新我创建了一个补丁,通过执行AJAX和jQuery检查完全解决了这个问题。可在trac上找到修补程序
here. 目前它有一个小错误,我很快就会介绍它。