~/blog/wordpress-social-tagging-automation-behavior-hooks.md
WordPress 開發與技巧 · 2026 / 01 / 26

WordPress 興趣標籤不必手動貼:用 Hook 捕捉使用者行為的自動化實戰

Eric — 浪花科技創辦人 / AI 架構師
Eric
浪花科技創辦人 · AI 架構師
WordPress 興趣標籤不必手動貼:用 Hook 捕捉使用者行為的自動化實戰
目錄 table-of-contents.md

興趣標籤如果還靠小編手動貼,會員一多就註定貼不完、也貼不準。好消息是,WordPress 的 Hook 機制天生適合捕捉使用者行為,能在互動發生的當下自動完成貼標。這篇就帶你把這套自動化從頭做出來。

你一定聽過行銷主管這樣抱怨:「為什麼我們發送的 EDM 開信率這麼低?」或者「為什麼推薦給男性的商品,最後發現他是買給女朋友的?」原因很簡單,因為你的會員資料庫只有「靜態資料」(如性別、年齡),卻缺乏了「動態行為」(User Behavior)。

在 WordPress 的世界裡,很多工程師以為裝個 Google Analytics (GA4) 就叫做了行為追蹤。別鬧了,GA4 的數據在 Google 那裡,你的 WordPress 資料庫對此一無所知。真正的社群標籤自動化,是指當使用者在你的網站上進行「特定互動」(如留言、分享、頻繁閱讀某類文章)時,系統能即時捕捉這些訊號,並在後台自動為該會員貼上對應的標籤(Tags)。

這篇文章不講虛的理論,我會直接帶你用程式碼(Code)實作一套輕量級的行為標籤系統。我們會利用 WordPress 強大的 Hooks 機制,捕捉使用者的社群互動與瀏覽行為。

什麼是「社群標籤自動化」?為什麼你需要它?

簡單來說,就是讓你的 WordPress 網站具備「讀心術」。

傳統的標籤是「手動」的,例如使用者註冊時勾選「我喜歡科技」。但人的興趣是會變的。社群標籤自動化則是依據使用者當下的行為來動態調整。例如:

  • 來源標籤: 使用者是用 LINE Login 還是 Google 登入?這決定了我們能在哪個渠道聯繫他。
  • 互動標籤: 使用者是否在「WooCommerce 開發」分類的文章下留言超過 3 次?如果是,他就是「高度潛在客戶」。
  • 活躍標籤: 使用者是否連續 7 天都有登入?這代表黏著度極高。

身為工程師,我們的任務就是把這些「行為」轉化為資料庫裡的 `usermeta`,甚至同步到 CRM 系統。

實戰一:捕捉社群登入來源(Social Login Context)

現在很多網站都整合了 Social Login(社群登入)。這其實是第一個貼標籤的黃金時刻。如果你的網站同時支援 LINE、Facebook 和 Google 登入,知道使用者「偏好哪種方式」非常重要。

以下這段程式碼展示了如何在使用者登入時,判斷其來源並寫入標籤。這裡假設你使用的是通用的 Social Login 邏輯(通常會觸發 `wp_login` 動作):


/**
 * 依據登入方式自動貼標籤
 * 
 * @param string $user_login 使用者帳號
 * @param WP_User $user 使用者物件
 */
function eric_auto_tag_social_source( $user_login, $user ) {
    
    // 這裡通常需要配合你使用的 Social Login 外掛來判斷
    // 舉例:檢查 URL 參數或 Session 中是否有特定的 provider 標記
    // 這裡模擬一個偵測邏輯
    
    $provider = '';
    
    // 假設你的登入外掛會把來源存在某個 Global 變數或 $_GET 參數中
    if ( isset( $_GET['login_source'] ) ) {
        $provider = sanitize_text_field( $_GET['login_source'] );
    }

    // 如果找不到,就不處理,避免污染資料
    if ( empty( $provider ) ) {
        return;
    }

    // 取得目前使用者的標籤 (假設存放在 user_meta 的 'interest_tags' 欄位,格式為 Array)
    $current_tags = get_user_meta( $user->ID, 'interest_tags', true );
    if ( ! is_array( $current_tags ) ) {
        $current_tags = array();
    }

    $new_tag = 'Source: ' . ucfirst( $provider );

    // 如果還沒有這個標籤,就加進去
    if ( ! in_array( $new_tag, $current_tags ) ) {
        $current_tags[] = $new_tag;
        update_user_meta( $user->ID, 'interest_tags', $current_tags );
        
        // 工程師的小囉嗦:
        // 實務上,這裡建議同時觸發一個 Webhook 到你的 CRM (如 HubSpot 或 ActiveCampaign)
        // 不要只把資料留在 WordPress 裡長灰塵
        eric_sync_tag_to_crm( $user->ID, $new_tag );
    }
}
add_action( 'wp_login', 'eric_auto_tag_social_source', 10, 2 );

