CRM 消費分級不只是報表:驅動 WordPress 自動化文案生成的技術實戰
☰ 目錄 table-of-contents.md
在某個電商網站買了幾萬塊的設備,下次登入首頁,迎接我的卻還是那個「首購滿千折百」的彈窗。消費紀錄明明都在 CRM 裡,系統卻對熟客視而不見——罐頭訊息發得越勤,越是在提醒客戶:我根本不認識你。
這感覺就像你每個禮拜都去同一家高級牛排館吃飯,結果服務生每次都問你:「先生第一次來嗎?需要幫您介紹菜單嗎?」這不是禮貌,這是資料的傲慢。在 2026 年的今天,這種「一視同仁」的行銷方式,基本上就是在浪費流量,甚至是在趕客。
今天這篇文章不講虛無縹緲的行銷理論,我們要來點硬核的。我要教你如何利用 WordPress (WooCommerce) 結合 CRM 的消費數據,透過程式碼自動判斷使用者的「含金量」等級,並即時生成(而不只是替換)專屬於該等級的個人化文案。這才是真正的「千人千面」。
為什麼你的 VVIP 收到的是「新客優惠」?資料孤島的代價
很多企業都有 CRM (HubSpot, Salesforce) 也有 WordPress 官網,但這兩者通常是分居狀態。CRM 知道這個人是身價百萬的大戶,但 WordPress 只知道這是一個剛登入的 User ID 5566。
要解決這個問題,我們不需要重寫整個系統,只需要在 WordPress 的佈景主題 (Theme) 或客製化外掛中,建立一個「中間層邏輯」。這個邏輯負責做三件事:
- 識別身份:確認目前瀏覽者是誰。
- 撈取數據:從資料庫或 CRM API 獲取他的歷史消費總額 (LTV)。
- 動態生成:根據等級,呼叫 AI 或使用預設邏輯,產出對應的文案。
第一步:從 WooCommerce 撈取「含金量」數據
首先,我們別把事情搞太複雜去 Call 外部 API(那會有延遲問題,影響 LCP)。最快的方法,是直接讀取 WooCommerce 的歷史訂單數據。在 2026 年,伺服器效能已經過剩,簡單的 SQL 查詢或內建函數這點負載根本是小菜一碟。
這段程式碼可以放在你的 functions.php 或者自製外掛中:
/**
* 取得使用者的消費分級
* 回傳: 'vip', 'regular', 'new', 'guest'
*/
function eric_get_user_tier( $user_id = 0 ) {
if ( ! $user_id ) {
$user_id = get_current_user_id();
}
// 如果沒登入,就是路人甲
if ( 0 === $user_id ) {
return 'guest';
}
// 使用 WooCommerce 內建函式取得總消費額
// 這比自己寫 SQL Join 更安全且相容性更高
$total_spent = wc_get_customer_total_spent( $user_id );
// 這裡的門檻值建議寫在後台設定頁,方便行銷人員調整
// 但為了 demo 方便,我先寫死 (Hard code)
if ( $total_spent >= 50000 ) {
return 'vip'; // 大戶
} elseif ( $total_spent >= 5000 ) {
return 'regular'; // 熟客
} else {
return 'new'; // 新手村
}
}
這段 Code 很簡單,但卻是整個個人化引擎的心臟。有了它,我們就不再是盲目地推播內容了。
第二步:不只是 if/else,而是「動態文案引擎」
傳統的做法是寫一堆 if ($tier == 'vip') { echo '...'; }。這太無聊了,而且維護起來很痛苦。如果行銷團隊明天想把 VIP 的稱呼改成「尊榮黑卡會員」,你就得去改程式碼。
更進階的做法是,我們定義好不同等級的「Prompt Context(提示語境)」,然後讓文案自動組裝。在 2026 年,我們甚至可以串接本地端的輕量級 LLM (Large Language Model) 來即時潤飾語氣。
以下是一個不依賴外部 API,但具備高度彈性的實作架構:
function eric_generate_personalized_copy( $location_context = 'home_banner' ) {
$tier = eric_get_user_tier();
// 定義不同等級的文案策略
$strategies = [
'vip' => [
'tone' => '尊榮、專屬、簡潔',
'offer' => '專屬秘書服務',
'greeting' => '歡迎回來,尊貴的會員',
],
'regular' => [
'tone' => '熱情、親切',
'offer' => '老客戶 9 折回饋',
'greeting' => '嗨!好久不見',
],
'new' => [
'tone' => '興奮、引導性強',
'offer' => '首購免運',
'greeting' => '歡迎加入我們',
],
'guest' => [
'tone' => '好奇、吸引',
'offer' => '註冊領 100',
'greeting' => '探索無限可能',
]
];
$strategy = $strategies[$tier] ?? $strategies['guest'];
// 這裡可以是一個簡單的字串替換,也可以是更複雜的 AI 生成邏輯
// 為了效能,我們這裡示範模版替換法
$copy_template = "";
return $copy_template;
}
進階:為什麼工程師要懂行銷?
你看上面的程式碼,重點不在於 PHP 怎麼寫,而在於那個 $strategies 陣列的設計。這就是工程師與行銷團隊的交集點。你可以把這個陣列做成一個 WordPress Option Page,讓行銷人員自己在後台填寫「尊榮感」的定義,而你只需要負責邏輯實現。
第三步:處理最棘手的「快取 (Cache)」問題
這是我一定要囉唆的地方。做個人化內容,最大的敵人不是程式邏輯,而是快取外掛 (Caching Plugins)。
如果你的網站有用 WP Rocket、LiteSpeed Cache 或 Cloudways 的 Varnish,通常 HTML 會被快取起來。這會導致一個災難性的後果:A 客戶(VIP)登入後看到的頁面被快取了,結果 B 客戶(路人)進來,也看到了「歡迎回來,尊貴的會員」的畫面。這不僅尷尬,還可能洩漏資訊。
解決方案有兩種:
- AJAX 後載入: 頁面載入時先放一個 Placeholder (佔位符),然後用 JavaScript 發送 AJAX 請求,後端 PHP 判斷完身份後再回傳 HTML。這是最穩的做法。
- ESI (Edge Side Includes): 如果你用 LiteSpeed 或進階 CDN,可以用 ESI 標籤挖洞,讓那個區塊「不被快取」。
這裡提供一個簡單的 AJAX 前端實作概念 (jQuery 版本,因為 WordPress 內建):
// 前端 JS
jQuery(document).ready(function($) {
if ($('#smart-banner-container').length) {
$.ajax({
url: localized_data.ajax_url,
type: 'POST',
data: {
action: 'get_personalized_banner',
security: localized_data.nonce
},
success: function(response) {
if(response.success) {
$('#smart-banner-container').html(response.data);
}
}
});
}
});
2026 年的下一步:串接 Local LLM
現在手機和電腦的算力都很強,未來的趨勢不是每次都 Call OpenAI API (太貴且有隱私問題),而是透過 WebLLM 等技術,或者在伺服器端跑一個輕量模型。
你可以想像,當系統偵測到這個 VIP 客戶最近買了很多「露營用品」,我們不只是推播「露營燈」,而是由 AI 生成一段文案:「上次的露營還愉快嗎?為了您的下一次山林冒險,我們準備了更輕量化的帳篷...」。這種情境式 (Context-aware) 的推播,轉換率通常是罐頭訊息的 3 倍以上。
結論:別讓數據睡在資料庫裡
很多老闆會問:「Eric,做這個功能要花多久?」我會說,寫 Code 只要半天,但定義「什麼樣的客戶該看什麼樣的內容」需要你們行銷團隊動腦。
技術只是載體。透過 WordPress 強大的 Hook 機制與 WooCommerce 的數據底層,我們完全可以把一個死板的 CMS,改造成一個懂人心的 Sales Agent。別再讓你的 VIP 覺得自己跟路人沒兩樣了。
想了解更多關於如何將這些數據自動化應用到你的網站上?可以參考我們之前寫過的幾篇深度文章:
延伸閱讀
常見問題
如何用 WooCommerce 判斷使用者的消費分級?
為什麼個人化文案不該寫成一堆 if/else?
做個人化內容時,快取(Cache)為什麼是最大的敵人?
如何避免個人化內容被整頁快取錯誤共用?
訂閱免費電子報
把 AI 自動化、企業系統設計與 WordPress / Laravel 開發的真實案例和可直接照做的技巧,整理成電子報寄給你。只寄精選內容、不灌垃圾信,一鍵就能退訂。