我想扩展wordpress的现有用户角色和功能。我添加了自定义角色和功能。我还添加了自定义用户元(dob,性别,状态等等)
一切都很好,除了,我希望如果用户或管理员尝试更新自定义用户元,它应该通过php验证,我可以通过JS来做,但我也想为PHP添加验证。
personal_options_update 和 edit_user_profile_update 操作挂钩, 使用这个,我可以成功更新自定义用户元的值,但无法验证。 (我想显示验证错误,就像wordpress正常一样)。
所以我从这个链接尝试了这个技术: https://wordpress.stackexchange.com/questions/76419/validating-a-new-user-registration-field
并使用 user_profile_update_errors 操作挂钩。
它完成了大部分工作,我可以添加验证并将其添加到wordpress错误通知中。如果有错误则阻止更新自定义用户元。
但是我注意到,即使新数据有效且没有发生验证错误,它也不会更新自定义用户元。
下面的是我的代码示例:
回调给user_profile_update_errors动作钩子,我故意没有检查$ errors对象是否有错误来说明update_user_meta不会被触发。这也是一个类
的功能public function updateCustomUserMeta($errors,$update,$user){
// Check if user has authority to change this
if(!current_user_can('read',$user->ID)){
$errors->add("permission_denied","You do not have permission to update this page");
}
// Var declaration and default values
$mn = "";
// Validation
if(isset($_POST["alumni-middlename"])){
$mn = trim($_POST["alumni-middlename"]);
if(empty($mn)){
$errors->add("middlename_empty","Middle Name Empty");
}
}else{
$errors->add("middlename_not_passed","Middle Name Field Not Passed");
}
update_user_meta($user->ID,"Middle Name",$_POST["alumni-middlename"]);
}// end updateCustomUserMeta
这是我在bootstrap代码中的插件:
add_action( 'user_profile_update_errors',array(AlumniUserRolesAndCapabilities::getInstance(),"validateCustomUserMeta"));
总而言之,我希望能够通过php验证自定义用户元素,并防止更新值,如果有错误并正常显示,就像wordpress一样。此外,如果没有验证错误,请使用指定的自定义用户元数。
感谢。
答案 0 :(得分:3)
add_action( 'user_profile_update_errors',array(AlumniUserRolesAndCapabilities::getInstance(),"validateCustomUserMeta"),10,3);
这就是答案,10和3是关键,它与执行顺序有关。
在没有这些数字之前,$ user没有被发送到回调,但是当我在最后添加这些数字时,$ user对象被传递。
希望这有助于任何人。