我在我的网站上使用钱包系统,如果用户的余额降至0以下,我如何更改用户的角色?META_VALUE可以采用从-5000的值.

add_action('init', 'changerole');
function changerole() {
    if(!current_user_can('administrator')) {
        $user_id = get_current_user_id();
        $user_meta = get_user_meta($user_id, 'current_my_wallet_balance', true);
        if ( $user_meta == 0) { //Which operator can I use?
            $user = new WP_User( $user_id );
            $user->set_role( 'subscriber' );
        }
    }
}

这也不起作用:

$user_meta  = min(max($user_meta , -500), 0);

推荐答案

try 以下重新访问的代码,如果其钱包余额低于0,则会将"Customer"用户角色更改为"Subscriber":

add_action('init', 'change_user_role_based_on_wallet_balance');
function change_user_role_based_on_wallet_balance() {
    global $current_user;

    if( $current_user && ! array_intersect(['administrator','subscriber'], $current_user->roles )
    && $current_user->current_my_wallet_balance < 0 ) {
        $current_user->set_role( 'subscriber' );
    }
}

这段代码经过测试,在所有可能的情况下都可以完美地工作,不会抛出任何错误.

Php相关问答推荐

基于验证动态更改输入字段类(名称密码)&

以编程方式更改新订单、已取消订单和失败订单的邮箱WooCommerce通知

PHP原始数据读取引发max_input_vars错误

MULTI UPDATE Laravel为什么只能更新我的第一行

Laravel自定义验证规则更正

WordPress:今天的计数';修改和发布的帖子

Woocommerce单一产品Ajax添加到带有自定义购物车项目数据的购物车

为WooCommerce中存储一些数据的购物车项目添加复选框

Shopware 6 插件:如何删除/迁移布尔配置到多选配置

在 WooCommerce 更新结帐事件上动态更新自定义内容

有没有办法像引用枚举一样引用注册表中的对象?

用户注册表单中的 HTTP 错误 405

woocommerce_available_ payment_gateways 过滤器挂钩多次触发

WooCommerce 中一件免费产品的数量折扣

用自定义代码替换 WooCommerce 单一产品简短描述

Laravel使用另一张表进行关联查询

计算组合指数

从 CSV 文件 seeder 数据库时的额外行

在 DomPDF 和 Laravel 中使用内联 css

PHP 从 API 获取随机项目