如何刪除默認的 WordPress REST API 路由和端點
已發表: 2018-07-31WordPress REST API 於 2016 年 12 月在 4.7 版 (Vaughan) 中引入核心。與對 WP 核心所做的任何其他重大更改一樣,它引起了激烈的爭論(目前,2018 年 7 月,古騰堡是此類爭論的主題/爭議)。 最後,什麼也沒發生。 那些不關心 REST API 的人仍然不關心。 那些關心的人製作了一些應用程序、集成、插件和其他很酷的項目。
當#wordpress REST API 被合併到 v4.7 核心時,人們都嚇壞了! 就像他們在發生任何變化時都會驚慌失措一樣。 最後,一切都很好。
點擊推文當我們談論很酷的項目時。 你知道最成功的都是從即將推出的頁面開始的嗎? 在很多情況下,這是一個使用即將推出和維護模式插件構建的即將推出的頁面。
該插件帶有拖放構建器、170 多個主題、一流的 SEO 設置、自動回復和電子郵件服務以及許多其他功能,可讓您在幾分鐘內創建完美的即將推出的頁面。 最重要的是,該插件與Depositphotos 集成,這意味著您可以直接從插件中找到最佳視覺效果。 但如果您不是Depositphotos 產品系列的粉絲,Yay Images 也是庫存內容的重要來源。
但這已經足夠了,讓我們回到我們的主題,REST API。
我們確實關心 REST API 並在構建 WP 驅動的 SaaS 時使用它。 它穩定、快速、易於使用,非常適合 WP,並且在大多數情況下都有據可查。 如果您不知道什麼是 REST API,那麼這篇文章可能不適合您,但請查看什麼是 REST API(視頻和文本),也許您會在下一個項目中使用它。
路線? 端點? 不都是一樣的嗎?
不,不一樣。 對大多數人來說,區別是微妙的,他們交替使用術語路由和端點,但這並不復雜。 路由或多或少是 URL。 它是用於訪問端點的“名稱”。 在單個路由上,您可以有多個端點,因為您使用的端點取決於您使用的 HTTP 請求類型。 GET
、 POST
、 PUT
或DELETE
可以而且通常確實服務於不同的目的。 通過GET
訪問 yoursite.com/wp-json/v2/posts/1 將獲得 ID #1 的帖子的詳細信息。 在同一條路線上使用DELETE
將調用刪除該帖子的不同端點(或函數,如果您願意)。 官方 REST API 手冊有更多關於這個主題的信息,所以請深入了解詳細信息。
#wordpress REST API 路由和端點不是一回事! 路由是用於訪問端點的“名稱”。 單個路由通常與多個端點相關聯。
點擊推文為什麼要刪除默認的 WP REST API 端點或路由?
正如我們在關於刪除默認重寫規則的文章中所討論的那樣——WordPress 開發人員這樣做有一百個原因。
“這將使 WordPress 更快,因為它不必解析所有這些端點。” 仍然是我不同意的事情,並相信增益將不到一毫秒,但不會受到傷害。
你喜歡保持乾淨,因為你不使用 REST API——為什麼要有 API 路由? 當然,有道理。 但在這種情況下,請使用插件完全禁用 REST API。
然後是我們禁用默認路由(和端點)的原因。 我們大量使用自定義 REST API 端點,但不需要默認端點。 因此,保持東西簡潔乾淨是件好事。 它也不會損害安全性,因為我們將更少的數據暴露給嚴酷的外部世界。
顯示默認 API 端點
端點參考可在 REST API 手冊中找到。 任何公開可用的數據或多或少都可以通過 REST API 獲得。 對 demo.wp-api.org/wp-json/wp/v2/posts 的示例請求將顯示十個 JSON 格式的帖子。 如果您想要該響應的人類可讀版本,則需要解碼 JSON 響應。 頁面、類別和其他數據結構也是如此。 如果您瀏覽參考資料,可以看到數據結構和端點非常相似。
查看默認路由的另一種方法是將此代碼添加到主題的functions.php
文件中,然後打開 yoursite.com/wp-json/。 如果您還沒有啟用漂亮的鏈接。
add_filter( 'rest_endpoints', 'show_default_endpoints' ); function show_default_endpoints( $endpoints ) { var_export( array_keys( $endpoints ) ); die; }
它顯示了默認的 31 個 REST 端點。 當然,隨著新核心功能的添加,這個數字很容易發生變化。 如果您有任何添加自定義端點的插件,情況會有所不同。
刪除默認端點
上面的代碼只需要很少的改動。 返回一個空數組,所有端點都消失了。
add_filter( 'rest_endpoints', 'remove_default_endpoints' ); function remove_default_endpoints( $endpoints ) { return array( ); }
“所有端點”也包括您的自定義端點,因此最好不要刪除它們。 這是讓它們保持活躍的簡單方法:
add_filter( 'rest_endpoints', 'remove_default_endpoints_smarter' ); function remove_default_endpoints_smarter( $endpoints ) { $prefix = 'your_custom_endpoint_prefix'; foreach ( $endpoints as $endpoint => $details ) { if ( !fnmatch( '/' . $prefix . '/*', $endpoint, FNM_CASEFOLD ) ) { unset( $endpoints[$endpoint] ); } } return $endpoints; }
只需使用您的自定義前綴跳過端點並將它們保存在數組中。 不要忘記返回數組。
自定義 REST URL 前綴
自定義端點,儘管是自定義的,但使用與默認端點相同的前綴。 它們看起來像 mysite.com/wp-json/custom-endpoint/。 也許你覺得醜陋或不喜歡默認的東西。 更改它是一行代碼的問題。 出於測試目的,將下面的代碼放在主題的functions.php
中,並在保存打開的儀表板 - 設置 - 永久鏈接後刷新重寫規則。
add_filter( 'rest_url_prefix', 'rest_url_prefix' ); function rest_url_prefix( ) { return 'api'; }
使用上面的過濾器,您的端點將是 mysite.com/api/custom-endpoint/ 並且打開舊的 mysite.com/wp-json/custom-endpoint/ URL 將產生 404 錯誤。
確保在自定義端點中包含版本號,因為 WP 不會自動添加前綴。 版本號前綴可確保後續更改不會破壞使用舊端點的客戶端。 只需在調用register_rest_route()
時包含版本前綴即可獲得類似 mysite.com/api/v1/custom-endpoint/ 的內容,並將所有端點保留在該“v1”之後,以便稍後可以使用“v2”等。
測試您的更改
刪除或修改 REST API 路由和端點不會對 98% 的 WP 站點產生任何影響。 “為什麼?” – 因為他們根本不使用 REST API。 但是,如果您這樣做,請確保您測試連接的應用程序,因為與所有事情一樣,更改可能會破壞事情。 今天發現錯誤比明天更好。