Skip to content

Instantly share code, notes, and snippets.

@jchristopher
Last active May 26, 2022 00:06
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jchristopher/17adfd0f5fe70afeec6424687a357964 to your computer and use it in GitHub Desktop.
Save jchristopher/17adfd0f5fe70afeec6424687a357964 to your computer and use it in GitHub Desktop.
Tell SearchWP to incercept ACF Relationship Field searches
<?php
// Callback to have SearchWP intercept ACF Relationship field searches.
function my_searchwp_acf_relationship_field_search( $args, $field, $post_id ) {
if ( empty( $args['s'] ) || ! class_exists( 'SWP_Query' ) ) {
return $args;
}
// Assume that the SearchWP engine to use is the defined admin search engine
// from SearchWP's Advanced settings screen.
$searchwp_advanced_settings = searchwp_get_option( 'advanced' );
$searchwp_admin_engine = ! empty( $searchwp_advanced_settings['admin_engine'] )
? $searchwp_advanced_settings['admin_engine'] : 'default';
$searchwp_args = array(
'engine' => $searchwp_admin_engine, // The SearchWP engine to use.
's' => $args['s'], // Pass along the search query.
'fields' => 'ids', // Return only post IDs.
);
if ( ! empty( $args['taxonomy' ] ) ) {
$tax_arg = explode( ':', $args['taxonomy'] );
$searchwp_args['tax_query'] = array(
array(
'taxonomy' => $tax_arg[0],
'field' => 'slug',
'terms' => $tax_arg[1],
),
);
}
if ( ! empty( $args['post_type'] ) ) {
$searchwp_args['post_type'] = $args['post_type'];
}
// Tell SearchWP to NOT log this search.
add_filter( 'searchwp_log_search', '__return_false' );
// Retrieve SearchWP results.
$results = new SWP_Query( $searchwp_args );
// If there are no results, we need to force ACF to reflect that.
if ( empty( $results->posts ) ) {
$results->posts = array( 0 );
}
// We're going to use SearchWP's results to handle the restrictions as outlined.
$args['s'] = '';
$args['order'] = '';
$args['orderby'] = 'post__in';
$args['post__in'] = $results->posts;
return $args;
}
// Tell SearchWP to intercept all ACF Relationship field searches.
add_filter(
'acf/fields/relationship/query',
'my_searchwp_acf_relationship_field_search',
90,
3
);
// Tell SearchWP to intercept a single ACF Relationship field search.
// add_filter(
// 'acf/fields/relationship/query/name=my_acf_relationship_field_name',
// 'my_searchwp_acf_relationship_field_search',
// 100,
// 3
// );
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment