对自定义字段上的JSON-API结果进行排序

时间:2012-12-21 作者:Benny Hallett

有没有现成的方法可以根据自定义字段中的值对JSON-API插件的结果进行排序?请求已分页,因此需要在服务器端对结果进行排序。

我有一个http请求,内容如下:

http://www.example.com/wordpress/?json=get_author_posts&author_slug=user&post_type=custom
&include=title,custom_fields&custom_fields=date_value&count=10&page=1
我想在自定义字段上排序date_value, 理想情况下,无需在json插件中创建新的控制器。这可能吗?

3 个回复
SO网友:James Hebden

查看源代码,此插件映射查询变量orderby 到同名的WP\\u Query参数,orderby.

这意味着您应该能够执行以下操作:http://www.example.com/wordpress/?json=get_author_posts&author_slug=user&post_type=custom&include=title,custom_fields&custom_fields=date_value&count=10&page=1&orderby=date_value

SO网友:bueltge

您可以通过javascript进行排序.sort() json数组。

您的示例字符串也可以通过php拆分,如explode()

explode( \'&\', $your_string );
parse_url

使用php对JSON进行排序usort; 您是否通过G*搜索找到解决方案。

您还可以使用json_decode(), 我最喜欢的方法,并从json对象创建一个php数组,并在上使用different php functions 排序此数组。

SO网友:Michaël F

我不熟悉JSON API,但这对我来说很有用。

这个答案的灵感来自https://wordpress.stackexchange.com/a/18200以及关于JSON API外部控制器的文档,如下所述:here

首先创建控制器文件mikictrl。php,在您的主题目录中。

class JSON_API_Mikictrl_Controller {

  public function get_custom_posts() {
  global $json_api;

  // See also: http://codex.wordpress.org/Template_Tags/query_posts
  $posts = $json_api->introspector->get_posts(array(
    \'meta_key\' => $json_api->query->key,
    \'meta_value\' => $json_api->query->value,
    \'orderby\' => $json_api->query->key
  ));

  return array(
    \'key\' => $json_api->query->key,
    \'value\' => $json_api->query->value,
    \'posts\' => $posts
  );
 }
}
然后将以下内容添加到主题的功能中。php

// Add a custom controller
add_filter(\'json_api_controllers\', \'add_my_controller\');
function add_my_controller($controllers) {
  $controllers[] = \'Mikictrl\';
  return $controllers;
}

// Register the source file for our controller
add_filter(\'json_api_mikictrl_controller_path\', \'mikictrl_controller_path\');
function mikictrl_controller_path($default_path) {
  return get_stylesheet_directory() . \'/mikictrl.php\';
}
最后,转到wordpress admin中的JSON API,并启用Mikictrl控制器。

现在,您可以按自定义字段的meta\\u键对查询进行排序:

http://example.com/api/Mikictrl/get_custom_posts/?key=_yourcustomfieldkey&custom_fields=_yourcustomfieldkey&order=desc&include=title,custom_fields&dev=1
此外,如果填写value参数,则可以按meta\\u值进行筛选:

http://example.com/api/Mikictrl/get_custom_posts/?key=_yourcustomfieldkey&value=yourcustomfieldvalue&custom_fields=_yourcustomfieldkey&order=desc&include=title,custom_fields&dev=1

结束

相关推荐

Sorting by tag or category

以下是场景:用户单击一个标签,该标签会将他们带到所有带有该标签的帖子的列表。有数百篇帖子,因此用户需要一种方法来过滤这些帖子。问题是:如何构建一个下拉列表,用户可以在标记页面上选择按类别进行筛选。例如,按颜色类别过滤所有黄色标记。反之亦然。搜索颜色类别并按黄色标记过滤。