Classificação dos resultados da API JSON em campos personalizados

3

Existe alguma maneira, fora da caixa, de classificar resultados do plug-in JSON-API com base em valores em campos personalizados? A solicitação é paginada, portanto, os resultados precisarão ser classificados no lado do servidor.

Eu tenho uma solicitação http nos seguintes termos:

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

Gostaria de classificar o campo personalizado date_value , de preferência sem precisar criar um novo controlador no plug-in do json. Isso é possível?

    
por Benny Hallett 21.12.2012 / 07:40

3 respostas

6

Examinando o código-fonte, esse plug-in mapeia a variável de consulta orderby para o argumento WP_Query com o mesmo nome, orderby .

O que isto significa é que você deve ser capaz de fazer o seguinte: 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

    
por James Hebden 06.01.2013 / 00:08
2

Você pode classificar por meio do javascript .sort() a json array.

Sua string de exemplo também foi splitable via php, como explode()

explode( '&', $your_string );

ou parse_url

Para classificar um JSON com php use usort ; você encontra soluções via pesquisa G *.

Além disso, você pode usar json_decode() , minha maneira favorita, e criar uma matriz php a partir do objeto json e usar em funções php diferentes para ordenar este array.

    
por bueltge 21.12.2012 / 09:02
1

Sou novo na API JSON, mas isso funcionou para mim.

Esta resposta é inspirada por enlace e documentação sobre o controlador externo da API JSON, conforme descrito: here

Primeiro, crie seu arquivo mikictrl.php do controlador, no diretório do seu tema.

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
  );
 }
}

Em seguida, adicione o seguinte às funções do seu tema.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';
}

Por fim, acesse a API JSON no WordPress Admin e ative o controlador Mikictrl.

Agora você pode classificar uma consulta por meta_key dos seus campos personalizados:

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

Além disso, você pode filtrar por um meta_value se preencher o parâmetro de valor:

http://example.com/api/Mikictrl/get_custom_posts/?key=_yourcustomfieldkey&value=yourcustomfieldvalue&custom_fields=_yourcustomfieldkey&order=desc&include=title,custom_fields&dev=1
    
por Michaël F 14.02.2013 / 16:39