SearchWP Documentation

Veja o guia de instalação, navegue pela Base de Conhecimento, descubra os muitos hooks do SearchWP

Processar Campos ACF para Indexar Dados Esperados

Às vezes, depois de adicionar campos de Campos Personalizados Avançados à configuração do seu Motor SearchWP, os resultados esperados ainda não aparecem.

Isso provavelmente se deve à forma como o ACF armazenou os dados. Por exemplo, vamos revisar como os campos de Campos de Relacionamento funcionam. Após configurar o campo, você pode escolher qualquer número de entradas para selecionar e salvar junto com sua postagem.

Campo de Relacionamento ACF

Com base na interface do ACF, faz sentido esperar que todos os títulos das entradas escolhidas se tornem pesquisáveis, mas esse não é o caso!

O ACF armazena apenas os IDs das postagens das entradas escolhidas e é *isso* que o SearchWP está indexando. No entanto, isso não é muito útil para os visitantes do seu site.

Felizmente, o SearchWP torna extremamente fácil alterar a forma como esses dados são indexados e, em vez de armazenar os IDs das postagens como aparecem no registro de dados do ACF, podemos dizer ao SearchWP para indexar o Título (ou qualquer outra coisa, aliás!).

Veja como isso se parece na prática:

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

Quando seu índice for reconstruído usando o botão Reconstruir Índice na aba Motores da tela de configurações do SearchWP, o indexador do SearchWP executará o hook acima ao indexar o campo ACF e, em vez de indexar os IDs das postagens como o ACF armazenou os dados, ele substituirá esses IDs pelo Título de cada entrada.

Você pode ajustar o hook para indexar quaisquer dados que desejar, não apenas o Título!

Outro exemplo seria personalizar o que o SearchWP indexa para um Campo de Seleção ACF. Por padrão, o ACF armazena/recupera apenas o valor do campo de Seleção, mas você pode querer permitir que seus visitantes pesquisem também pelo rótulo do campo. Podemos usar o mesmo hook para fazer exatamente isso:

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

Crie uma Experiência de Pesquisa WordPress Melhor Hoje

Nunca mais perca visitantes para resultados de pesquisa inúteis. O SearchWP torna a criação de sua própria pesquisa inteligente do WordPress rápida e fácil.

Get SearchWP Now
Ícone de Múltiplos Mecanismos de Busca