【发布时间】:2013-11-23 06:49:16
【问题描述】:
我想扩展 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
这是我在引导代码中的插件:
add_action( 'user_profile_update_errors',array(AlumniUserRolesAndCapabilities::getInstance(),"validateCustomUserMeta"));
总而言之,我希望能够通过 php 验证自定义用户元数据,并在出现错误时防止更新值并正常显示它,就像 wordpress 所做的那样。此外,如果没有验证错误,请更新指定的自定义用户元数据。
谢谢。
【问题讨论】:
-
另外需要注意的是,我在这里也尝试了类似的主题:stackoverflow.com/questions/9945757/…。对我不起作用,它确实触发了验证错误,但仍会继续并使用无效值更新自定义用户元数据。我正在使用 wordpress 3.7.1
标签: wordpress