Sometimes you need to customize WordPress REST API to return fewer columns or to have a custom structure. Fortunately, it’s easy to create Custom Endpoints to WordPress REST API.
Use register_rest_route to define your own namespace and version. Then in your callback function, use Custom Queries to define the required results.
Put the code in your functions.php
.
Example
The following code, although simplified, could be the basis for creating Ajax Search on your WordPress website.
function register_demo_search()
{
register_rest_route('pontikis/v1', 'demoSearch', [
'methods' => WP_REST_SERVER::READABLE,
'callback' => 'demo_search_results'
]);
}
function demo_search_results($data)
{
$search_query = new WP_Query([
'post_type' => ['post', 'page'],
'posts_per_page' => -1,
's' => sanitize_text_field($data['term'])
]);
$results = [];
// basic error handling
if (false === isset($data['term']) ) {
return [
'error' => 'No term defined...'
];
} else {
if (true === empty($data['term'])) {
return [
'error' => 'Please give a term to search...'
];
} else {
if (4 > mb_strlen(trim($data['term']))) {
return [
'error' => 'The search term must contain at least 4 characters...'
];
}
}
}
// proceed to database query
while ($search_query->have_posts()) {
$search_query->the_post();
array_push($results, [
'title' => get_the_title(),
'permalink' => get_the_permalink(),
]);
}
wp_reset_postdata();
return $results;
}
add_action('rest_api_init', 'register_demo_search');
Try the following URL, or experiment with “term"
parameter:
https://www.pontikis.net/wp-json/pontikis/v1/demoSearch?term=docker
This will return the titles of all the articles (posts and pages) containing the term “docker”.
Response (at the time of writing the article):
[
{
"title":"Docker In A Nutshell",
"permalink":"https://www.pontikis.net/blog/docker-in-a-nutshell"
},
{
"title":"mkcert – Create and Trust SSL for Development",
"permalink":"https://www.pontikis.net/blog/ssl-for-development-with-mkcert"
},
{
"title":"AWS vs Azure: Which Cloud Platform Should You Learn First?",
"permalink":"https://www.pontikis.net/blog/aws-vs-azure-which-should-you-learn-first"
},
{
"title":"How To Setup The Perfect Linux Workstation With Xubuntu 20.04 LTS Focal Fossa",
"permalink":"https://www.pontikis.net/blog/setup-linux-workstation-with-xubuntu-20-04"
}
]
Reference
See also
Entrepreneur | Full-stack developer | Founder of MediSign Ltd. I have over 15 years of professional experience designing and developing web applications. I am also very experienced in managing (web) projects.