工程師解放!DALL-E 3 API 打造 WordPress 自動原創配圖流水線
資深工程師 Eric 揭示,告別花費半小時尋找尷尬配圖的痛苦。本文將以「硬核」實戰教你如何利用 OpenAI DALL-E 3 API 與 WordPress Hook 機制,實現文章發布後「精選圖片自動生成」的全自動化流程。我們選擇穩定且成本可控的 DALL-E 3,並提供完整的 PHP 程式碼,教你如何攔截發布狀態並解決 Timeout 等工程師常見問題。這不僅確保了圖片的絕對原創性與 SEO 優勢,還能讓工程師回歸創造。立即深入學習這套實戰架構,將繁瑣的配圖流程交給 AI,讓您的內容帝國效率飛升!
圖片還在手動找?資深工程師教你用 OpenAI DALL-E 3 API 打造 WordPress 自動配圖流水線
嗨,我是 Eric,浪花科技的資深工程師。老實說,身為一個寫程式比寫文章快的技術人,我最痛恨的環節往往不是 Debug,而是寫完技術文章後,還要花半小時去圖庫網站找一張「看起來沒那麼尷尬」的配圖。
你懂那種感覺吧?Unsplash 翻了十頁,每一張都像是千禧年的商業簡報,毫無靈魂。更別提還要擔心版權、裁切尺寸、壓縮檔案大小……這對我們這種追求效率的工程師來說,簡直是時間的黑洞。
「既然能用程式碼解決,為什麼要用手做?」這是我的座右銘。今天,我們不聊虛無縹緲的 AI 趨勢,我們要來點「硬核」的實作。我要教你如何利用 OpenAI 的 DALL-E 3 API,結合 WordPress 的 Hook 機制,打造一個「文章發布即自動配圖」的自動化流水線。這不僅能節省你的時間,還能讓你的 SEO 圖片具有絕對的原創性。
為什麼選擇 DALL-E 3 API 而不是 Midjourney?
很多設計師朋友會問我:「Eric,Midjourney 的畫質不是更好嗎?」
沒錯,Midjourney v6 的光影確實迷人。但從「工程師的自動化思維」來看,Midjourney 目前(截至 2025 年初)仍未提供官方正式的 API,我們必須透過 Discord Bot 或是第三方封裝的 API(不穩定且延遲高)來串接。這對於一個追求穩定運行的企業級 WordPress 網站來說,是一個潛在的風險點。
相對地,OpenAI 的 DALL-E 3 API 提供了極佳的開發者體驗:
- 原生支援:直接透過 OpenAI 官方庫或 REST API 呼叫,穩定性高。
- Prompt 理解力強:你不需要像念咒語一樣寫 Prompt,它對自然語言的理解非常精準,非常適合直接拿「文章標題」或「摘要」來生成圖片。
- 成本可控:Standard 模式的價格對於企業部落格運營來說,完全在可接受範圍內,比買圖庫會員還划算。
實作核心邏輯:攔截 `publish_post`
我們的目標很明確:當編輯在 WordPress 後台按下「發布」按鈕時,系統要自動執行以下動作:
- 抓取文章的標題與摘要。
- 將這些文字組合成給 AI 的繪圖指令 (Prompt)。
- 呼叫 DALL-E 3 API。
- 將回傳的圖片 URL 下載到 WordPress 媒體庫。
- 將下載的圖片設定為該文章的「精選圖片 (Featured Image)」。
事前準備
你需要先去 OpenAI Platform 申請一組 API Key。記得綁定信用卡,不然額度可能會受限。
程式碼實戰 (Code Implementation)
請將以下程式碼加入你佈景主題的 functions.php 檔案中,或是製作成一個簡單的 Plugin。為了相容經典編輯器與各種環境,我們使用原生的 PHP cURL 封裝函式 wp_remote_post。
// 定義 OpenAI API Key (建議放在 wp-config.php 以保安全)
if ( ! defined( 'OPENAI_API_KEY' ) ) {
define( 'OPENAI_API_KEY', 'sk-你的API-Key-填在這裡' );
}
/**
* 當文章狀態轉變為 "publish" 時觸發
*/
function eric_auto_generate_featured_image( $new_status, $old_status, $post ) {
// 1. 檢查是否為新發布的文章 (避免更新舊文章時重複生成)
if ( 'publish' !== $new_status || 'publish' === $old_status ) {
return;
}
// 2. 檢查是否為 "post" 類型 (你可以加入 'page' 或其他 CPT)
if ( 'post' !== $post->post_type ) {
return;
}
// 3. 檢查是否已經有精選圖片 (如果手動設了,就不要覆蓋)
if ( has_post_thumbnail( $post->ID ) ) {
return;
}
// 開始生成流程
$post_title = $post->post_title;
// 設計 Prompt:這一步最關鍵,決定圖片風格
$prompt = "A high-quality, modern, photorealistic featured image for a blog post titled: '{$post_title}'. No text in the image. Minimalist style, suitable for a tech blog.";
// 呼叫 OpenAI DALL-E 3 API
$image_url = eric_call_openai_dalle( $prompt );
if ( $image_url ) {
// 下載並設定為精選圖片
eric_set_image_as_featured( $image_url, $post->ID, $post_title );
}
}
add_action( 'transition_post_status', 'eric_auto_generate_featured_image', 10, 3 );
/**
* 呼叫 DALL-E 3 API 的函式
*/
function eric_call_openai_dalle( $prompt ) {
$api_url = 'https://api.openai.com/v1/images/generations';
$body = [
'model' => 'dall-e-3',
'prompt' => $prompt,
'n' => 1,
'size' => '1024x1024',
];
$response = wp_remote_post( $api_url, [
'headers' => [
'Content-Type' => 'application/json',
'Authorization' => 'Bearer ' . OPENAI_API_KEY,
],
'body' => json_encode( $body ),
'timeout' => 60, // AI 生成需要時間,超時設長一點
] );
if ( is_wp_error( $response ) ) {
error_log( 'OpenAI API Error: ' . $response->get_error_message() );
return false;
}
$data = json_decode( wp_remote_retrieve_body( $response ), true );
if ( isset( $data['data'][0]['url'] ) ) {
return $data['data'][0]['url'];
} else {
error_log( 'OpenAI Response Error: ' . print_r( $data, true ) );
return false;
}
}
/**
* 下載圖片並設為精選圖片
*/
function eric_set_image_as_featured( $image_url, $post_id, $desc ) {
require_once( ABSPATH . 'wp-admin/includes/media.php' );
require_once( ABSPATH . 'wp-admin/includes/file.php' );
require_once( ABSPATH . 'wp-admin/includes/image.php' );
// 下載圖片到媒體庫
$attachment_id = media_sideload_image( $image_url, $post_id, $desc, 'id' );
if ( ! is_wp_error( $attachment_id ) ) {
set_post_thumbnail( $post_id, $attachment_id );
} else {
error_log( 'Image Upload Error: ' . $attachment_id->get_error_message() );
}
}
資深工程師的注意事項 (The “Gotchas”)
這段程式碼看似簡單,但魔鬼藏在細節裡:
- Timeout 設定: DALL-E 3 生成圖片通常需要 10-20 秒,預設的 cURL timeout 只有 5 秒,絕對會 timeout。請務必將
timeout設定為 60 秒以上,否則你的 WordPress 會噴出 504 Gateway Timeout 錯誤。 - Prompt Engineering: 我在程式碼中寫死了一段 “No text in the image”(圖片中不要有文字)。這是因為 AI 目前產字還是很容易變成亂碼,破壞美感。你可以根據你的品牌調性,修改
$prompt變數,例如加入 “Cyberpunk style” 或 “Watercolor style”。 - 圖片大小: DALL-E 3 標準輸出是 1024×1024。這對精選圖片來說有點方。你可以在後續透過 WordPress 的裁切功能處理,或是改用 DALL-E 2 (雖然畫質較差) 指定長寬比。
進階優化:SEO 與圖片壓縮
自動生成的圖片雖然解決了「有圖」的問題,但如果檔案太大,反而會拖累網站速度,影響 Core Web Vitals 分數。
DALL-E 生成的 PNG 檔案通常在 3MB 左右,直接放在前台是災難。建議搭配我在另一篇文章中提到的圖片優化策略,或是使用 n8n 進行更複雜的流程:先將圖片傳送到 TinyPNG 壓縮,轉檔成 WebP 格式,最後再上傳回 WordPress。
此外,別忘了 Alt Text (替代文字)。雖然我們上面的程式碼是用文章標題當作描述,但更進階的做法是,再呼叫一次 GPT-4o 的 API,請它根據圖片內容生成一段精準的 Alt Text,這才是真正的 SEO 全自動化。
結論:讓工程師回歸創造,讓 AI 處理繁瑣
透過這幾十行 PHP 程式碼,你省下的不只是找圖的時間,更是將精力重新聚焦在「內容創作」與「系統架構」上的機會。AI 生成圖片整合 WordPress 實作並不是要取代設計師,而是要解決那些重複性高、創意需求低的配圖工作。
如果你對這種自動化架構感興趣,或是你的企業網站需要更複雜的客製化功能(例如:根據不同分類生成不同風格的圖片、串接 Midjourney),歡迎隨時來找我們聊聊。
推薦閱讀
- 文章寫完圖還沒找?教你用 OpenAI API 打造 WordPress 專屬「詠唱繪圖師」,一鍵生成特色圖片!
- 你的 WordPress 還在人工上架?工程師帶你用 n8n 打造『全自動、防呆、高容錯』的內容流水線
- 圖片載入慢到讓人想砸電腦?WordPress 圖片終極優化聖經:從 Lazy Load 到 WebP 全攻略
常見問題 (FAQ)
Q1: 使用 DALL-E 3 生成一張圖片的成本大概是多少?
截至 2025 年,DALL-E 3 生成一張 1024×1024 的標準圖片約為 $0.04 美元(約台幣 1.2 元)。相比於付費圖庫的訂閱費或單張購買費用,對於大量產出內容的網站來說,CP 值非常高。
Q2: 自動生成的圖片會有版權問題嗎?
根據 OpenAI 目前的使用條款,你擁有你所生成的圖片的所有權(Ownership),這意味著你可以將其用於商業用途。然而,AI 繪圖的版權法律在各國仍有變動,建議持續關注最新的法律規範,但至少比隨意下載網路圖片安全得多。
Q3: 這段程式碼會拖慢我發布文章的速度嗎?
會的。因為 PHP 是單執行緒,呼叫 API 等待圖片生成與下載的過程(約 10-20 秒)會讓你在按下「發布」後感覺卡頓。解決方案是改用「非同步」的方式,例如使用 WordPress 的 WP-Cron 排程,或是將任務丟給外部自動化工具(如 n8n)處理,這樣前台操作就會依然順暢。