為什麼這很重要?

知道使用者是 "LINE User",你未來的行銷策略就可以主攻 LINE 通知,而不是發送可能會進垃圾郵件匣的 Email。這就是技術驅動行銷的價值。

實戰二:依據「留言互動」自動判斷興趣

「社群標籤自動化:依據使用者行為自動貼上興趣標籤」的核心在於興趣推斷。如果一個人在你的「網頁設計」分類文章下瘋狂留言,他絕對不是為了好玩,他是真的對這話題有興趣(或是來發垃圾廣告的,這需要另外處理)。

我們可以利用 `comment_post` 這個 Hook,在使用者留言成功時,反查該篇文章的分類,然後為使用者「加分」。當分數超過一定門檻,就正式貼上標籤。

這比單純的「有點擊就貼標籤」精準得多,因為留言代表了高涉入度


/**
 * 監聽留言行為,累計興趣分數
 */
function eric_track_comment_interest( $comment_id, $comment_approved, $commentdata ) {
    
    // 只追蹤已核准的留言,且必須是註冊會員
    if ( 1 !== $comment_approved || empty( $commentdata['user_id'] ) ) {
        return;
    }

    $user_id = $commentdata['user_id'];
    $post_id = $commentdata['comment_post_ID'];

    // 取得文章分類
    $categories = get_the_category( $post_id );

    if ( empty( $categories ) ) {
        return;
    }

    foreach ( $categories as $category ) {
        $cat_name = $category->slug;
        
        // 定義 meta key,例如 'score_category_web-design'
        $score_key = 'interest_score_' . $cat_name;
        
        // 取得目前分數,預設為 0
        $current_score = (int) get_user_meta( $user_id, $score_key, true );
        
        // 留言一次 +5 分 (權重可以自己定)
        $new_score = $current_score + 5;
        update_user_meta( $user_id, $score_key, $new_score );

        // 判斷是否達到貼標籤的門檻 (例如 20 分)
        if ( $new_score >= 20 ) {
            eric_apply_interest_tag( $user_id, $category->name );
        }
    }
}
add_action( 'comment_post', 'eric_track_comment_interest', 10, 3 );

/**
 * 貼上興趣標籤的輔助函式
 */
function eric_apply_interest_tag( $user_id, $tag_name ) {
    $current_tags = get_user_meta( $user_id, 'user_interest_tags', true );
    if ( ! is_array( $current_tags ) ) {
        $current_tags = array();
    }

    // 標籤格式例如: "Interest: Web Design"
    $tag_label = 'Interest: ' . $tag_name;

    if ( ! in_array( $tag_label, $current_tags ) ) {
        $current_tags[] = $tag_label;
        update_user_meta( $user_id, 'user_interest_tags', $current_tags );
        
        // 這裡可以觸發通知或 CRM 同步
        error_log( "User {$user_id} has been tagged as {$tag_label}" );
    }
}

進階思維:權重系統與資料清洗

