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
Ich habe das gerade getestet (ich mache genau das Gleiche für ein Projekt) und es hat gut für mich funktioniert.
Tags zu einem benutzerdefinierten Beitragstyp hinzugefügt, führte Folgendes aus:
Und die JSON-Datei sah so aus:
Sind Sie sicher, dass Sie die benutzerdefinierten Taxonomien zum benutzerdefinierten Beitragstyp hinzugefügt haben?
Wenn Sie etwas Komplexeres tun möchten, z. B. eine hierarchische Struktur benutzerdefinierter Taxonomien definieren, kann Ihnen dieser Link helfen .
quelle
/?json=get_recent_posts&post_type=custompost
hat für mich gearbeitet, danke!Es sind Haken vorhanden. http://wordpress.org/extend/plugins/json-api/other_notes/#Filter:-json_api_controllers
quelle