I'm trying to integrate a custom search function in my WordPress site where an external API is used to determine search results. The function is supposed to retrieve a list of post IDs from the API based on the search query, and then display those posts as search results.
Here's the core part of my function:
function custom_search_query($query) {
if (!is_admin() && $query->is_main_query() && $query->is_search()) {
$search_query = get_search_query(); // Retrieve the search query
$api_url = 'https://api.adenwalla.in/api/search/data';
$args = array(
'body' => json_encode(array('query' => $search_query)),
'headers' => array('Content-Type' => 'application/json'),
'timeout' => 60
);
$response = wp_remote_post($api_url, $args);
$body = wp_remote_retrieve_body($response);
$results = json_decode($body, true);
if (isset($results['ids']) && is_array($results['ids'])) {
$query->set('post__in', $results['ids']);
$query->set('orderby', 'post__in');
$query->set('posts_per_page', -1);
}
}
}
add_action('pre_get_posts', 'custom_search_query');
However, no posts are returned when using the search, despite confirming that the API does return valid IDs. Could anyone help identify what might be going wrong here? Is there something I'm missing in setting up the query parameters or handling the API response?
Any suggestions or insights would be greatly appreciated!