server = $server; if(!class_exists('WP_JSON_Posts')){ add_action( 'rest_api_init', function () { register_rest_route( 'androapp/v2', '/posts/slug', array( 'methods' => 'GET', 'callback' => array($this, 'get_post_v2'), ) ); register_rest_route( 'androapp/v2', '/posts', array( 'methods' => WP_REST_Server::READABLE, 'callback' => array($this, 'get_posts_by_category_slug'), 'show_in_rest' => true )); }); } } /** * Register the user-related routes * * @param array $routes Existing routes * @return array Modified routes */ public function register_routes( $routes ) { $user_routes = array( // /users/me is an alias, and simply redirects to /users/ '/posts/slug' => array( array( array( $this, 'get_post' ), WP_JSON_Server::READABLE ), ), ); return array_merge( $routes, $user_routes ); } function get_ID_by_slug($page_slug) { return url_to_postid($page_slug); } public function get_posts_by_category_slug( $request ) { if(empty($request['page'])){ $request['page'] = 1; } $filter = $request['filter']; if(array_key_exists('category_name', $filter)){ $cat = get_category_by_slug( $filter['category_name']); if($cat){ $posts = get_posts( array( 'post_type' => 'post', 'posts_per_page' => 10, 'category' => $cat->cat_ID, 'paged' => $request['page'] ) ); } }else if (array_key_exists('tag', $filter)){ $posts = get_posts( array( 'post_type' => 'post', 'posts_per_page' => 10, 'tag' => $filter['tag'], 'paged' => $request['page'] ) ); }else if(array_key_exists('author_name', $filter)){ $user = get_user_by('slug', $filter['author_name']); $posts = get_posts( array( 'post_type' => 'post', 'posts_per_page' => 10, 'author' => $user->ID, 'paged' => $request['page'] ) ); }else{ return array(); } if ( empty( $posts ) ) { return array(); } $controller = new WP_REST_Posts_Controller('post'); foreach ( $posts as $post ) { $response = $controller->prepare_item_for_response( $post, $request ); $data[] = $controller->prepare_response_for_collection( $response ); } return rest_ensure_response( $data ); } public function get_post_v2($data){ return $this->get_post($data['slug']); } /* reference: https://github.com/mcnasby/wp-json-api-menu-controller/blob/master/api-controllers/menus.php */ public function get_post( $slug, $context = 'view' ) { //return "Test".$slug. " ".$this->get_ID_by_slug($slug) ." ". get_category_by_path($slug,false)->cat_ID; $postId = $this->get_ID_by_slug($slug); if(!empty($postId)){ if(class_exists('WP_JSON_Posts') && $this->server != null){ $wp_server_posts = new WP_JSON_Posts( $this->server ); return $wp_server_posts->get_post($postId, $context); }else if(class_exists('WP_REST_Posts_Controller')){ $postdata = get_post( $postId); if($postdata){ $wp_server_posts = new WP_REST_Posts_Controller($postdata->post_type); $request = array(); $request['id'] = $postId; return $wp_server_posts->get_item($request); } } } $category = get_category_by_path($slug,false); if($category){ $menu = array( "id"=>"-1", "parent_id"=>"-1", "menu_order"=>"-1", "name"=>$category->name, "object_type"=>"category", "object_id"=>$category->cat_ID, "link"=> json_url("/taxonomies/category/terms/".$category->cat_ID) ); return $menu; } list($slug, $remaining) = split('/', $slug, 2); $tag = get_term_by('slug', $remaining, 'post_tag'); if($tag){ $menu = array( "id"=>"-1", "parent_id"=>"-1", "menu_order"=>"-1", "name"=>$tag->name, "object_type"=>"tag", "object_id"=>$tag->term_id, "link"=> json_url("/taxonomies/post_tag/terms/".$tag->term_id) ); return $menu; } return "no page found"; } } ?>