2

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!

1
  • Hi, Could you please share some of the post titles for which API returning the result. I have tried with few titles but it is not working. Commented Jul 12 at 10:11

1 Answer 1

0

Here's the right code I made a mistake with s param

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);
            $query->set('s', '');
        }
    }
}
add_action('pre_get_posts', 'custom_search_query');

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.