解鎖 WordPress 的無限可能:資深工程師帶你深入 REST API 的黑魔法世界
嗨,我是浪花科技的資深工程師 Eric。身為一個整天跟程式碼和伺服器打交道的工程師,我最常被問到的問題之一就是:「Eric,WordPress 除了做個部落格、企業官網,還能幹嘛?」每次聽到這個問題,我都有點哭笑不得。這就像在問一台法拉利除了代步還能幹嘛一樣。WordPress 的潛力遠超你的想像,而解鎖這股潛力的關鍵鑰匙,就是我們今天的主角——WordPress REST API。
你可能聽過 API 這個詞,但總覺得它很神秘、很高深,是那種只有黑客電影裡才會出現的東西。別擔心,今天我就要用最白話的方式,帶你揭開 WordPress REST API 的神秘面紗,讓你看看這個「黑魔法」到底有多強大。準備好了嗎?泡杯咖啡,讓我們開始吧!
什麼是 WordPress REST API?為什麼你該關心它?
首先,我們得搞懂這串英文到底是什麼意思。API 全名是 Application Programming Interface(應用程式介面),聽起來很繞口對吧?簡單來說,你可以把它想像成一家餐廳的「服務生」。
想像一下,你是顧客(一個應用程式,比如手機 App),廚房是 WordPress 的資料庫(儲存著你的文章、頁面、使用者資料等)。你不可能自己衝進廚房去拿菜吧?你需要一個服務生(API)來幫你點餐、跟廚房溝通、再把做好的菜(資料)端給你。REST (Representational State Transfer) 則是一種設計風格,規定了這位「服務生」該如何有效率地溝通和傳遞資訊。所以,WordPress REST API 就是 WordPress 內建的一位超級服務生,讓外部應用程式可以透過一個標準化的方式,來讀取、新增、修改、刪除你網站上的資料。
這對你有什麼好處?根本是開發者的瑞士刀!
你可能會想:「我又不是開發 App 的,這對我有什麼用?」問得好!REST API 的應用遠比你想的廣泛:
- 前後端分離架構: 這是目前最潮的開發模式之一。你可以用 WordPress 當作純粹的後台內容管理系統(CMS),然後用 React、Vue 或 Angular 這些現代 JavaScript 框架來打造一個極致流暢、互動性超高的前端網站。想了解更多關於前後端分離的優劣與選擇,可以參考我們之前的文章。
- 手機 App 開發: 你的公司想開發一個 iOS 或 Android App,需要同步網站上的最新消息或產品資訊嗎?沒問題,直接透過 REST API 來抓資料就行了,完全不用再另外建立一個資料庫。
- 自動化工作流程: 想要在發布新文章時,自動同步到你的社群媒體、或是發送通知到 Slack 或 Discord?你可以利用像 n8n 這類的自動化工具,透過 REST API 串接各種服務,打造專屬的自動化帝國。
- 整合第三方服務: 讓你的網站和其他平台對話。例如,你可以建立一個端點,讓外部的 CRM 系統能夠讀取你網站上的客戶留言。
開始你的第一次 API 親密接觸
說了這麼多,不如直接動手玩玩看。WordPress REST API 從 4.7 版開始就已經是核心功能了,所以你不需要安裝任何外掛就能使用。
找到你的 API 根路徑 (Root URL)
API 的基礎 URL 通常是你的網站網址後面加上 /wp-json/wp/v2/。舉例來說,如果你的網站是 https://example.com,那麼文章列表的 API 端點(Endpoint)就會是:
https://example.com/wp-json/wp/v2/posts
直接把這個網址貼到你的瀏覽器看看,你會看到什麼?沒錯,一堆看起來像亂碼的文字。這就是 JSON (JavaScript Object Notation) 格式,一種輕量級的資料交換格式,也是 API 世界的通用語言。
解讀 JSON 回應
雖然看起來雜亂,但仔細看,你會發現它其實非常有結構。它會回傳一個陣列(Array),裡面包含了好幾個物件(Object),每個物件都代表一篇文章,裡面有 id、date、slug、title、content 等等所有你需要的資訊。這就是那位「服務生」從廚房端出來的「菜色清單」。
打造你的專屬魔法:建立自訂 API 端點 (Custom Endpoint)
好了,基礎的我們玩過了,現在來點刺激的。WordPress 內建的 API 雖然好用,但有時候我們需要的資料格式比較特殊,或是想一次取得跨不同內容類型的資料。這時候,就是我們工程師大展身手的時候了——建立自訂 API 端點!
這聽起來可能很嚇人,但其實你只需要懂一點點 PHP 就行。我們主要是透過 register_rest_route 這個函式來註冊自己的 API 路徑。囉嗦一下,修改程式碼之前,請務必記得使用子主題(Child Theme)的 functions.php 檔案,或是建立一個自己的外掛來放這些程式碼,千萬不要直接修改核心主題的檔案,不然主題一更新,你的心血就全沒了!
實戰演練:建立一個取得「精選文章」的 API
假設我們想建立一個 API,它只回傳被設定為「精選」的文章,並且只給我們標題、連結和特色圖片這三樣資訊,而不是像預設 API 那樣回傳一大堆東西。這可以大大提升前端載入的速度。
把下面這段程式碼加到你子主題的 functions.php 裡:
add_action( 'rest_api_init', function () {
register_rest_route( 'myplugin/v1', '/featured-posts/', array(
'methods' => 'GET',
'callback' => 'get_my_featured_posts',
'permission_callback' => '__return_true' // 注意:這裡為了教學方便設為公開,實際上線應做權限控管
) );
} );
function get_my_featured_posts( WP_REST_Request $request ) {
$args = array(
'posts_per_page' => 5,
'meta_key' => '_is_featured', // 假設我們用一個自訂欄位 _is_featured 來標記精選文章
'meta_value' => 'yes'
);
$posts = get_posts( $args );
if ( empty( $posts ) ) {
return new WP_Error( 'no_posts', '找不到任何精選文章', array( 'status' => 404 ) );
}
$data = array();
foreach ( $posts as $post ) {
$post_data = array(
'title' => $post->post_title,
'link' => get_permalink( $post->ID ),
'featured_image' => get_the_post_thumbnail_url( $post->ID, 'full' )
);
$data[] = $post_data;
}
// 使用 WP_REST_Response 來回傳資料是個好習慣
return new WP_REST_Response( $data, 200 );
}
儲存後,你現在可以試著訪問 https://example.com/wp-json/myplugin/v1/featured-posts/。看到了嗎?你成功建立了一個完全客製化的 API!它只回傳你精確指定的資料,乾淨又高效。
安全!安全!安全!重要的事說三遍
在上面的範例中,我用了一個 'permission_callback' => '__return_true',這代表任何人都可以存取這個 API。在測試時這樣很方便,但在正式環境中,這絕對是個災難!你必須根據你的需求設定權限。例如,只有登入的使用者才能存取,或是只有具備特定權限(如編輯)的使用者才能執行 POST 請求來新增資料。WordPress 提供了 current_user_can() 這類函式來幫助你做權限檢查,請務必、務必、務必做好它!我可不想半夜接到電話說網站被駭了,結果是因為一個 API 權限沒設好。
結語:從 CMS 到應用程式開發框架
看到這裡,你應該已經明白,WordPress REST API 不僅僅是一個功能,它是一種思維的轉變。它將 WordPress 從一個單純的內容管理系統,提升到一個強大的、無頭(Headless)的後端應用程式框架。這意味著你的內容不再被侷限於傳統的網站主題中,而是可以自由地流動到任何你需要的地方。
這趟 REST API 的探索之旅只是個開始。你可以進一步研究身分驗證(Authentication)、快取機制(Caching)、以及如何處理更複雜的資料請求。這條路充滿挑戰,但也充滿了無限的創造可能。
延伸閱讀
- 告別「在我電腦明明可以跑」的惡夢:WordPress Docker 容器化部署終極教學
- 前後端分離還是大一統?Laravel + Vue / React 整合全攻略,資深工程師帶你選對路
- 用 n8n 為 WordPress 注入自動化靈魂:你該知道的五大應用場景
有更複雜的 API 整合或 WordPress 客製化需求嗎?
如果你的專案需要更深入的 API 整合、客製化開發,或是想打造高效能的前後端分離架構,但不知從何下手?別擔心,浪花科技的團隊擁有豐富的實戰經驗,能為你提供最專業的技術支援。立即填寫表單聯繫我們,讓我們一起將你的想法變成現實!






