Ich hätte es wie folgt gemacht: Ich bin sicher, dass Experten hier einen besseren Weg haben werden, aber das Folgende ist das, was ich mir in Eile einfallen lassen könnte.
Erstellen Sie zuerst Ihre Controller-Datei in Ihrem Themenverzeichnis (oder einem anderen, wenn Sie möchten) mit dem folgenden Inhalt. In diesem Beispiel lautet der Dateiname korkmaz.php
UPDATE 1: Bitte ersetzen Sie die vorherige Datei korkmaz.php, da das Erweitern des Introspektors gefährlich war. Viele unerwünschte Funktionen wurden über URI verfügbar gemacht. Jetzt haben wir eine neue JSON_API_Korkmaz_Controller Klasse , die nicht erstreckt andere Klasse und wir haben die JSON_API_CustomPost Klasse entfernt .
UPDATE 2: Unterstützt jetzt das Abfragen benutzerdefinierter Taxonomien (siehe Beispiel unten). Enthält die neue Modellklasse JSON_API_Term zur Darstellung von Begriffen jeder Art von Taxonomie.
// most of the functions here are rewrite of json-api functions
class JSON_API_Korkmaz_Controller {
public function get_recent_posts() {
global $json_api;
$posts = $json_api->introspector->get_posts();
foreach ($posts as $jpost) {
$this->add_taxonomies( $jpost );
}
return $this->posts_result($posts);
}
protected function posts_result($posts) {
global $wp_query;
return array(
'count' => count($posts),
'count_total' => (int) $wp_query->found_posts,
'pages' => $wp_query->max_num_pages,
'posts' => $posts
);
}
protected function add_taxonomies( $post ) {
$taxonomies = get_object_taxonomies( $post->type );
foreach ($taxonomies as $tax) {
$post->$tax = array();
$terms = wp_get_object_terms( $post->id, $tax );
foreach ( $terms as $term ) {
$post->{$tax}[] = $term->name;
}
}
return true;
}
public function get_taxonomy_posts() {
global $json_api;
$taxonomy = $this->get_current_taxonomy();
if (!$taxonomy) {
$json_api->error("Not found.");
}
$term = $this->get_current_term( $taxonomy );
$posts = $json_api->introspector->get_posts(array(
'taxonomy' => $taxonomy,
'term' => $term->slug
));
foreach ($posts as $jpost) {
$this->add_taxonomies( $jpost );
}
return $this->posts_object_result($posts, $taxonomy, $term);
}
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;
}
protected function get_current_term( $taxonomy=null ) {
global $json_api;
extract($json_api->query->get(array('id', 'slug', 'term_id', 'term_slug')));
if ($id || $term_id) {
if (!$id) {
$id = $term_id;
}
return $this->get_term_by_id($id, $taxonomy);
} else if ($slug || $term_slug) {
if (!$slug) {
$slug = $term_slug;
}
return $this->get_term_by_slug($slug, $taxonomy);
} else {
$json_api->error("Include 'id' or 'slug' var for specifying term in your request.");
}
return null;
}
protected function get_term_by_id($term_id, $taxonomy) {
$term = get_term_by('id', $term_id, $taxonomy);
if ( !$term ) return null;
return new JSON_API_Term( $term );
}
protected function get_term_by_slug($term_slug, $taxonomy) {
$term = get_term_by('slug', $term_slug, $taxonomy);
if ( !$term ) return null;
return new JSON_API_Term( $term );
}
protected function posts_object_result($posts, $taxonomy, $term) {
global $wp_query;
return array(
'count' => count($posts),
'pages' => (int) $wp_query->max_num_pages,
'taxonomy' => $taxonomy,
'term' => $term,
'posts' => $posts
);
}
}
// 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;
}
}
Fügen Sie nun Folgendes zur Datei functions.php Ihres Themas hinzu
// Add a custom controller
add_filter('json_api_controllers', 'add_my_controller');
function add_my_controller($controllers) {
$controllers[] = 'Korkmaz';
return $controllers;
}
// Register the source file for our controller
add_filter('json_api_korkmaz_controller_path', 'korkmaz_controller_path');
function korkmaz_controller_path($default_path) {
return get_stylesheet_directory() . '/korkmaz.php';
}
Gehen Sie nun zur Seite mit den Json-API-Einstellungen und aktivieren Sie Ihren Korkmaz-Controller.
Jetzt können Sie unter der folgenden URL auf Ihre benutzerdefinierten Beitragstypen mit allen zugehörigen Taxonomien zugreifen:
http://example.com/api/korkmaz/get_recent_posts/?post_type=myposttype
Sie können jede Art von Taxonomie (einschließlich benutzerdefinierter Taxonomien) anhand des folgenden Beispiels abfragen:
http://example.com/api/korkmaz/get_taxonomy_posts/?taxonomy=my_custom_taxonomy&slug=my_term_slug