web-dev-qa-db-fra.com

Tri des résultats de l'API JSON sur des champs personnalisés

Existe-t-il un moyen immédiat de trier les résultats du plug-in JSON-API en fonction des valeurs des champs personnalisés? La demande est paginée, les résultats devront donc être triés côté serveur.

J'ai une requête http du type:

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

Je voudrais trier sur le champ personnalisé date_value, idéalement sans avoir à créer un nouveau contrôleur dans le plugin json. Est-ce possible?

3
Benny Hallett

En parcourant le code source, ce plug-in mappe la variable de requête orderby à l'argument WP_Query du même nom, orderby.

Cela signifie que vous devriez être capable de faire ce qui suit: 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

6
James Hebden

Vous pouvez trier via javascript .sort() un tableau json.

Votre exemple de chaîne était également fractionnable via php, comme explode()

explode( '&', $your_string );

ou parse_url

Pour trier un JSON avec php, utilisez usort; trouvez-vous des solutions via G * search.

Vous pouvez aussi utiliser json_decode(), ma méthode préférée, et créer un tableau php à partir de l’objet json et l’utiliser sur différentes fonctions php pour trier ce tableau.

2
bueltge

Je suis nouvelle dans l'API JSON mais cela a fonctionné pour moi.

Cette réponse est inspirée par https://wordpress.stackexchange.com/a/18200 et de la documentation sur le contrôleur externe de l'API JSON, comme décrit: ici

Commencez par créer votre fichier de contrôleur mikictrl.php, dans votre répertoire de thème.

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

Puis ajoutez ce qui suit au functions.php de votre thème

// 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';
}

Enfin, accédez à l’API JSON dans wordpress admin et activez le contrôleur Mikictrl.

Vous pouvez maintenant trier une requête par meta_key de vos champs personnalisés:

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

De plus, vous pouvez filtrer par une meta_value si vous remplissez le paramètre value:

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