Tôi sẽ làm điều đó như sau, tôi chắc chắn các chuyên gia ở đây sẽ có cách tốt hơn nhưng sau đây là những gì tôi có thể đưa ra vội vàng.
Trước tiên hãy tạo tệp điều khiển của bạn trong thư mục chủ đề của bạn (hoặc bất kỳ tệp nào khác nếu bạn muốn) với nội dung sau. Trong ví dụ này, tên tệp là korkmaz.php
CẬP NHẬT 1: Vui lòng thay thế korkmaz.php trước đó vì mở rộng introspector là nguy hiểm, nhiều chức năng không mong muốn đã bị lộ qua URI. Bây giờ chúng ta có một lớp JSON_API_Korkmaz_Controller mới mà không mở rộng bất kỳ lớp khác và Chúng tôi đã loại bỏ các lớp JSON_API_CustomPost .
CẬP NHẬT 2: Bây giờ hỗ trợ truy vấn các nguyên tắc phân loại tùy chỉnh, xem ví dụ ở phía dưới. Bao gồm lớp mô hình mới JSON_API_Term để thể hiện thuật ngữ của bất kỳ loại phân loại nào.
// 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;
}
}
Bây giờ thêm sau vào chức năng của chủ đề của bạn.php
// 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';
}
Bây giờ hãy cài đặt trang cài đặt API Json và bật trình điều khiển korkmaz của bạn.
Bây giờ bạn có thể truy cập các loại bài đăng tùy chỉnh của mình với tất cả các nguyên tắc phân loại được liên kết tại url sau:
http://example.com/api/korkmaz/get_recent_posts/?post_type=myposttype
Bạn có thể truy vấn bất kỳ loại phân loại nào (bao gồm cả phân loại tùy chỉnh) bằng ví dụ sau:
http://example.com/api/korkmaz/get_taxonomy_posts/?taxonomy=my_custom_taxonomy&slug=my_term_slug