I took me quite some time to figure out on how to do this – so I’ll post my solution to hopefully help somebody else who’s having the same Problem:
My requirement was to be able to search not only for the title but an ACF field (a number in my particular case) as well.
I stumbled across the second link from Johns answer before and was able to use it for the search functionality of the edit screens of my custom posts – but it was not working for the post object ACF field – since $is_search is not set on ajax requests/queries.
I tried to find another way to identify the query from the post object field and in the end I ended up with the following:
function cf_post_object_query( $args ) {
// Set a query variable to identify the post object query
$args['is_acf_query'] = true;
// return
return $args;
}
// filter for a specific field
add_filter('acf/fields/post_object/query', 'cf_post_object_query');
In combination with Adams filters (slightly customized):
function cf_search_where( $where, $wp_query ) {
global $pagenow, $wpdb;
$is_acf = isset( $wp_query->query['is_acf_query'] ) ? $wp_query->query['is_acf_query'] : false;
if ( is_search() || $is_acf ) {
$where = preg_replace(
"/\(\s*".$wpdb->posts.".post_title\s+LIKE\s*(\'[^\']+\')\s*\)/",
"(".$wpdb->posts.".post_title LIKE $1) OR (".$wpdb->postmeta.".meta_value LIKE $1)", $where );
}
return $where;
}
add_filter( 'posts_where', 'cf_search_where', 10, 2 );
(You’d need to do this for all three of them I suppose)
But it finally works, I can search for the acf field and the title in the post object field.