本篇文章更新時間:2023/04/13
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知。
一介資男的 LINE 社群開站囉!歡迎入群聊聊~
如果本站內容對你有幫助,歡迎使用 BFX Pay 加密貨幣 或 新台幣 贊助支持。
同事丟了一個如標題所述的需求。因為網站搭配 The Events Calendar 的活動外掛,活動頁面中有些內容限制「只有買過票的會員」才能觀看。
所以在活動頁面要先判斷當前會員有沒有買過活動的們票。
使用 WooCommerce 的 wc_customer_bought_product
這個方法。
它可以用來檢查一個使用者是否已經購買了特定的商品。這個函式需要三個參數:使用者的電子郵件地址、使用者 ID 和要檢查的商品 ID。函式的寫法如下:
wc_customer_bought_product($customer_email, $user_id, $product_id);
完整給同事的程式碼如下:
// 取得當前 使用者 ID
$user_id = get_current_user_id();
// 取得當前 發文 ID
$event_id = get_queried_object_id();
$args = array(
'fields' => 'ids',
'post_type' => 'product',
'meta_key' => '_tribe_wooticket_for_event',
'meta_query' => array(
array(
'key' => '_tribe_wooticket_for_event',
'value' => $event_id,
'compare' => '=',
),
),
);
$query = new WP_Query($args);
$products = $query->posts;
$has_purchased = false;
foreach ($products as $index => $product_id) {
// 只要買過就 Pass 了
if ($has_purchased == true) {
break;
}
$has_purchased = wc_customer_bought_product(get_userdata($user_id)->user_email, $user_id, $product_id);
}
// 判斷使用者是否已購買該商品
if ($has_purchased) {
echo '您已購買此商品!';
} else {
echo '您尚未購買此商品!';
}
會多寫 WP_Query
方法那段,主要是因為 The Events Calendar 外掛他一個活動可以開多種票出來賣,所以預設買任一種票即符合條件。
如果沒有使用這款外掛搭配,純粹的範例如下:
// 取得當前使用者的ID
$user_id = get_current_user_id();
// 檢查使用者是否購買了商品ID為123的產品
$product_id = 123;
$has_purchased = wc_customer_bought_product( get_userdata( $user_id )->user_email, $user_id, $product_id );
// 判斷使用者是否已購買該商品
if ( $has_purchased ) {
echo '您已購買此商品!';
} else {
echo '您尚未購買此商品!';
}