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?
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
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.
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