根据用户角色保存用户元“MEMBER_ID”

时间:2020-05-04 作者:WPNow

在WP/Woocommerce with subscriptions插件环境中,我设法在用户创建级别在用户元表中保存一个自定义的“member\\u id”:

function assignuserid($user_id) {
    global $wpdb;
    $latestid=$wpdb->get_var("SELECT meta_value from $wpdb->usermeta where meta_key=\'member_id\' order by meta_value DESC limit 1;");
    update_user_meta( $user_id, \'member_id\', $latestid+1 );
}
add_action( \'user_register\', \'assignuserid\');
重要提示:这适用于来自管理后台(用户>添加新)和woocommerce订单用户注册表单的所有角色(如管理员或订阅者)的用户。

现在,当我尝试使用代码仅为用户role=“subscriber”生成member\\u id时

function assignuserid($user_id) {
    if ( user_can( $user_id, \'subscriber\')) {
        global $wpdb;
        $latestid=$wpdb->get_var("SELECT meta_value from $wpdb->usermeta where meta_key=\'member_id\' order by meta_value DESC limit 1;");
        update_user_meta( $user_id, \'member_id\', $latestid+1 );
    }
}
add_action( \'user_register\', \'assignuserid\');
这对从管理后台创建的用户很有效:管理员不获取成员id,订阅者获取成员id,但通过woocommerce订单用户注册表单创建的用户都不获取用户元“成员id”字段。他们是订户。我不明白为什么。。。

1 个回复
SO网友:Yash Tiwari
Try this:

function assignuserid($user_id) {

    $user_meta = get_userdata($user_id); 

    $user_roles = $user_meta->roles;

    if (in_array("subscriber", $user_roles)){
        global $wpdb;
        $latestid=$wpdb->get_var("SELECT meta_value from $wpdb->usermeta where meta_key=\'member_id\' order by meta_value DESC limit 1;");
        update_user_meta( $user_id, \'member_id\', $latestid+1 );
    }
}
add_action( \'user_register\', \'assignuserid\');

相关推荐