init
操作挂钩。现在,我只想在非REST API请求时执行一些代码。所以我在寻找类似
is_rest()
的命令以执行类似<?php
if( ! is_rest() ) echo 'no-rest-request';
?>
但是我找不到这样的东西。是否有
is_rest()
?#1 楼
@Milo很好,如果将REST_REQUEST
非空,则将true
常量定义为rest_api_loaded()
,在$GLOBALS['wp']->query_vars['rest_route']
内。通过以下方式将其钩接到
parse_request
中:add_action( 'parse_request', 'rest_api_loaded' );
,但
parse_request
的触发时间晚于init
-例如,请参见此处的Codex。 在#34373票中有一个关于
WP_Query::is_rest()
的建议(由Daniel Bachhuber提出),但被推迟/取消。评论
#42061可能会添加wp_is_rest_request()或wp_doing_rest()。
–伊恩·邓恩
20 Mar 10 '20 at 19:40
#2 楼
刚刚偶然发现了相同的问题,并编写了一个简单的函数is_rest
,该函数可让您检查当前请求是否为WP REST API请求。 > https://gist.github.com/matzeeable/dfd82239f48c2fedef25141e48c8dc30
https://twitter.com/matzeeable/status/1052967482737258496
#3 楼
确实有两个选项,检查是否定义了
REST_REQUEST
。将
rest_api_init
钩到要钩住init
的位置。评论
如果您正在使用WP版本4.4.0+(可能是),这是正确的答案。
–马特·利普(Mat Lipe)
20-10-5在19:54
#4 楼
为了解决此问题,我基于以下假设编写了一个简单的自定义函数:如果所请求的URI属于WordPress网站的Rest API URL,那么它就是一个Rest API请求。有效的端点或已验证的端点无法为此功能确定。问题是这样的:URL是否是潜在的Rest API URL? br />
没有对该URL进行硬编码,因此,如果您出于某种原因更改了API URL库,这将适应。
#5 楼
也许不对,但我最后还是if (strpos($_SERVER[ 'REQUEST_URI' ], '/wp-json/') !== false) {
// Cool API stuff here
}
随时告诉我这是否不合适。尝试制作一个有用的插件入门工具以最终分享:https://gitlab.com/ripp.io/wordpress/plugin-starter
评论
我认为,如果您没有相当多的永久链接处于活动状态,这将失败。
– websupporter
19年6月10日在9:34
你绝对是对的
– Charly
19年6月11日在14:25
好的,它需要固定的链接...但是谁不想要它!在我看来,这是最安全的方法。所有其他解决方案都是不错的选择,但是随着时间的流逝,如果您希望您的代码仍然可以在更高版本的wp上运行,在我看来这是一种安全的方法!
– Antony Gibbs
19年7月30日在6:21
#6 楼
实现起来很复杂,原因很长,原因很长。长话短说,WooCommerce就是这样做的,这是一个很好的解决方案:重写“>
function is_rest_api_request() {
if ( empty( $_SERVER['REQUEST_URI'] ) ) {
// Probably a CLI request
return false;
}
$rest_prefix = trailingslashit( rest_get_url_prefix() );
$is_rest_api_request = strpos( $_SERVER['REQUEST_URI'], $rest_prefix ) !== false;
return apply_filters( 'is_rest_api_request', $is_rest_api_request );
}
代码略微适用于StackOverflow。我已将过滤器重命名并使其成为函数,而不是类的公共方法。
评论
也许您可以详细说明非REST请求时要做什么?直到查询解析后才确定请求的类型,这是在初始化之后发生的。还要注意,API的各个部分可以在不是REST请求的请求上内部使用,因此如果依赖于该检测,则可能会破坏某些内容。非常感谢你们俩。 @birgire:能否将其发布为答案,所以我可以检查一下。基本上,这是我的问题的答案:)