Comment obtenir des sous-catégories avec le plugin wordpress de l'API JSON?
Je vois comment obtenir des catégories, mais comment obtenir des catégories avec des sous-catégories en même temps? Comment dois-je modifier le code existant?
public function get_category_index() {
global $json_api;
$args = null;
if (!empty($json_api->query->parent)) {
$args = array(
'parent' => $json_api->query->parent
);
}
$categories = $json_api->introspector->get_categories($args);
return array(
'count' => count($categories),
'categories' => $categories
);
}
Je sais que nous avons cette réponse qui n'est pas si compréhensible
Avec la version actuelle de "l'API WP" (plug-in API JSON), il existe un moyen simple de récupérer des termes:
GET /taxonomies/<taxonomy>/terms
La méthode responsable est get_taxonomy_terms( $taxonomy )
dans le fichier plugins core .
Vous devrez vérifier is_wp_error()
sur la valeur de retour pour vérifier si la taxonomie existe au moment où vous appelez vos propres appels.
Comme nous parlons d’une nouvelle API principale fonctionnant actuellement en tant que plugin, elle reste proche du noyau lui-même et utilise $terms = get_terms( $taxonomy, $args );
pour récupérer les termes/taxons (catégories, balises post, etc.) d’une taxonomie donnée. Le seul argument par défaut pour cet appel est hide_empty => true
.
En regardant les internes de la fonction principale , vous trouverez un filtre:
$args = apply_filters( 'get_terms_args', $args, $taxonomies );
Donc, appliquez simplement un rappel à ce filtre. Veillez à ne pas intercepter les autres appels.
<?php
/** Plugin Name: (#163923) Alter term fetching args for the WP API/JSON plugin */
add_filter( 'get_terms_args', 'remote_parent_terms_from_json_response', 10, 2 );
function remote_parent_terms_from_json_response( Array $args, Array $taxonomies )
{
// Do not impact subsequent calls and remove the callback. Single running filter cb.
if ( /* some case */ )
{
remove_filter( current_filter(), __FUNCTION__ );
return wp_parse_args( array(
// alter args in here
), $args );
}
// default case
return $args;
}
Juste après l'appel de la base de données avec get_terms()
, la fonction parcourt tous les termes extraits et les "prépare" pour la valeur de retour JSONified à l'aide de la méthode prepare_taxonomy_term( $term )
. Cette méthode a un filtre à sa fin:
return apply_filters( 'json_prepare_term', $data, $term, $context );
Vous pouvez simplement renvoyer FALSE
ou NULL
si un terme de taxonomie ne convient pas (par exemple, être parent et avoir parent => 0
défini), puis exécuter array_filter( $terms )
sur vos données renvoyées pour supprimer tous les termes non définis, faux ou annulés.
Cela pourrait être la solution la plus simple que vous souhaitez utiliser lors du prototypage. Il s’agit également de la solution la plus intensive en bases de données puisque vous récupérez d’abord les termes de la base de données, puis vous les supprimez, ce qui ajoute un temps système supplémentaire à votre demande.