[WooCommerce] 判斷消費者是否有購買過某個商品的方法

本篇文章更新時間: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 '您尚未購買此商品!';
}

Share:

作者: Chun

資訊愛好人士。主張「人人都該為了偷懶而進步」。期許自己成為斜槓到變進度條 100% 的年輕人。[///////////____36%_________]

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *


文章
Filter
Apply Filters
Mastodon