SearchWP Documentation

Visualizza la guida all'installazione, sfoglia la Knowledge Base, scopri i numerosi hook di SearchWP

Intercetta le ricerche del campo Relazione Advanced Custom Fields (ACF)

Advanced Custom Fields ha l'opzione di aggiungere un campo di ricerca ai campi Relationship:

Campo Relazione ACF

Per impostazione predefinita, SearchWP non intercetterà queste ricerche, ma utilizzando questo snippet puoi farlo accadere:

<?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 );

Ci sono un paio di cose da notare con questo snippet:

Puoi controllare quali campi Relationship utilizzano SearchWP per le ricerche. La riga 85 utilizza l'hook di ACF per applicare i risultati di SearchWP a tutte le ricerche dei campi Relationship.

Se invece vuoi scegliere quali campi Relationship desideri che SearchWP utilizzi, commenta la riga 85 e decommenta la riga 88 assicurandoti di aggiornare my_acf_relationship_field_name con il nome di uno dei tuoi campi Relationship. Puoi ripetere l'hook (aggiornando il nome del campo Relationship) anche per ogni campo aggiuntivo.

La seconda cosa da notare è che la callback my_searchwp_acf_relationship_field_search (che è ciò che modifica effettivamente i risultati della ricerca ACF per questo caso d'uso) utilizza il motore SearchWP che hai definito come motore di ricerca Admin nella scheda Avanzate delle impostazioni di SearchWP.

Se desideri sovrascrivere questo, puoi fornire il nome del motore SearchWP da utilizzare alla riga 13 dello snippet.

Una volta che questo hook è attivo, SearchWP intercetterà le ricerche applicabili dei campi Relationship di Advanced Custom Fields, restituendo i risultati da SearchWP stesso.

Crea Oggi Stesso una Migliore Esperienza di Ricerca WordPress

Non perdere mai più visitatori a causa di risultati di ricerca inutili. SearchWP rende la creazione della tua ricerca intelligente WordPress veloce e facile.

Get SearchWP Now
Icona di motori di ricerca multipli