如何删除默认的 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。 但是,如果您这样做,请确保您测试连接的应用程序,因为与所有事情一样,更改可能会破坏事情。 今天发现错误比明天更好。