此页面提供了解使用API时可能出现的常见问题和问题的解决方案。 如果您的问题在这里没有解释,可能已经在WordPress支持论坛中得到回答。 ## 我可以禁用REST API吗? 您不应该禁用REST API,因为这样做会破坏将取决于API处于活动状态的未来WordPress管理功能。 但是,您可以使用过滤器来要求API消费者进行身份验证,从而有效防止匿名外部访问。 有关详细信息,请参阅下文。 ## 需要所有Requests的身份验证 您可以通过向rest_authentication_errors过滤器添加is_user_logged_in检查来要求对所有REST API请求进行身份验证: ``` add_filter( 'rest_authentication_errors', function( $result ) { if ( ! empty( $result ) ) { return $result; } if ( ! is_user_logged_in() ) { return new WP_Error( 'rest_not_logged_in', 'You are not currently logged in.', array( 'status' => 401 ) ); } return $result; }); ``` ## 我可以在插件中从PHP发出API请求吗? 是的你可以! 在其他WordPress代码内部使用rest_do_request来制作API请求: ``` $request = new WP_REST_Request( 'GET', '/wp/v2/posts' ); // Set one or more request query parameters $request->set_param( 'per_page', 20 ); $response = rest_do_request( $request ); ``` ## ?filter =查询参数发生了什么? 当REST API合并到WordPress核心中时,过滤器查询参数被删除,以防止将来的兼容性和维护问题。 在REST API项目的起源上,使用?filter查询参数传递任意WP_Query参数到API的功能是必要的,但大多数API响应过滤功能已经被更强大的查询参数所取代,如?categories =,?slug =和 ?per_page =。 应尽可能使用第一方查询参数。 但是,如果需要,其余的过滤器插件可以恢复在API请求中传递任意的过滤器值的功能。 ## 查询参数不起作用 如果您发现诸如?page = 2或?_embed的查询参数没有任何影响,您的服务器可能没有被正确配置来检测它们。 如果您使用Nginx来为您的网站提供服务,请在您的网站配置中查找一个try_files行。 如果看起来像这样: ``` try_files $uri $uri/ /index.php$args; ``` 改为: ``` try_files $uri $uri/ /index.php$is_args$args; ``` 添加$ is_args(如果找到查询参数,将打印一个字符)将允许WordPress正确接收和解释查询参数。 ## 为什么验证不起作用? 如果您发现您正在发送身份验证标头,但请求未被接受,并且您在CGI环境中使用Apache,则Apache可能会剥离头文件。 尝试将其添加到配置文件或.htaccess中: <IfModule mod_setenvif> SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1 </IfModule>