SearchWP Documentation

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

ACF-Felder verarbeiten, um erwartete Daten zu indizieren

Manchmal, nachdem Sie Advanced Custom Fields-Felder zu Ihrer SearchWP-Engine-Konfiguration hinzugefügt haben, werden immer noch keine erwarteten Ergebnisse angezeigt.

Dies liegt wahrscheinlich an der Art und Weise, wie ACF die Daten gespeichert hat. Betrachten wir zum Beispiel, wie Beziehungsfelder funktionieren. Nach der Einrichtung des Feldes können Sie eine beliebige Anzahl von Einträgen auswählen und zusammen mit Ihrem Beitrag speichern.

ACF-Beziehungsfeld

Basierend auf der Benutzeroberfläche von ACF ist es sinnvoll zu erwarten, dass alle Eintrags-Titel der ausgewählten Einträge dann durchsuchbar werden, aber das ist nicht der Fall!

ACF speichert nur die Beitrags-IDs der ausgewählten Einträge und genau das indiziert SearchWP. Das ist jedoch für Ihre Website-Besucher nicht sehr nützlich.

Glücklicherweise macht es SearchWP extrem einfach, die Art und Weise zu ändern, wie diese Daten indiziert werden. Anstatt die Beitrags-IDs so zu speichern, wie sie im ACF-Datensatz erscheinen, können wir SearchWP anweisen, den Titel (oder was auch immer!) zu indizieren.

So sieht das in der Praxis aus:

All hooks should be added to your custom SearchWP Customizations Plugin.

<?php
/**
* Tell SearchWP to index the Title from a Relationship ACF field instead of the post ID
*/
add_filter( 'searchwp\source\post\attributes\meta', function( $meta_value, $args ) {
$acf_field_name = 'read_next'; // The ACF Relationship field name.
// If we're not indexing the Read Next field, return the existing meta value.
// This logic also works for sub-fields of an ACF field as well.
if ( $acf_field_name !== substr( $args['meta_key'], strlen( $args['meta_key'] ) - strlen( $acf_field_name ) ) ) {
return $meta_value;
}
// We're going to store all of our Titles together as one string for SearchWP to index.
$content_to_index = '';
if ( is_array( $meta_value ) && ! empty( $meta_value ) ) {
foreach ( $meta_value[0] as $acf_relationship_item ) {
if ( is_numeric( $acf_relationship_item ) ) {
// ACF stores only the post ID but we want the Title.
$content_to_index .= ' ' . get_the_title( absint( $acf_relationship_item ) );
// If you want to index anything else, you can append it to $content_to_index.
}
}
}
// Return the string of content we want to index instead of the data stored by ACF.
return $content_to_index;
}, 20, 2 );

Wenn Ihr Index neu erstellt wird, indem Sie die Schaltfläche „Index neu erstellen“ auf der Registerkarte „Engines“ der SearchWP-Einstellungen verwenden, führt der Indexer von SearchWP den obigen Hook aus, wenn er das ACF-Feld indiziert, und anstatt die Beitrags-IDs zu indizieren, wie sie von ACF gespeichert wurden, ersetzt er diese IDs durch den Titel für jeden Eintrag.

Sie können den Hook anpassen, um beliebige Daten zu indizieren, nicht nur den Titel!

Ein weiteres Beispiel ist die Anpassung dessen, was SearchWP für ein ACF-Auswahlfeld indiziert. Standardmäßig speichert/ruft ACF nur den Wert des Auswahlfeldes ab, aber Sie möchten vielleicht, dass Ihre Besucher auch nach dem Label des Feldes suchen können. Wir können denselben Hook verwenden, um genau das zu tun:

<?php
// Tell SearchWP to index both value and label from ACF Select field.
add_filter( 'searchwp\source\post\attributes\meta', function( $meta_value, $args ) {
$acf_field_name = 'state'; // ACF Select field name.
if ( $acf_field_name !== substr( $args['meta_key'], strlen( $args['meta_key'] ) - strlen( $acf_field_name ) ) ) {
return $meta_value;
}
if ( ! is_array( $meta_value ) ) {
$meta_value = [ $meta_value ];
}
$acf_field_object = get_field_object( $acf_field_name, $args['post_id'] );
// Append the Select label to the Select value.
if ( isset( $acf_field_object['choices'] ) ) {
foreach ( $meta_value as $key => $val ) {
if ( isset( $acf_field_object['choices'][ $val ] ) ) {
$meta_value[ $key ] .= ' ' . (string) $acf_field_object['choices'][ $val ];
}
}
}
return $meta_value;
}, 20, 2 );

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