+ 收藏我们

网站模板

网站模板搜索
404模板 营销型模板 外贸网站模板 单页模板 双语模板 标签大全
电话:18630701785
首页 > 站长学院 > WooCommerce 中顾客购买特定产品后为其设置角色 >

WooCommerce 中顾客购买特定产品后为其设置角色

时间:2024-07-21 12:44:53

在付费内容网站中,我们可以在WooCommerce 中发布一个名为「升级 VIP 年度会员」的商品,用户购买这个商品后,就可以升级 VIP 会员,可以阅读这个网站中的所有内容。

在 WooCommerce 中购买产品后更改用户角色的整个过程可以通过两个步骤来实现:

  1. 角色转换的时机有很多,我们必须决定在什么时候进行角色转换。
  2. 检查订单中是否有特定产品(或多个产品),然后进行角色转换操作。

下面是实现这一需求的代码,如果需要,你可以先试一下代码,然后再看看后面的代码介绍深入理解这一过程。

复制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()方法来获取订单中的所有产品。
  • 第 8-10行,我们将检查此次购买是由真实用户还是未创建账户的用户完成的。如果您不想让没有账户的人在您的网站上购物,可以在 WooCommerce 设置中将其关闭(见图 1)。
  • 在第 15 行指定一个或多个产品 ID, 用户购买了这些产品中的任意一个,即可进行角色转换操作。
  • 如果您想删除以前的客户角色,请在第23 行指定,新角色(或多个角色)请在第25行指定。如果不知道以前的客户角色是什么,可以稍微修改一下代码
WooCommerce allow customers without an account create orders
图 1: 在 WooCommerce 设置中关闭访客购买

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

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

客服微信号:lpf010888

Title