+ 收藏我们

网站模板

网站模板搜索
404模板 营销型模板 外贸网站模板 单页模板 双语模板 标签大全
电话:18630701785
首页 > 站长学院 > WooCommerce 中用户消费超过一定金额时,自动升级用户角色 >

WooCommerce 中用户消费超过一定金额时,自动升级用户角色

时间:2024-07-22 10:58:06

会员营销系统中,用户消费到一定金额升级会员级别是最基础的功能,如消费达到 1000元升级VIP,VIP会员购物可以享受8折优惠。在WooCommerce中,我们可以使用WordPress的角色来表示VIP会员,自动升级的操作可以通过WooCommerce的woocommerce_order_status_changed Hook来实现。下面,我们来看一下具体代码。

WooCommerce 根据订单金额自动升级用户角色的代码
首先,我们创一个函数来判断用户的消费大于 999.99 时,自动为用户添加「vip-customer」这个角色,同时移除「customer」这个普通会员角色,从而实现升级用户角色的功能。

复制
function wprs_customer_maybe_upgrade_to_vip( $user_id ) {
    if ( wc_get_customer_total_spent( $user_id ) > 999.99
        $user = new WP_User( $user_id );
        $user->add_role( 'vip-customer' );
        $user->remove_role( 'customer' );
    }
}
升级用户角色的时机
上面的代码只是实现了升级函数,那么什么时候来执行这个函数呢?一个很好的时机就是 WooCommerce 订单状态发生改变时。

在订单状态发生改变时,我们先判断用户角色切换的操作是否还未执行,然后判断当前订单是否已支付,最后判断用户是否为「customer」角色,只有这三个条件都为 true 时,我们才执行用户角色切换的操作,然后设置用户角色已切换的标记。

复制
add_action( 'woocommerce_order_status_changed', function ( $order_id )
{
    $order               = wc_get_order( $order_id );
    $user_id             = $order->get_user_id();
    $order_status        = $order->get_status();
    $switch_already_done = $order->get_meta( '_wprs_role_switched' );

    if ( ! $switch_already_done && $order->has_status( wc_get_is_paid_statuses() ) && wc_user_has_role( $user_id, 'customer' ) ) {
        wprs_customer_maybe_upgrade_to_vip( $user_id );

        $order->update_meta_data( '_wprs_role_switched', 'true' );
        $order->save();
    }
} );
退款时,收回用户VIP角色
如果触发用户角色升级的操作发生了退款操作,我们需要收回该用户的 VIP 会员,把该操作挂载到woocommerce_order_refunded Hook 上即可。具体代码就不写了,需要的朋友参考升级 VIP 角色的代码写一下就行了。

有问题可以加入网站技术QQ群一起交流学习

本站会员学习、解决问题QQ群(691961965)

客服微信号:lpf010888

Title