Wordpress on the docker

docker 真的是讓我又愛又恨啊.....一方面,我再也不需要自己架開發環境了很爽,但另一方面 docker 也有很多詭異的路徑與開發問題。

我真的感覺到,一個完整的範例很重要:哪怕只是複製貼上,那也是搞清楚哪些是內部 API、哪些是可以自訂的的第一步哇。

總之,Docker + WordPress Setup這篇很重要啊,至少讓我知道如果要自訂某個目錄的內容,就要在 docker-compose.yml 用 volume 這指。還有可以用 docker-compose up 把東西弄出來。

接著我想要做個能搞站內 AJAX 請求的小套件,所以我試著照官方手冊做,但到「Creating Endpoints」那邊就碰壁了。

問題是這樣的,我把 AJAX 請求套件放在 src/wp-content/plugins/hello-world,但到我想用 https://ourawesomesite.com/wp-json/hello-world/v1/phrase 測試 API 時,我只能拿到 HTML 的首頁內容,根本就沒有什麼 JSON API。

我找了 register_rest_route,然後看到In a Wordpress plugin, why doesn't register_rest_route() work when called in the activation hook?的問題——但看了後才發現,這討論對我的問題一點幫助也沒有。

我照著Creating Custom API Endpoints in the WordPress REST API,卻發現複製貼上也有問題。

於是,我開始懷疑是不是 docker 的問題,然後找了 wp-json docker 的問答。

<del>感謝老天,WordPress 4.8 on Docker REST API Not Accessible表明,問題果然是出自 docker。</del>

<del>從答案看來,雖然 docker 預設開不了 wp-json 的路徑,但我們可以用 rest_route 來代替。也就是: https://ourawesomesite.com/?rest_route=/hello-world/v1/phrase。</del>

最後,終於成功了。


2020/01/16 增筆

最近寫的時候,我才發現不是 docker 的問題,而是我 Wordpress 沒有開 pretty permalinks 選項。我一直沒有發現他其實在選項裡面。

The Ultimate Guide to WordPress Permalinks