【问题标题】:Add Validation to Custom User Meta on Profile Page of Wordpress Admin在 Wordpress 管理员的个人资料页面上为自定义用户元添加验证
【发布时间】:2013-11-23 06:49:16
【问题描述】:

我想扩展 wordpress 现有的用户角色和功能。我添加了自定义角色和功能。我还添加了自定义用户元数据(dob、性别、状态等...)

一切都很好,除了,我希望如果用户或管理员尝试更新自定义用户元,它应该通过 php 进行验证,我可以通过 JS 进行验证,但我也想向 PHP 添加验证。

personal_options_updateedit_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


【解决方案1】:
add_action( 'user_profile_update_errors',array(AlumniUserRolesAndCapabilities::getInstance(),"validateCustomUserMeta"),10,3);

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

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

希望这对任何人都有帮助。

【讨论】:

    猜你喜欢
    • 2012-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多