Anexar Conteúdo do Documento ao Conteúdo do Post Pai
Este artigo é uma expansão de Adicionando dados extras a entradas indexadas
SearchWP tem a capacidade de transferir peso de relevância em várias direções. Uma direção é particularmente aplicável à Mídia, pois você pode fazer com que o SearchWP transfira peso para entradas de Mídia para seus respectivos posts 'Enviado para'. No banco de dados, esse relacionamento é estabelecido usando a coluna post_parent.
Quando essa transferência de peso foi configurada nas configurações do Motor (e tomando PDFs como exemplo) ao pesquisar conteúdo que aparece em um PDF, o resultado que o SearchWP retorna não será o próprio PDF, mas sim o post ao qual ele foi anexado.
Dependendo do seu site e circunstâncias, isso pode ser muito benéfico!
Existem alguns casos extremos, no entanto, e às vezes a transferência de peso não é algo que você deseja que ocorra em todos os casos. Podemos aproveitar a adaptabilidade do SearchWP e personalizar nossa implementação para, em vez disso:
- Desabilitar Mídia do Motor SearchWP inteiramente
- Enganchar no indexador do SearchWP e recuperar quaisquer PDFs 'filhos' para posts à medida que são indexados
Essa aplicação dinâmica nos permite avaliar melhor a situação em uma base de post por 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 ); |
Esses hooks acessam o processo de indexação do SearchWP e, para cada post (por exemplo, Posts, Páginas, Tipos de Post Personalizados), procurarão por quaisquer PDFs que foram 'enviados para' este post atual (utilizando o relacionamento post_parent estabelecido) e, em seguida, analisarão cada um desses PDFs em busca de conteúdo.
O conteúdo de todos os PDFs 'filhos' será armazenado como um Campo Personalizado extra com o nome searchwp_child_pdf_content. O segundo hook adicionará este Campo Personalizado extra ao dropdown de Campos Personalizados ao gerenciar os Atributos do post em seu Motor SearchWP e a entrada terá o nome de Conteúdo de PDF Anexado, o que permitirá que você dê um peso de relevância individual ao conteúdo de PDF extraído.
Nota: Para que esta alteração tenha efeito, você precisará reconstruir seu índice usando o botão na aba Motores da tela de configurações do SearchWP.

