SearchWP Documentation

Sehen Sie sich die Installationsanleitung an, durchsuchen Sie die Wissensdatenbank und erfahren Sie mehr über die vielen Hooks von SearchWP

Abfangen von Suchanfragen f\"ur Advanced Custom Fields (ACF) Relationship-Felder

Erweiterte benutzerdefinierte Felder bieten die Möglichkeit, ein Suchfeld zu Beziehungsfeldern hinzuzufügen:

ACF-Beziehungsfeld

Standardmäßig fängt SearchWP diese Suchen nicht ab, aber mit diesem Snippet können Sie das erreichen:

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

Es gibt ein paar Dinge, die bei diesem Snippet zu beachten sind:

Sie können steuern, welches/welche Beziehungsfeld(er) SearchWP für Suchen verwendet. Zeile 85 verwendet den Hook von ACF, um die Ergebnisse von SearchWP auf alle Beziehungsfeld-Suchen anzuwenden.

Wenn Sie stattdessen auswählen möchten, mit welchen Beziehungsfeldern SearchWP funktionieren soll, kommentieren Sie Zeile 85 aus und kommentieren Sie Zeile 88 ein. Stellen Sie sicher, dass Sie my_acf_relationship_field_name mit dem Namen eines Ihrer Beziehungsfelder aktualisieren. Sie können den Hook (mit Aktualisierung des Beziehungsfeldnamens) für jedes zusätzliche Feld wiederholen.

Das zweite zu beachtende ist, dass der Callback my_searchwp_acf_relationship_field_search (der die ACF-Suchergebnisse für diesen Anwendungsfall tatsächlich modifiziert) die SearchWP-Engine verwendet, die Sie als Admin-Such-Engine auf der Registerkarte „Erweitert“ der SearchWP-Einstellungen definiert haben.

Wenn Sie dies überschreiben möchten, können Sie den Namen der zu verwendenden SearchWP-Engine in Zeile 13 des Snippets angeben.

Sobald dieser Hook eingerichtet ist, fängt SearchWP die zutreffenden erweiterten benutzerdefinierten Feld-Beziehungsfeld-Suchen ab und liefert Ergebnisse von SearchWP selbst.

Erstellen Sie noch heute eine bessere WordPress-Sucherfahrung

Verlieren Sie nie wieder Besucher an unzureichende Suchergebnisse. SearchWP macht die Erstellung Ihrer eigenen intelligenten WordPress-Suche schnell und einfach.

Get SearchWP Now
Symbol für mehrere Suchmaschinen