There may be times when you need to add to the WHERE clause within a WP_Query call for additional SQL filtering that cannot easily be achieved via the standard parameters.
The following is a simple example that passes through a search term value and adds a LIKE comparison on the post title.
Add the following to your functions.php file:
function search_title_filter( $where, &$wp_query ) {
global $wpdb;
if ( $search_term = $wp_query->get('keyword_search') ) {
$where .= ' AND ' . $wpdb->posts . '.post_title LIKE \'%' . esc_sql( like_escape( $search_term ) ) . '%\'';
}
return $where;
}
Make use of this within the area of code that you are making the query:
$search_term = 'ABC';
$args = [
'post_type' => 'custom_post_type',
'posts_per_page' => -1,
'keyword_search' => $searchTerm,
];
add_filter( 'posts_where', 'search_title_filter', 10, 2 );
$the_query = new WP_Query( $args );
remove_filter( 'posts_where', 'search_title_filter', 10, 2 );
The array key ‘keyword_search‘ can be changed as required – it is simply referred to in the check within the search_title_filter function.