拒絕手寫地獄!WooCommerce 串接 OpenAI 自動生成「高轉換」產品描述與 SEO 標籤實戰

2026/01/28 | AI 人工智慧新知, API 串接與自動化, WC 開發, WP 開發技巧

拒絕手寫地獄!WooCommerce 串接 OpenAI 自動生成「高轉換」產品描述與 SEO 標籤實戰

嗨,我是 Eric,浪花科技的資深工程師。如果你跟我一樣,曾經對著 Excel 裡那幾百個只有「產品名稱」和「SKU」的空洞欄位發呆,手裡握著冷掉的咖啡,心想:「這世界上難道沒有比手寫 500 個螺絲起子的產品描述更具生產力的事情嗎?」那麼,這篇文章就是為你寫的。

在電商經營中,產品描述(Product Description)SEO 標籤(Meta Tags)是獲取自然流量的靈魂。但現實是,大部分的中小企業電商,要嘛是直接複製原廠那枯燥乏味的規格表,要嘛就是一片空白,這在 Google 眼裡基本上等於「重複內容」或是「低品質頁面」。

今天,我們要來點硬核的技術實戰。我們要利用 WordPress 的 Hook 機制,結合 OpenAI API(GPT-4o 或 GPT-4-turbo),在後台儲存產品的那一瞬間,自動讓 AI 幫我們寫出具備銷售說服力的產品描述,甚至連 Yoast SEO 或 RankMath 的 Meta Description 都一併生成。這不是科幻小說,這是 2025 年電商工程師的基本修養。

為什麼你需要 AI 介入電商內容生成?

除了「懶」這個工程師的最大美德之外,引入 AI 自動化生成還有以下幾個關鍵戰略意義:

  • 消除重複內容(Duplicate Content): 如果你賣的是經銷商品,大家的敘述都一樣。AI 可以根據規格,用不同的語氣重寫內容,讓 Google 認為你的頁面是獨一無二的。
  • 標準化 SEO 結構: 人工撰寫容易遺漏關鍵字,或是 Meta Description 字數超標。透過程式控制 Prompt,我們可以確保產出的內容嚴格遵守 SEO 規範。
  • 規模化速度(Scalability): 上架 1 個商品和上架 1000 個商品,對 AI 來說只是迴圈跑幾次的差別。

技術架構:WordPress Hooks 與 OpenAI API 的華爾滋

我們要實作的邏輯其實很直觀,但魔鬼藏在細節裡。我們不能在每次「更新」時都觸發 AI,不然你的 API 帳單會爆炸,而且原本修好的精美文案會被覆蓋。我們需要設計一個機制:只在內容為空,或是手動觸發時才執行

核心流程圖

  1. 監聽 Hook: 使用 save_post_productwoocommerce_process_product_meta
  2. 條件判斷: 檢查是否為自動儲存(Autosave)、是否已有內容、或者是否有特定的 Checkbox 被勾選(例如:「強制 AI 重寫」)。
  3. 組裝 Prompt: 抓取產品標題、屬性(Attributes)、分類,組裝成給 AI 的指令。
  4. 呼叫 API: 發送請求給 OpenAI。
  5. 寫回資料庫: 更新 post_content 以及 SEO 外掛對應的 post_meta

實戰程式碼:打造 AI 文案生成器

以下程式碼可以直接放入你的佈景主題的 functions.php 或是一個客製化的外掛中。為了方便示範,這裡使用經典的 WordPress HTTP API (wp_remote_post) 來處理請求。

1. 定義 OpenAI 連線與生成邏輯

首先,我們需要一個函數來負責跟 OpenAI 溝通。記得要將你的 API Key 妥善保管,建議放在 wp-config.php 定義常數,不要直接寫死在程式碼裡。


// 在 wp-config.php 中定義: define('OPENAI_API_KEY', 'sk-proj-你的金鑰...');

function roamer_generate_ai_content($product_title, $attributes) {
    $api_url = 'https://api.openai.com/v1/chat/completions';
    $api_key = OPENAI_API_KEY;

    // 構建 Prompt:這裡是靈魂所在
    $prompt = "你是一位專業的 SEO 文案寫手。請根據以下產品資訊,撰寫一段吸引人的繁體中文產品描述(約 300 字),需包含 HTML 標籤(如 <p>, <ul>)。同時,請在最後回傳一段適合 SEO 的 Meta Description(150 字以內),兩者請用 '|||' 分隔。\n\n";
    $prompt .= "產品名稱:" . $product_title . "\n";
    $prompt .= "產品規格特點:" . $attributes . "\n";

    $body = [
        'model' => 'gpt-4o', // 或 gpt-3.5-turbo
        'messages' => [
            ['role' => 'system', 'content' => '你是一個專業的電商文案助理。'],
            ['role' => 'user', 'content' => $prompt]
        ],
        'temperature' => 0.7,
    ];

    $response = wp_remote_post($api_url, [
        'headers' => [
            'Content-Type' => 'application/json',
            'Authorization' => 'Bearer ' . $api_key,
        ],
        'body' => json_encode($body),
        'timeout' => 30 // AI 需要思考,時間設長一點
    ]);

    if (is_wp_error($response)) {
        error_log('OpenAI API Error: ' . $response->get_error_message());
        return false;
    }

    $body = json_decode(wp_remote_retrieve_body($response), true);
    
    if (isset($body['choices'][0]['message']['content'])) {
        return $body['choices'][0]['message']['content'];
    }

    return false;
}

2. 掛載到 WooCommerce 儲存動作

