在Wordpress Admin的配置文件页面上添加验证到自定义用户元

时间:2013-11-23 06:49:16

标签: wordpress

我想扩展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一样。此外,如果没有验证错误,请使用指定的自定义用户元数。

感谢。

1 个答案:

答案 0 :(得分:3)

add_action( 'user_profile_update_errors',array(AlumniUserRolesAndCapabilities::getInstance(),"validateCustomUserMeta"),10,3);

这就是答案,10和3是关键,它与执行顺序有关。

在没有这些数字之前,$ user没有被发送到回调,但是当我在最后添加这些数字时,$ user对象被传递。

希望这有助于任何人。