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 選項。我一直沒有發現他其實在選項裡面。