最後更新:2026/10/13
臺北一位開設計課的講師,每次招生都在 IG 限時動態發一組優惠碼。活動結束後算帳,發現有三成的學員付了原價,再私訊來問能不能退差額。原因很簡單:優惠碼要自己記住,結帳頁那個「新增折價券」又小又不顯眼,很多人根本沒看到。
WooCommerce 的折價券功能比多數人用到的完整得多。這篇先把後台就能設定的限制講清楚,再補上三個常見需求的程式碼:點連結自動帶入優惠碼、在活動頁放一個輸入框、某些課程只賣給拿到學員優惠碼的人。
不想自己改?把這篇交給 AI
把這篇的網址(或全文)連同下面這段話貼給 AI:
我的網站是 WordPress,有裝 WooCommerce。我想照下面這篇文章,做到三件事:點連結就自動帶入優惠碼、在活動頁放一個輸入優惠碼的框、某些課程一定要用學員優惠碼才能買。
請先問我:我要用的優惠碼和活動頁、網站有沒有裝快取外掛。
問清楚之後,再一步一步告訴我:要用哪一段程式碼、貼在哪裡、哪些地方要換成我自己的資料,以及改完怎麼測試。
如果文章的做法不適合我的網站,請直接告訴我原因和替代做法。
文章:(貼上這篇的網址,或整篇內容)
改之前先備份,密碼不要貼給 AI。
先把後台的限制用好
到「行銷 → 折價券」新增一張折價券,除了金額和到期日,往下看「使用限制」和「使用上限」兩個分頁,很多需求不用寫程式就能做到。
「使用限制」可以設最低消費(滿 1,500 才能用)、限定或排除某些商品和商品分類、排除特價商品,也可以在「允許的電子郵件」填上 Email,只有用這些信箱結帳的人能用,適合發給老客人的回購券。勾選「限單獨使用」,這張券就不能和其他折價券疊加。
「使用上限」管的是次數:整張券總共能用幾次、「每一使用者的使用上限」設 1,就是一人限用一次。限量 50 名的早鳥價,直接把總次數設成 50,用完自動失效,不用盯著後台手動關。
點連結自動帶入優惠碼
與其請客人記代碼,不如直接給一個連結。加上下面這段程式碼後,網址後面接 ?coupon=代碼,例如 https://你的網址/?coupon=SPRING10,客人點進來逛、把商品加入購物車,折扣就自動套用了。就算客人點連結時購物車還是空的,程式也會先記住,等他加入商品再套用。
同一段程式碼也處理了下一節的輸入框,兩個功能共用「先記住、有商品就套用」的邏輯:
// 收到優惠碼(網址 ?coupon=代碼,或活動頁的輸入框),先記住,
// 購物車有東西就自動套用
add_action('wp_loaded', function () {
if (!function_exists('WC') || !WC()->session || !WC()->cart) {
return;
}
$code = '';
if (!empty($_GET['coupon'])) {
$code = wc_format_coupon_code(wp_unslash($_GET['coupon']));
}
if (!empty($_POST['mimi_coupon_code'])
&& wp_verify_nonce($_POST['mimi_coupon_nonce'] ?? '', 'mimi_coupon')) {
$code = wc_format_coupon_code(wp_unslash($_POST['mimi_coupon_code']));
}
if ($code) {
WC()->session->set_customer_session_cookie(true); // 訪客也記得住
WC()->session->set('mimi_coupon', $code);
if (WC()->cart->is_empty()) {
wc_add_notice('已記下優惠碼,商品加入購物車就會自動折抵。', 'notice');
}
}
mimi_apply_saved_coupon();
}, 25);
add_action('woocommerce_add_to_cart', 'mimi_apply_saved_coupon', 20);
function mimi_apply_saved_coupon() {
$code = WC()->session ? WC()->session->get('mimi_coupon') : '';
if (!$code || WC()->cart->is_empty()) {
return;
}
if (!WC()->cart->has_discount($code)) {
WC()->cart->apply_coupon($code); // 成功或失敗都會顯示訊息
}
WC()->session->set('mimi_coupon', null);
}
這個連結可以放在 IG 個人檔案、LINE 官方帳號的圖文選單、Email 電子報裡。每個管道給不同的代碼,例如 IG 用 IG10、電子報用 EDM10,到後台看每張券用了幾次,就知道哪個管道帶來的訂單最多。
程式碼放在 Code Snippets 這類外掛或子主題,放法和備份方式見〈WooCommerce 結帳頁改成台灣習慣〉。
在活動頁、商品頁放一個輸入框
有些活動是現場發放優惠碼,例如講座結束時投影片上的一組代碼。這時候在活動頁放一個顯眼的輸入框,比讓大家自己去找結帳頁的小欄位好得多。再加上這段,就多了一個短代碼 [mimi_coupon_form]:
// 短代碼 [mimi_coupon_form]:在活動頁、商品頁放一個優惠碼輸入框
add_shortcode('mimi_coupon_form', function () {
ob_start();
if (function_exists('wc_print_notices')) {
wc_print_notices();
}
?>
<form method="post" class="mimi-coupon-form">
<input type="text" name="mimi_coupon_code" placeholder="輸入優惠碼"
aria-label="優惠碼">
<?php wp_nonce_field('mimi_coupon', 'mimi_coupon_nonce'); ?>
<button type="submit">套用</button>
</form>
<?php
return ob_get_clean();
});
在頁面編輯器新增一個「短代碼」區塊,貼上 [mimi_coupon_form] 就完成了。客人輸入正確的代碼會看到「折價券使用成功」,打錯會看到「折價券不存在」,購物車還空著則會提示「已記下優惠碼」。
這裡有一個常被忽略的地方:如果網站有整頁快取(快取外掛或主機的快取),放輸入框的頁面要排除在快取之外。表單裡有一組防偽的驗證碼,頁面被快取太久,驗證碼過期,客人按了「套用」會沒有反應。
學員專屬:某些課程一定要用學員優惠碼
最後一個需求比較特別。講師開了一門進階課,只想賣給上過初階課的學員,價格也是學員價。做法是開一張「限定這個分類」的折價券,只把代碼給學員,再用程式碼規定:購物車裡有這個分類的課程,就一定要套用限定這個分類的折價券才能結帳。
先在折價券的「使用限制 → 商品分類」選你的課程分類(下面的程式碼用的分類代稱是 course,請換成你的),再加上:
// 「線上課程」分類一定要用「限定這個分類」的優惠碼才能結帳
add_action('woocommerce_check_cart_items', function () {
$cat = get_term_by('slug', 'course', 'product_cat');
if (!$cat || !WC()->cart) {
return;
}
$need = false;
foreach (WC()->cart->get_cart() as $item) {
if (has_term($cat->term_id, 'product_cat', $item['product_id'])) {
$need = $item['data']->get_name();
break;
}
}
if (!$need) {
return;
}
foreach (WC()->cart->get_applied_coupons() as $applied) {
$coupon = new WC_Coupon($applied);
if (in_array($cat->term_id, $coupon->get_product_categories())) {
return; // 有學員優惠碼,放行
}
}
wc_add_notice('「' . $need . '」限學員購買,請輸入課程優惠碼。', 'error');
});
為什麼要檢查「限定這個分類」,而不是「有用任何優惠碼」?因為商店裡可能同時有全館通用的折價券,如果只檢查有沒有折價券,拿到全館券的人也能買學員專屬課。我們實際測過:只用全館 100 元折價券,結帳頁仍然擋下來;換成限定課程分類的學員券,才能順利結帳。
兩種結帳頁的擋法不太一樣。區塊結帳頁會直接在頁面上顯示「限學員購買,請輸入課程優惠碼」;傳統結帳頁則是整個結帳表單不顯示,請客人回購物車,訊息出現在購物車頁。
優惠券是工具,要搭配清楚的規則
折價券用得好,可以分辨訂單從哪裡來、獎勵回購、做限量早鳥;規則不清楚,就會變成客服一直在處理「我忘了輸入」「能不能補折扣」。發出去之前,先自己用連結、用輸入框各試一次,也試試打錯代碼、用過期的代碼,看看客人會看到什麼。怎麼用回購和轉介紹把客人留下來,可以看〈讓客人幫你帶客人〉。
課程、預購、會員這些收費方式,都需要一個自己能掌控規則的網站,這也是〈IG 帳號不是你的資產〉想說的事。MIMI 專做客製化網頁設計,線上課程網站、購物車電商網站都能依你的銷售方式規劃。MIMI 提供臺北網頁設計服務,臺北的講師、店家可以用電話、Email 直接和設計師討論;費用可以先看首頁的製作費用參考,歡迎聯絡 MIMI。
