情境:
使用WordPress + WooCommerce 製作電商網站並且有會員分級功能
網站會因為不同會員分級給予不同的折扣
並且要在前台讓會員可以看到自己是甚麼會員等級
使用到的外掛:
1.YITH WooCommerce Role Based Prices Premium – 針對不同會員等級給予不同的折扣
2.YITH Automatic Role Changer for WooCommerce Premium – 可以設定條件達到會員等級的變更
3.Ultimate Member – 新增不同的會員角色,也可以使用function來達成減輕網站負擔
–使用這些外掛就可以製作會員分級功能了,但是當中有一些需要調整的地方
WooCommerce的訂單有下列幾種狀態:
- pending 等待付款中
- processing 處理中
- on-hold 保留
- completed 完成
- cancelled 取消
- refunded 已退費
- failed 失敗
注意事項1.
WooCommerce在客戶下訂之後預設狀態是pending 等待付款中
目前這邊看似一切合理,但問題出在於WooCommerce訂單狀態要在processing 處理中 或是 on-hold 保留 才會寄出訂購通知的信件
當然這兩種狀態寄出的信件是不同的,但是至少可以讓客戶知道自己的訂單狀態。
注意事項2.
YITH Automatic Role Changer for WooCommerce Premium判斷是否達成條件讓客戶升級的重點在於
判斷WooCommerce訂單狀態必須處於processing 處理中才會進行觸發
也就是說現在目標很明確了
1.必須要修改WooCommerce下訂之後預設狀態為 on-hold 保留 (此時會寄出信件)
2. on-hold 保留的狀態不會進行會員升級的條件觸發,能夠讓網站管理員確保該筆訂單是有完成之後再協助客戶進行會員升級
調整:
add_action( 'woocommerce_thankyou', 'custom_woocommerce_auto_complete_order' ); function custom_woocommerce_auto_complete_order( $order_id ) { if ( ! $order_id ) { return; } $order = wc_get_order( $order_id ); $order->update_status( 'on-hold' ); }
–放置function.php及可讓WooCommerce下訂之後預設狀態為 on-hold 保留
將會員等級顯示於前台
我這邊使用的方法是將資訊hook到Ultimate Member的endpoints Page之上
這邊簡單講一下原理,並非將代碼貼上即可有相同的功能
如果想要放在其他地方可以再自己調整
如果有任何問題歡迎信件詢問!
function QuadLayers_support_content() { if(current_user_can( 'um_custom_role_1' ) ){ echo ' 你的會員等級 : 一般會員'; }elseif(current_user_can( 'um_custom_role_2')){ echo ' 你的會員等級 : 白金會員'; }elseif(current_user_can( 'um_custom_role_3')){ echo ' 你的會員等級 : 鑽石會員'; }elseif(current_user_can( 'um_custom_role_4')){ echo ' 你的會員等級 : 黃金會員'; }elseif(current_user_can( 'manage_options')){ echo ' 你的會員等級 : 管理員'; } } add_action( 'woocommerce_account_points_endpoint', 'QuadLayers_support_content' );