WP REST API查询多种帖子类型

时间:2015-08-19 17:15:36

标签: php wordpress rest wordpress-rest-api

我正在尝试使用WP REST API从多个帖子类型中检索帖子。通过这样做,我可以从一个帖子类型book获取Feed:

http://example.com/wp-json/posts?type=book&filter[posts_per_page]=10

现在我想将Feed扩展为bookmovie。这只给了我最后指定的类型:

http://example.com/wp-json/posts?type=book&type=movie&filter[posts_per_page]=10

这给了我一个错误:

http://example.com/wp-json/posts?type[]=book&type[]=movie&filter[posts_per_page]=10

我该如何处理?

谢谢!

编辑:修复了与我实际拥有的语法相匹配的语法。以下是使用此语法http://example.com/wp-json/posts?type[]=book&type[]=movie&filter[posts_per_page]=10时收到的错误:

  

警告:urlencode()期望参数1为字符串,数组在第4128行的/home/newbreak/public_html/wp-includes/formatting.php中给出

     

警告:无法修改标题信息 - 已在/ home / newbreak / public_html / wp-content / plugins / json中发送的标题(在/home/newbreak/public_html/wp-includes/formatting.php:4128中开始输出)第587行-rest-api / lib / class-wp-json-server.php

     

警告:无法修改标题信息 - 已在/ home / newbreak / public_html / wp-content / plugins / json中发送的标题(在/home/newbreak/public_html/wp-includes/formatting.php:4128中开始输出)第587行-rest-api / lib / class-wp-json-server.php

     

警告:无法修改标题信息 - 已在/ home / newbreak / public_html / wp-content / plugins / json中发送的标题(在/home/newbreak/public_html/wp-includes/formatting.php:4128中开始输出)第587行-rest-api / lib / class-wp-json-server.php

     

警告:无法修改标题信息 - 已在/ home / newbreak / public_html / wp-content / plugins / json中发送的标题(在/home/newbreak/public_html/wp-includes/formatting.php:4128中开始输出)第587行-rest-api / lib / class-wp-json-server.php

     

警告:无法修改标题信息 - 已在/ home / newbreak / public_html / wp-content / plugins / json中发送的标题(在/home/newbreak/public_html/wp-includes/formatting.php:4128中开始输出)第587行-rest-api / lib / class-wp-json-server.php

     

警告:无法修改标题信息 - 已在/ home / newbreak / public_html / wp-content / plugins / json中发送的标题(在/home/newbreak/public_html/wp-includes/formatting.php:4128中开始输出)第587行-rest-api / lib / class-wp-json-server.php

我只在将类型作为数组type[]发送时才会收到错误。

2 个答案:

答案 0 :(得分:4)

您还可以尝试注册其他端点,这样您就不必在每个请求中添加任意数量的查询参数。我使用的是最新版本的WP REST API插件。

因此,对于名为"电影"的自定义内容类型,您可以拥有类似wp-json/wp/v2/movies的端点

add_action('rest_api_init', 'register_movies');

function register_movies() {
  $movies_custom_fields = array(
    'director',
    'genre'
  );
  foreach ($movies_custom_fields as $key) {
     register_rest_field('movies', $key, array(
     'schema'          => null,
     'get_callback'    => 'get_movies_data',
   ));
  }
}

function get_movies_data( $object, $field_name, $request ) {
   return get_post_meta( $object[ 'id' ], $field_name, true );
}

有关在WP REST API V2 documentation网站为不同内容类型添加自定义端点的更多文档。

答案 1 :(得分:2)

我们有类似的要求,我们只有一个slu and,需要查询/查找帖子/页面/文章数据。

我们已经构建了一个wordpress api v2插件来查询多个帖子类型。

以下是插件代码https://github.com/elevati/wp-api-multiple-posttype