前言
這段 PHP 程式碼是一個 WordPress 管理後台的批量生成 SEO 摘要(excerpt)工具,利用 OpenAI API 自動為文章產生符合 SEO 需求的摘要文字。適合需要快速為大量文章補充或優化 meta description 的網站管理者與開發者,尤其是希望結合 AI 自動化生成摘要的工程師或自學者。
功能概述與設計
本工具提供一個後台管理頁面,允許使用者設定想要批量處理的文章類型(Post Type)、目標摘要字數、是否只生成空白摘要的文章,以及排除特定文章 ID。除了批量處理外,也支援單篇測試生成,方便調整摘要風格與長度。
管理頁面與設定儲存
透過 add_management_page 新增管理頁面,並以表單方式呈現設定選項。設定包含:
- 選擇 Post Type
- 目標字數(限制在 60 到 200 字)
- 是否只對空白摘要文章生成
- 全域排除文章 ID
- 單篇測試生成功能
設定透過 admin_init 的 POST 請求保存,並使用 WordPress 的 nonce 機制與權限檢查確保安全。
單篇測試生成
使用者輸入文章 ID 後,前端透過 AJAX 呼叫 aiex_test_generate,後端取得文章內容後呼叫核心函式 aiex_generate_excerpt_for_post,使用 OpenAI API 產生摘要文字,回傳給前端顯示但不寫入資料庫。
批量生成與寫入
批量功能每次處理 10 篇文章,依據設定過濾排除文章(排除 ID、勾選略過 meta、已有摘要且設定只處理空白摘要)。
使用 WP_Query 依序取得文章,並呼叫相同的生成函式取得摘要,再用 wp_update_post 更新文章摘錄欄位。批量進度透過 transient 紀錄偏移量,避免重複處理。
互動式前端 UI
透過 JavaScript 實現批量開始、停止、進度條顯示與日誌紀錄,增強使用者體驗。批量完成後會提醒使用者停用程式碼片段並撤銷 API Key,避免安全風險。
核心生成邏輯解析
aiex_generate_excerpt_for_post 函式負責:
- 清理文章標題與內容,去除短碼與 HTML 標籤,限制輸入長度(最多 3000 字元)。
- 組合系統角色與使用者提示,明確要求生成符合 SEO 需求的繁體中文摘要,且限制字數範圍與格式。
- 透過
wp_remote_post呼叫 OpenAI Chat Completion API,並處理回應。 - 對生成文字做長度硬限制與尾端標點修剪,確保摘要適合放入 WordPress excerpt 欄位。
此設計確保生成內容自然且不包含不必要的自我指涉或格式符號,符合 SEO 友善的描述需求。
實務應用與延伸
- 可用於大型內容網站快速補齊缺失的 SEO 摘要,提升搜尋排名與點擊率。
- 透過排除 ID 與單篇略過 meta,靈活控制哪些文章需要自動生成。
- 可擴充支援多種語言或不同 AI 模型,依照帳號權限調整。
- 前端 UI 可優化為更完整的進度管理與錯誤重試機制。
- 注意 API Key 的安全性,建議執行後立即停用並撤銷 Key。
常見問題與注意事項
- API Key 寫死風險:程式碼中硬編 API Key,使用完畢務必停用並撤銷,避免外洩。
- 摘要覆蓋問題:設定中可選擇只對空白摘要生成,避免覆蓋手動編輯內容。
- 批量效能:每次處理 10 篇避免伺服器負擔過重,可依需求調整批次大小。
- OpenAI 回應限制:API 回應失敗或超時時會跳過該篇文章,需留意日誌。
完整程式碼
<?php
/**
* WPCode: AI SEO Excerpt 批量生成工具(可選 Post Type / 排除單篇 / 測試單篇 / 批量處理 + 互動 UI)
* ⚠️ 注意:此版本把 OpenAI API Key 寫死在程式內。跑完請立刻停用/刪除 snippet。
*/
if (!defined('ABSPATH')) exit;
const AIEX_OPT_KEY = 'aiex_settings';
const AIEX_META_SKIP = '_aiex_skip_excerpt';
// ✅ 直接把你的 OpenAI Key 貼在這裡(跑完就刪掉/撤銷)
const AIEX_OPENAI_API_KEY = '';
// 可選:模型(依你帳號可用模型調整)
const AIEX_OPENAI_MODEL = 'gpt-4.1-mini';
/** =========================
* Admin Menu Page
* ========================= */
add_action('admin_menu', function () {
add_management_page(
'AI Excerpt 批量生成',
'AI Excerpt 批量生成',
'manage_options',
'aiex-bulk-excerpt',
'aiex_render_admin_page'
);
});
function aiex_render_admin_page() {
if (!current_user_can('manage_options')) wp_die('沒有權限');
$opts = get_option(AIEX_OPT_KEY, [
'post_type' => 'post',
'exclude_ids' => '',
'target_chars' => 140,
'only_if_empty' => 1,
]);
$post_types = get_post_types(['public' => true], 'objects');
?>
<div class="wrap">
<h1>AI Excerpt 批量生成</h1>
<?php if (!AIEX_OPENAI_API_KEY || AIEX_OPENAI_API_KEY === 'PASTE_YOUR_OPENAI_KEY_HERE'): ?>
<div class="notice notice-error"><p>
請先把 <code>AIEX_OPENAI_API_KEY 改成你的 key(目前還是預設字串)。