接下來,我們要將這個功能掛載到產品儲存的流程中。這裡 Eric 特別加了一個防呆機制:如果產品描述已經有內容了,我們就跳過,除非你真的很想覆蓋它。


add_action('save_post_product', 'roamer_auto_generate_product_desc', 20, 3);

function roamer_auto_generate_product_desc($post_id, $post, $update) {
    // 1. 基本檢查:避免 Autosave、Revision 或非產品類型
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;
    if (wp_is_post_revision($post_id)) return;
    if ('product' !== $post->post_type) return;

    // 2. 檢查是否已經有內容 (避免重複生成覆蓋手寫內容)
    // 如果你想強制重寫,可以在後台加一個 Checkbox meta field 來判斷,這裡示範最簡單的「空內容才生成」
    if (!empty($post->post_content)) {
        return;
    }

    // 3. 獲取產品資訊
    $product = wc_get_product($post_id);
    $title = $product->get_name();
    
    // 獲取屬性作為參考素材
    $attributes_text = '';
    foreach ($product->get_attributes() as $attribute) {
        $attributes_text .= $attribute->get_name() . ': ' . implode(', ', $attribute->get_options()) . '; ';
    }

    // 4. 呼叫 AI
    $ai_result = roamer_generate_ai_content($title, $attributes_text);

    if ($ai_result) {
        // 分割內容與 Meta Description (根據我們 Prompt 裡的 ||| 分隔符)
        $parts = explode('|||', $ai_result);
        $main_content = trim($parts[0]);
        $meta_desc = isset($parts[1]) ? trim($parts[1]) : '';

        // 5. 更新資料庫
        // 解除 Hook 避免無限迴圈
        remove_action('save_post_product', 'roamer_auto_generate_product_desc', 20);

        // 更新主內容
        wp_update_post([
            'ID' => $post_id,
            'post_content' => $main_content
        ]);

        // 更新 SEO Meta (這裡示範 Yoast SEO 和 RankMath 的 Key)
        if (!empty($meta_desc)) {
            // Yoast SEO
            update_post_meta($post_id, '_yoast_wpseo_metadesc', $meta_desc);
            // RankMath
            update_post_meta($post_id, 'rank_math_description', $meta_desc);
        }

        // 加回 Hook
        add_action('save_post_product', 'roamer_auto_generate_product_desc', 20, 3);
    }
}

Prompt Engineering:決定轉換率的關鍵

程式碼只是載體,真正決定轉換率的是你的 Prompt(提示詞)。在上面的範例中,我使用了一個非常基礎的 Prompt。在實際的商業場景中,Eric 建議你根據不同的產品分類動態調整 Prompt。

例如,如果你賣的是「服飾」,你的 Prompt 應該包含:「請強調材質的親膚性、穿搭場合建議,語氣要時尚且活潑。」如果你賣的是「3C 配件」,Prompt 則應該是:「請條列式呈現技術規格,強調相容性與耐用度,語氣專業且精簡。」

進階技巧:SEO 關鍵字植入

你甚至可以先透過 API 獲取該產品的焦點關鍵字(Focus Keyword),然後強制 AI:「請在文章第一段以及 Meta Description 中自然地包含關鍵字:{focus_keyword}。」這才是真正的 AI 賦能 SEO。

SEO 標籤自動化:Yoast 與 RankMath 的整合

很多工程師只記得更新 post_content,卻忘了 SEO 外掛的欄位是獨立儲存在 post_meta 表格中的。在上面的程式碼中,我們示範了如何同時更新 Yoast SEO (_yoast_wpseo_metadesc) 和 RankMath (rank_math_description) 的欄位。

這一步至關重要。因為 Meta Description 直接影響搜尋結果頁(SERP)的點擊率(CTR)。讓 AI 根據內文總結出 150 字以內的精華,通常比直接擷取內文前 150 字來得更有吸引力。

結語:工具是死的,策略是活的

這套自動化系統能幫你解決 80% 的基礎工作,但剩下的 20%——也就是品牌的溫度與獨特觀點,還是需要人類的審核。建議在實作這套系統時,先將生成的產品狀態設為 draft(草稿)或 pending(待審閱),讓人確認過沒問題後再發布,這才符合 Google E-E-A-T 的高品質內容原則。

如果你對這樣的自動化架構感興趣,但不想自己碰程式碼,或者需要更複雜的邏輯(例如結合 n8n 進行多平台發布),歡迎隨時來找我們聊聊。

立即諮詢 WooCommerce 自動化開發服務

常見問題 (FAQ)

Q1: 使用 OpenAI API 生成內容會很貴嗎?

A: 目前 GPT-4o-mini 的價格非常親民,生成一篇 300 字的產品描述成本通常不到台幣 0.1 元。相比人工撰寫的時間成本,這幾乎可以忽略不計。但若是大量批次處理(例如一次上架萬筆商品),建議留意 API 的 Rate Limit 與總預算控制。

Q2: AI 寫的內容會不會被 Google 懲罰?

A: Google 已經明確表示,他們關注的是「內容的品質」而非「內容是如何產生的」。只要內容對使用者有價值、資訊正確且不只是關鍵字堆砌,AI 輔助生成的內容是可以獲得良好排名的。關鍵在於人工的審核與潤飾。

Q3: 這段程式碼可以直接用在正式網站嗎?

A: 程式碼原則上是可運行的,但每個 WordPress 環境的設定(PHP 版本、外掛衝突)不同。建議先在 Staging(測試環境)進行測試,確認 Hook 觸發時機正確,且不會造成網站卡頓(因為 API 呼叫需要時間,建議配合 Background Processing 或 WP-Cron 進行非同步處理會更完美)。

 
立即諮詢,索取免費1年網站保固