Create a JSON Endpoint in WordPress
If you’re a WordPress developer, sooner or later you’re going to need to create a JSON endpoint. Fortunately, WordPress makes it relatively easy to do so. In this blog post, we’ll show you how to create a JSON endpoint in WordPress.
The first thing you need to do is create a plugin. To do that, simply create a new folder in your WordPress installation’s wp-content/plugins directory. For this example, we’ll call the folder custom_rest. Inside that folder, create a new file called custom_rest.php. The contents of that file should be as follows:
The contents of that file should be as follows:
add_action('rest_api_init', function () {
register_rest_route( 'custom-rest/v1', 'posts', [
'methods' => 'GET',
'callback' => 'custom_rest_posts_by_types',
'permission_callback' => function() {
return true;
}
]);
register_rest_route( 'custom-rest/v1', 'post/id/(?P<id>\d+)', [
'methods' => 'GET',
'callback' => 'custom_rest_posts_by_id',
'args' => [
'id' => [
'validate_callback' => function($param, $request, $key) {
return is_numeric( $param );
}
],
],
]);
});
function custom_rest_posts_by_types($request){
$types = ['type_a', 'type_b', 'type_c'];
global $wpdb;
$result = [];
foreach ($types as $type) {
//get post by type
$posts_by_type = $wpdb->get_results("SELECT DISTINCT pm.post_id FROM {$wpdb->prefix}postmeta as pm WHERE pm.meta_key LIKE 'component_type' AND lower(pm.meta_value) LIKE '%".strtolower($type)."%'");
$post_ids = [];
foreach ($posts_by_type as $key => $p) {
$result[$p->post_id] = [
'id' => $p->post_id,
];
}
}
return new WP_REST_Response($result, 200);
}
function custom_rest_posts_by_id($request){
$id = $request['id'];
$post = get_post($id);
return new WP_REST_Response([$post], 200);
}
Then any app can access this endpoint at http://example.com/wp-json/custom-rest/v2/posts and http://example.com/wp-json/custom-rest/v2/post/id/[id].