Dokumenteninhalte an den Inhalt des \"
Dieser Artikel ist eine Erweiterung von Hinzufügen zusätzlicher Daten zu indizierten Einträgen
SearchWP hat die Fähigkeit, Relevanzgewichtungen in verschiedene Richtungen zu übertragen. Eine Richtung ist besonders für Medien relevant, da Sie SearchWP das Gewicht für Medieneinträge auf den jeweiligen „Hochgeladen zu“-Beitrag übertragen lassen können. In der Datenbank wird diese Beziehung über die Spalte post_parent hergestellt.
Wenn diese Gewichtungsübertragung in den Engine-Einstellungen eingerichtet wurde (und am Beispiel von PDFs), wird bei der Suche nach Inhalten, die in einem PDF erscheinen, nicht das PDF selbst als Ergebnis von SearchWP zurückgegeben, sondern stattdessen der Beitrag, an den es angehängt wurde.
Abhängig von Ihrer Website und Ihren Umständen kann dies sehr vorteilhaft sein!
Es gibt jedoch einige Ausnahmefälle, und manchmal ist die Gewichtungsübertragung nicht etwas, das in allen Fällen erfolgen soll. Wir können die Anpassungsfähigkeit von SearchWP nutzen und unsere Implementierung stattdessen anpassen, um:
- Medien vollständig aus der SearchWP-Engine deaktivieren
- Die SearchWP-Indexer-Hooks verwenden und beim Indizieren von Beiträgen alle „untergeordneten“ PDFs abrufen
Diese dynamische Anwendung ermöglicht es uns, die Situation besser von Beitrag zu Beitrag zu bewerten.
All hooks should be added to your custom SearchWP Customizations Plugin.
| <?php | |
| // @link https://searchwp.com/documentation/knowledge-base/append-document-content-to-parent-post-content/ | |
| // Retrieve child PDF content and add as 'extra' data to a SearchWP Entry. | |
| add_filter( 'searchwp\entry\data', function( $data, \SearchWP\Entry $entry ) { | |
| // Convert the SearchWP Entry into it's native object type. | |
| $entry = $entry->native(); | |
| // We only want to consider WP_Post objects. | |
| if ( ! $entry instanceof \WP_Post ) { | |
| return $data; | |
| } | |
| // Retrieve PDFs that have been uploaded to this Entry. | |
| $pdfs = get_posts( [ | |
| 'post_type' => 'attachment', | |
| 'post_mime_type' => 'application/pdf', | |
| 'post_status' => 'inherit', | |
| 'nopaging' => true, | |
| 'post_parent' => $entry->ID, | |
| ] ); | |
| if ( empty( $pdfs ) ) { | |
| return $data; | |
| } | |
| // Retrieve PDF content for PDFs and store as extra data. | |
| $data['meta'][ 'searchwp_child_pdf_content' ] = array_map( function( $pdf ) { | |
| return \SearchWP\Document::get_content( $pdf ); | |
| }, $pdfs ); | |
| return $data; | |
| }, 20, 2 ); | |
| // Add "Attached PDF Content" as available option to SearchWP Source Attributes. | |
| add_filter( 'searchwp\source\attribute\options', function( $keys, $args ) { | |
| if ( $args['attribute'] !== 'meta' ) { | |
| return $keys; | |
| } | |
| // This key is the same as the one used in the searchwp\entry\data hook above, they must be the same. | |
| $pdf_content_key = 'searchwp_child_pdf_content'; | |
| // Add "Attached PDF Content" Option if it does not exist already. | |
| if ( ! in_array( | |
| $pdf_content_key, | |
| array_map( function( $option ) { return $option->get_value(); }, $keys ) | |
| ) ) { | |
| $keys[] = new \SearchWP\Option( $pdf_content_key, 'Attached PDF Content' ); | |
| } | |
| return $keys; | |
| }, 20, 2 ); |
Diese Hooks greifen in den Indizierungsprozess von SearchWP ein und suchen für jeden Beitrag (z. B. Beiträge, Seiten, benutzerdefinierte Beitragstypen) nach PDFs, die zu diesem aktuellen Beitrag „hochgeladen“ wurden (unter Verwendung der etablierten post_parent-Beziehung) und analysieren dann jedes dieser PDFs auf Inhalte.
Der Inhalt aller „untergeordneten“ PDFs wird als zusätzliches benutzerdefiniertes Feld mit dem Namen searchwp_child_pdf_content gespeichert. Der zweite Hook fügt dieses zusätzliche benutzerdefinierte Feld dem Dropdown-Menü für benutzerdefinierte Felder hinzu, wenn Sie die Beitragseigenschaften in Ihrer SearchWP-Engine verwalten. Der Eintrag hat den Namen Angehängter PDF-Inhalt, was Ihnen ermöglicht, dem extrahierten PDF-Inhalt ein individuelles Relevanzgewicht zu geben.
Hinweis: Damit diese Änderung wirksam wird, müssen Sie Ihren Index neu erstellen, indem Sie die Schaltfläche auf der Registerkarte „Engines“ des Einstellungsbildschirms von SearchWP verwenden.

