会员营销系统中,用户消费到一定金额升级会员级别是最基础的功能,如消费达到 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 角色的代码写一下就行了。