在付费内容网站中,我们可以在WooCommerce 中发布一个名为「升级 VIP 年度会员」的商品,用户购买这个商品后,就可以升级 VIP 会员,可以阅读这个网站中的所有内容。
在 WooCommerce 中购买产品后更改用户角色的整个过程可以通过两个步骤来实现:
- 角色转换的时机有很多,我们必须决定在什么时候进行角色转换。
- 检查订单中是否有特定产品(或多个产品),然后进行角色转换操作。
下面是实现这一需求的代码,如果需要,你可以先试一下代码,然后再看看后面的代码介绍深入理解这一过程。
add_action( 'woocommerce_payment_complete', 'wprs_set_role_on_specific_product_purchase' );
function wprs_set_role_on_specific_product_purchase( $order_id ) {
// 获取订单对象
$order = wc_get_order( $order_id );
// 如果此次购买没有创建账户,则不执行任何操作
if( ! $order->user_id ) {
return;
}
$items = $order->get_items();
// 要检查的一个或多个产品 ID,也就是升级 VIP 会员的商品
$product_ids = array( 5, 10, 32 );
foreach( $items as $item ) {
if( in_array( $item[ 'product_id' ], $product_ids ) ) {
$user = new WP_User( $order->user_id );
// 需要删除之前的用户角色吗?(可选)
$user->remove_role( 'customer' );
// 添加新角色
$user->add_role( 'editor' );
// 根据业务需要,我们还需要在这里为会员设置有效期以及更多处理
// 退出循环
break;
}
}
}
现在,让我们来分解一下这段代码:
- 我决定使用
woocommerce_payment_complete
钩子来确保付款已经完成,在一些教程中,他们可能会使用了woocommerce_order_status_{$status}
,理论上也可以实现,但是逻辑上会比较模糊。 - 我们还使用
$order->get_items()
方法来获取订单中的所有产品。 - exist
第 8-10
行,我们将检查此次购买是由真实用户还是未创建账户的用户完成的。如果您不想让没有账户的人在您的网站上购物,可以在 WooCommerce 设置中将其关闭(见图 1)。 - 在第 15 行指定一个或多个产品 ID, 用户购买了这些产品中的任意一个,即可进行角色转换操作。
- 如果您想删除以前的客户角色,请在第23 行指定,新角色(或多个角色)请在第25行指定。如果不知道以前的客户角色是什么,可以稍微修改一下代码