如何在更新用户元时返回错误消息?

时间:2020-04-19 作者:Myles

我有一个自定义的用户元字段,我只想接受0到50之间的整数。我使用的输入字段为type="number", 我正在更新函数中检查输入是否正确。这是一种工作方式。。。如果输入不好,则不会保存该值。但您仍然会收到一条消息,上面写着“用户已更新”。我希望能够返回一个错误来解释输入的问题。我很难弄明白怎么做。。。我可以在更新功能中执行此操作吗?或者我有没有其他的方法?

以下是我目前掌握的情况:

这是我的输入框:

add_action(\'edit_user_profile\', \'my_plugin_user_settings\');
function my_plugin_user_settings($user){
?>
<table class="form-table">
  <tr>
    <th>
      <label for="my-plugin-user-level">User Level</label>
    </th>
    <td>
      <input type="number" name="my-plugin-user-level" value="<?php echo (get_user_meta($user->ID, \'my-plugin-user-level\', true) == NULL) ? \'0\' : get_user_meta($user->ID, \'my-plugin-user-level\', true); ?>">
    </td>
  </tr>
</table>
<?php
}
下面是我用来检查和更新用户元的内容:

add_action(\'edit_user_profile_update\', \'my_plugin_user_level_update\');
function my_plugin_user_level_update($user_id){
  if(!current_user_can(\'edit_user\', $user_id)){
    return false;
  }
  $value = intval($_POST[\'my-plugin-user-level\']);
  if(!is_int($value) || $value < 0 || $value > 50){
    return false; // I want to do some kind of error message here instead
  }
  return update_user_meta($user_id, \'my-plugin-user-level\', $value);
}

1 个回复
最合适的回答,由SO网友:Myles 整理而成
// User Settings Errors
add_filter( \'user_profile_update_errors\', \'my_plugin_user_settings_errors\' );
function my_plugin_user_settings_errors( $errors ) {
  $user_level = intval( $_POST[ \'my-plugin-user-level\' ] );
  if ( ! is_int( $user_level ) || $user_level < 0 || $user_level > 50 ) {
    $errors->add( \'my-plugin-invalid-admin-level\', \'<strong>ERROR:</strong> User Level must be between 0 and 50.\' );
  }
  return $errors;
}

相关推荐