SearchWP Documentation

Veja o guia de instalação, navegue pela Base de Conhecimento, descubra os muitos hooks do SearchWP

Interceptar Pesquisas de Campo de Relacionamento do Advanced Custom Fields (ACF)

Advanced Custom Fields tem a opção de adicionar um campo de pesquisa aos campos de Relacionamento:

Campo de Relacionamento ACF

Por padrão, o SearchWP não interceptará essas pesquisas, mas usando este trecho você pode fazer isso acontecer:

<?php
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 engine settings.
$admin_engine = \SearchWP\Settings::get_admin_engine();
$engine_name = ! empty( $admin_engine ) ? $admin_engine : 'default';
$engine = new \SearchWP\Engine( $engine_name );
$engine_sources = $engine->get_sources();
if ( empty( $engine_sources ) ) {
return array( 0 );
}
// Get Source post types
$engine_sources = array_map(
function( $source ) {
$source_name = $source->get_name();
$source_name_parts = explode( SEARCHWP_SEPARATOR, $source_name );
return $source_name_parts[1] ?? false;
},
$engine_sources
);
$engine_sources = array_filter(
$engine_sources,
function( $source ) {
return false !== strpos( $source, 'post' . SEARCHWP_SEPARATOR );
},
ARRAY_FILTER_USE_KEY
);
if ( empty( $engine_sources ) ) {
return array( 0 );
}
$searchwp_args = array(
'engine' => $engine_name, // 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'] = array_intersect( $args['post_type'], array_values( $engine_sources ) );
}
// Tell SearchWP to NOT log this search.
add_filter( 'searchwp\statistics\log', '__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', 10, 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', 10, 3 );

Há algumas coisas a serem observadas com este trecho:

Você pode controlar quais campos de Relacionamento utilizam o SearchWP para pesquisas. A linha 85 usa o hook do ACF para aplicar os resultados do SearchWP a todas as pesquisas de campos de Relacionamento.

Se, em vez disso, você quiser escolher quais campos de Relacionamento você gostaria que o SearchWP funcionasse, comente a linha 85 e descomente a linha 88, certificando-se de atualizar my_acf_relationship_field_name com o nome de um dos seus campos de Relacionamento. Você também pode repetir o hook (atualizando o nome do campo de Relacionamento) para cada campo adicional.

A segunda coisa a notar é que a função de callback my_searchwp_acf_relationship_field_search (que é o que realmente modifica os resultados da pesquisa do ACF para este caso de uso) usa o motor SearchWP que você definiu como o motor de pesquisa Admin na aba Avançado da tela de configurações do SearchWP.

Se você quiser substituir isso, pode fornecer o nome do motor SearchWP a ser usado na linha 13 do trecho.

Uma vez que este hook esteja em vigor, o SearchWP interceptará as pesquisas aplicáveis de Campos de Relacionamento do Advanced Custom Fields, retornando resultados do próprio SearchWP.

Crie uma Experiência de Pesquisa WordPress Melhor Hoje

Nunca mais perca visitantes para resultados de pesquisa inúteis. O SearchWP torna a criação de sua própria pesquisa inteligente do WordPress rápida e fácil.

Get SearchWP Now
Ícone de Múltiplos Mecanismos de Busca