Aggiungi il contenuto del documento al contenuto del post padre
Questo articolo è un approfondimento su Aggiungere dati extra alle voci indicizzate
SearchWP ha la capacità di trasferire il peso della rilevanza in diverse direzioni. Una direzione è particolarmente applicabile ai Media, in quanto puoi far trasferire a SearchWP il peso per le voci Media ai rispettivi post 'Caricato su'. Nel database questa relazione è stabilita usando la colonna post_parent.
Quando questo trasferimento di peso è stato impostato nelle impostazioni del Motore (e prendendo come esempio i PDF) quando si cerca contenuto che appare in un PDF, il risultato che SearchWP restituisce non sarà il PDF stesso, ma il post a cui è stato allegato.
A seconda del tuo sito e delle circostanze, questo può essere molto vantaggioso!
Ci sono tuttavia alcuni casi limite e talvolta il trasferimento di peso non è qualcosa che si desidera che si verifichi in tutti i casi. Possiamo sfruttare l'adattabilità di SearchWP e personalizzare la nostra implementazione per invece:
- Disabilitare i Media dal Motore SearchWP interamente
- Agganciarsi all'indicizzatore di SearchWP e recuperare eventuali PDF 'figli' per i post mentre vengono indicizzati
Questa applicazione dinamica ci consente di valutare meglio la situazione su base post per post.
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 ); |
Questi hook si agganciano al processo di indicizzazione di SearchWP e per ogni post (es. Post, Pagine, Tipi di Post Personalizzati) cercheranno eventuali PDF che sono stati 'caricati su' questo post corrente (utilizzando la relazione post_parent stabilita) e quindi analizzeranno ciascuno di questi PDF per il contenuto.
Il contenuto di tutti i PDF 'figli' verrà archiviato come Campo Personalizzato aggiuntivo con il nome searchwp_child_pdf_content. Il secondo hook aggiungerà questo Campo Personalizzato aggiuntivo al menu a discesa Campi Personalizzati quando si gestiscono gli attributi del post nel tuo Motore SearchWP e la voce avrà il nome di Contenuto PDF Allegato che ti permetterà di assegnare un peso di rilevanza individuale al contenuto PDF estratto.
Nota: Affinché questa modifica abbia effetto, dovrai ricostruire il tuo indice utilizzando il pulsante nella scheda Motori della schermata delle impostazioni di SearchWP.

