Read Add a WordPress Search Form in 5 minutes – No code keywords for more information.


WP_Query deals with the posts in an intricate manner as defined in the wp-includes/class-wp-query.php. If you have a whole number of multiple queries, then you can perform multiple loops.

wp_query search multiple keywords


 WordPress also provides to its users the facility to carry on more filters to change the WP_Query with the use of those filters. Also, you must know that the WP_Query accepts only the string of single keywords joined with the help of the + character.

You can also try to write a query where you will be needed to do a full-text search against multiple keywords. At any time, you will get a set of words and it will be good for you if you can query on multiple bits of the metadata.

Moreover, with the WP_Query search for multiple keywords, you will put multiple fields in the query parts. This can be done by adding the extra remaining nesting levels in the URL string.

Firstly, I think you should use WP_Query instead of query_posts. On their documentation for query_posts it mentions:

Note: This function isn’t meant to be used by plugins or themes. As explained later, there are better, more performant options to alter the main query.

Assuming you’d switch to WP_Query, the search parameter or ‘s’ value doesn’t seem to accept an array. According to the documentation, you can only use a string.

Adding an array to this will cause WP_Query to ignore the array.

An approach I followed on a project recently was:

  • See the actual SQL query made by WP_Query You can do this by
// Your sample query
$query = new WP_Query( array( 'cat' => 4 ) );
// Print the SQL query
echo $query->request;
  • Create a custom SQL query based on the one above Have a look at the examples shown in the documentation for “Displaying Posts Using a Custom Select Query”.

It should look like

global $wpdb;
global $post;
$querystr = "
    SELECT DISTINCT wposts.* 
    FROM $wpdb->posts wposts
        LEFT JOIN $wpdb->postmeta wpostmeta ON wposts.ID = wpostmeta.post_id 
        LEFT JOIN $wpdb->term_relationships ON (wposts.ID = $wpdb->term_relationships.object_id)
        LEFT JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)
    WHERE wpostmeta.meta_key = 'customDateField'
        AND wpostmeta.meta_value >= CURDATE()
        AND $wpdb->term_taxonomy.taxonomy = 'category'
        AND $wpdb->term_taxonomy.term_id IN(1,2)
    ORDER BY wpostmeta.meta_value ASC
$wpdb->get_results($querystr, OBJECT);

You should note that data passed to a custom query, need to be sanitized manually.


The WP_Query Generator is a helpful tool for the developers. By using this tool, custom code for the WordPress query with WP_Query class can be created very easily.

Click here to know more:

Wordpress search engine to search multiple keywords

Searches related to wp_query search multiple keywords

Muthali loves writing about emerging technologies and easy solutions for complex tech issues. You can reach out to him through chat or by raising a support ticket on the left hand side of the page.

You may also like