身為資深工程師,我必須提醒你,資料庫不是垃圾場。如果你無止盡地追蹤所有行為,你的 `wp_usermeta` 表格會爆炸,網站效能會被拖垮。在設計「社群標籤自動化」系統時,請務必遵守以下原則:

  1. 設定閾值 (Threshold): 不要使用者點擊一次就貼標籤。這叫「雜訊」,不叫「數據」。上述程式碼中設定的「20分門檻」就是這個用意。
  2. 定期清理 (Decay): 興趣是有時效性的。使用者三年前喜歡「嬰兒用品」,現在小孩都上幼稚園了,你還推銷尿布?你需要寫一個排程(WP-Cron),定期扣除使用者的興趣分數(例如每月 -2 分),這叫做「興趣衰退機制」。
  3. 同步而非囤積: WordPress 適合做「收集端」,但不適合做「分析端」。建議利用 Webhook 將產生的標籤即時送到 n8n 或 CRM 系統,讓專業的工具去跑自動化行銷流程,WordPress 只要保持輕量即可。

整合第三方自動化工具 (Call to Action to n8n)

你可能會問:「Eric,這程式碼寫起來好累,有沒有更聰明的方法?」

當然有。最強大的架構是:WordPress (捕捉行為) -> Webhook -> n8n (邏輯處理) -> CRM (標籤管理)

你可以把上述 PHP 程式碼中的 `eric_apply_interest_tag` 函式修改為發送一個 HTTP POST 請求到 n8n。在 n8n 裡面,你可以視覺化地設計更複雜的邏輯,例如:「如果是 VIP 會員 且 瀏覽了價格頁面,則通知業務;如果是一般會員,則發送優惠券 EDM」。

結論

「社群標籤自動化:依據使用者行為自動貼上興趣標籤」不再是大型電商的專利。透過 WordPress 的 Hook 機制與簡單的 PHP 邏輯,你也能打造出具有商業智慧的網站系統。別讓你的會員名單只是一堆冰冷的 Email,讓它們變成鮮活的、帶有興趣標籤的真實人物吧!

延伸閱讀

想打造自動化標籤系統,卻不知從何下手?

不想手寫程式碼,或者需要更複雜的 CRM 雙向同步架構?浪花科技擁有豐富的企業級 WordPress 開發經驗,能為您量身打造最適合的數位行銷系統。

立即聯繫我們,啟動您的自動化行銷引擎 →

// FAQ

常見問題

WordPress 要怎麼依使用者行為自動貼上興趣標籤?
可以利用 WordPress 的 Hooks 機制捕捉使用者互動,把行為轉化為資料庫中的 usermeta。例如在 wp_login 時判斷登入來源、在 comment_post 時依文章分類累計興趣分數,當分數達到門檻就寫入對應標籤。這比單純「有點擊就貼標籤」更精準,因為留言代表較高的涉入度。
裝了 Google Analytics (GA4) 就等於做了行為追蹤嗎?
不等於。GA4 的數據存放在 Google 那邊,你的 WordPress 資料庫對此一無所知。若要在自家後台為會員貼標籤、做動態行銷,需要自行用 Hook 捕捉互動並寫入 usermeta,而非僅依賴 GA4。
用留言行為判斷興趣,要怎麼設定貼標籤的門檻?
常見做法是監聽 comment_post,只追蹤已核准且為註冊會員的留言,反查文章分類後為對應分類的 interest_score 累加分數(例如每次留言 +5 分)。當分數達到設定門檻(例如 20 分)時,才正式貼上興趣標籤,避免單次互動就污染資料。
為什麼要避免無止盡追蹤所有使用者行為?
因為資料庫不是垃圾場。若無限制地追蹤所有行為,wp_usermeta 表會快速膨脹,進而拖垮網站效能。設計行為標籤系統時應設定權重與門檻,並做好資料清洗,只保留有行銷價值的標籤。
字串比較簽章或標籤時,可以直接用 == 嗎?
在貼標籤前判斷標籤是否已存在,通常用 in_array 即可避免重複。但若涉及安全性比較(例如簽章),不應用 == ,因為一般字串比較會在第一個不同字元就停止,可能被時序攻擊利用,應改用 hash_equals()。
~/roamer-tech/newsletter // FREE
// newsletter

訂閱免費電子報

把 AI 自動化、企業系統設計與 WordPress / Laravel 開發的真實案例和可直接照做的技巧,整理成電子報寄給你。只寄精選內容、不灌垃圾信,一鍵就能退訂。

$
// final.exec()

準備好讓你的網站開始為你工作了嗎?