En édition à ce post ci-dessous:
Problème de taxonomie personnalisée wordpress json
Comment écrire une méthode pour obtenir des catégories avec une taxonomie personnalisée, similaire à Method: get_category_index in core json api controller?
Scénario: J'ai une taxonomie appelée - books qui comporte quatre catégories et j'ai besoin que ces catégories soient générées via get_taxonomy_index.
Quelque chose comme ça http://example.com//api/get_taxonomy_index/?dev=1
Pour répertorier les termes de taxonomie personnalisée dans votre cas books
, nous devrons créer un contrôleur personnalisé pour l'API JSON.
Etape 1:Les 2 classes suivantes doivent être collées dans un fichier php stocké dans votre répertoire de thème (vous pouvez stocker le fichier où vous le souhaitez, mais vous devrez alors vous assurer de renvoyer le chemin correct du fichier. le fichier en code dansStep 2). Le nom de fichier pour cet exemple est: json-api-taxonomy-index.php
<?php
/**
* JSON API custom taxonomy index
**/
/**
* Custom Taxonomy Controller for JSON API plugin
*
* This custom taxonomy controller enables json api to list all terms in specified taxonomy.
**/
class JSON_API_Taxonomy_Controller {
public function get_taxonomy_index() {
$terms = $this->get_terms();
return array(
'count' => count( $terms ),
'terms' => $terms
);
}
public function get_terms() {
global $json_api;
$taxonomy = $this->get_current_taxonomy();
if (!$taxonomy) {
$json_api->error("Not found.");
}
$wp_terms = get_terms( $taxonomy );
$terms = array();
foreach ( $wp_terms as $wp_term ) {
if ( $wp_term->term_id == 1 && $wp_term->slug == 'uncategorized' ) {
continue;
}
$terms[] = new JSON_API_Term( $wp_term );
}
return $terms;
}
protected function get_current_taxonomy() {
global $json_api;
$taxonomy = $json_api->query->get('taxonomy');
if ( $taxonomy ) {
return $taxonomy;
} else {
$json_api->error("Include 'taxonomy' var in your request.");
}
return null;
}
}
// Generic rewrite of JSON_API_Tag class to represent any term of any type of taxonomy in WP
class JSON_API_Term {
var $id; // Integer
var $slug; // String
var $title; // String
var $description; // String
function JSON_API_Term($term = null) {
if ($term) {
$this->import_wp_object($term);
}
}
function import_wp_object($term) {
$this->id = (int) $term->term_id;
$this->slug = $term->slug;
$this->title = $term->name;
$this->description = $term->description;
$this->post_count = (int) $term->count;
}
}
?>
Étape 2:Collez les filtres suivants dans votre fichier functions.php. Si vous n'avez pas enregistré le fichier dans votre répertoire de thème, changez le chemin du fichier dans la fonction set_taxonomy_controller_path
.
function add_taxonomy_controller($controllers) {
$controllers[] = 'Taxonomy';
return $controllers;
}
add_filter('json_api_controllers', 'add_taxonomy_controller');
function set_taxonomy_controller_path() {
return get_stylesheet_directory() . '/json-api-taxonomy-index.php';
}
add_filter('json_api_taxonomy_controller_path', 'set_taxonomy_controller_path');
Étape 3:Goto Settings->JSON API
et Activer le contrôleur de taxonomie.
C'est ce que vous avez terminé! Maintenant, vous pouvez accéder aux termes de votre taxonomie personnalisée à l’aide de json api. Exemple: http://example.com/api/Taxonomy/get_taxonomy_index/?taxonomy=books