修改WordPress REST Api请求/响应

时间:2017-11-26 作者:Summer Developer

我正在使用WordPress Rest API构建一个应用程序。

我想对API进行简单调用,例如/wp-json/wp/v2/posts 并让后端系统化地处理和服务/wp-json/wp/v2/posts?per_page=7 而是在引擎盖下。

基本上,我如何覆盖Rest API响应的默认值,而不在查询字符串中指定它们?

同样,我不想在查询字符串中传递参数。我需要简单的查询字符串和标准化响应。

这是:WordPress Docs - Modifying Responses 似乎没有涵盖我的用例,而是添加字段等,这不是我想要做的。我正在寻找一种方法来钩住请求并在返回响应之前对其进行修改。

所以在这个钩子前面有一点:Rest API Hook When Post Is Requested 可能

我推测上面的钩子已经准备好提供响应,我想在此之前钩子以更改请求头。

EDIT:

我找到的最接近的过滤器是:this one 但它似乎永远不会着火。

此外rest_pre_dispatch 正在筛选响应,而不是请求。

没有什么比this 对于Rest API?

如果是这样的话,我如何在不降低服务器速度的情况下更改响应,因为在我将其削减到我真正想要的数量之前,它将默认获取10篇帖子。

2 个回复
SO网友:Marko

我想我找到了你问题的答案,它是:rest_{$this->post_type}_query 过滤器挂钩。使用此挂钩,您可以直接编辑内部WP\\u查询参数。

例如,如果您想对帖子进行内部排序post_title 默认情况下,您必须这样写:

function order_rest_post_by_post_title($args, $request) {
  $args[\'orderby\'] = \'post_title\';
  $args[\'order\'] = \'DESC\';

  return $args;
}
add_filter(\'rest_post_query\', \'order_rest_post_by_post_title\', 10, 2);
欲了解更多信息,请关注this 链接

SO网友:mmm

要定义默认值,可以使用过滤器rest_{$post_type}_collection_params 就像这样:

$post_type = "post";

add_filter("rest_{$post_type}_collection_params", function ($query_params, $post_type) {

    $query_params["per_page"]["default"] = 7;

    return $query_params;

}, 10, 2);

结束

相关推荐

Testing hooks callback

我正在开发一个使用TDD的插件,有一件事我完全没有测试出来,那就是。。。挂钩。我的意思是好的,我可以测试钩子回调,但我如何测试钩子是否真的触发了(自定义钩子和WordPress默认钩子)?我认为一些嘲弄会有所帮助,但我就是想不出我错过了什么。我用WP-CLI安装了测试套件。根据this answer, init 钩子应该触发,但。。。事实并非如此;此外,该代码在WordPress内部工作。根据我的理解,引导程序是最后加载的,所以不触发init是有意义的,所以剩下的问题是:如果触发了挂钩,我该如何测试?谢谢