在付費(fèi)內(nèi)容網(wǎng)站中,我們可以在WooCommerce 中發(fā)布一個名為「升級 VIP 年度會員」的商品,用戶購買這個商品后,就可以升級 VIP 會員,可以閱讀這個網(wǎng)站中的所有內(nèi)容。
在 WooCommerce 中購買產(chǎn)品后更改用戶角色的整個過程可以通過兩個步驟來實(shí)現(xiàn):
- 角色轉(zhuǎn)換的時機(jī)有很多,我們必須決定在什么時候進(jìn)行角色轉(zhuǎn)換。
- 檢查訂單中是否有特定產(chǎn)品(或多個產(chǎn)品),然后進(jìn)行角色轉(zhuǎn)換操作。
下面是實(shí)現(xiàn)這一需求的代碼,如果需要,你可以先試一下代碼,然后再看看后面的代碼介紹深入理解這一過程。
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 );
// 如果此次購買沒有創(chuàng)建賬戶,則不執(zhí)行任何操作
if( ! $order->user_id ) {
return;
}
$items = $order->get_items();
// 要檢查的一個或多個產(chǎn)品 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' );
// 根據(jù)業(yè)務(wù)需要,我們還需要在這里為會員設(shè)置有效期以及更多處理
// 退出循環(huán)
break;
}
}
}
現(xiàn)在,讓我們來分解一下這段代碼:
- 我決定使用
woocommerce_payment_complete鉤子來確保付款已經(jīng)完成,在一些教程中,他們可能會使用了woocommerce_order_status_{$status},理論上也可以實(shí)現(xiàn),但是邏輯上會比較模糊。 - 我們還使用
$order->get_items()方法來獲取訂單中的所有產(chǎn)品。 - 在
第 8-10行,我們將檢查此次購買是由真實(shí)用戶還是未創(chuàng)建賬戶的用戶完成的。如果您不想讓沒有賬戶的人在您的網(wǎng)站上購物,可以在 WooCommerce 設(shè)置中將其關(guān)閉(見圖 1)。 - 在第 15 行指定一個或多個產(chǎn)品 ID, 用戶購買了這些產(chǎn)品中的任意一個,即可進(jìn)行角色轉(zhuǎn)換操作。
- 如果您想刪除以前的客戶角色,請在第23 行指定,新角色(或多個角色)請在第25行指定。如果不知道以前的客戶角色是什么,可以稍微修改一下代碼



