SearchWP Documentation

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

Motor Suplementar

SearchWP permite a configuração de qualquer número de Motores, cada um com sua própria configuração individual. Essa segmentação facilita múltiplas implementações personalizadas de busca em todo o seu site.

A única limitação do Motor Padrão é que suas Fontes devem ser baseadas em objetos WP_Post. Isso ocorre porque o core do WordPress assume que os resultados da busca se encaixam em The Loop e The Loop é composto por WP_Posts. Objetos WP_Post são usados para Posts, Páginas, Mídia e Tipos de Post Personalizados. Isso cobre bastante coisa!

SearchWP também facilita a busca por Fontes personalizadas, no entanto. Para aproveitar ao máximo isso, você precisará configurar e implementar um Motor Suplementar.

Configuração

A configuração de um Motor Suplementar segue o mesmo processo do Motor Padrão, mas neste caso todas as Fontes são disponibilizadas para você, não apenas aquelas baseadas em WP_Post.

Crie um novo Motor Suplementar clicando no botão Adicionar Novo na aba Motores da tela de configurações do SearchWP.

Captura de tela apontando o botão Adicionar Novo Motor

Adicionar um Motor Suplementar clicando em 'Adicionar Novo'

Uma vez que o novo Motor tenha sido adicionado, você pode personalizar as Fontes, Atributos e Regras de acordo com seu gosto.

Após salvar seu(s) Motor(es), SearchWP avaliará se o Índice precisa ser reconstruído e fornecerá um aviso, se necessário.

O último passo da configuração será anotar o nome do Motor, que é diferente do rótulo. O nome fica ao lado do rótulo do Motor em uma fonte monoespaçada. O nome é como o Motor é referenciado em código posteriormente.

Formulário

Configurar um formulário de busca para o seu Motor Suplementar envolve a criação de um <input> com um nome diferente de s, pois esse nome acionará uma busca nativa do WordPress.

Algo como isto funcionará para começar:

<form role="search" method="get" class="search-form"
action="<?php echo site_url( 'search-results/' ); ?>">
<label>
<span class="screen-reader-text">
<?php echo _x( 'Search for:', 'label' ) ?>
</span>
<input type="search" class="search-field"
name="searchwp"
placeholder="<?php echo esc_attr_x( 'Search...', 'placeholder' ) ?>"
value="<?php echo isset( $_GET['searchwp'] ) ? esc_attr( $_GET['searchwp'] ) : '' ?>"
title="<?php echo esc_attr_x( 'Search for:', 'label' ) ?>" />
</label>
<input type="submit" class="search-submit"
value="<?php echo esc_attr_x( 'Search', 'submit button' ) ?>" />
</form>

duas coisas a notar sobre este trecho:

  1. O nome do <input> usado é searchwp
  2. A action do form está apontando para site_url( 'search-results/' ). Isso significa que se o URL do seu site for example.com, este formulário redirecionará para example.com/search-results/ após o envio. Este guia assume que o URL aponta para uma Página que você criou com o propósito de exibir resultados do Motor Suplementar.

É isso! Esse formulário inicial se alinha de perto com a saída padrão de get_search_form() do WordPress, que provavelmente é suportada pelo seu tema. Se não for, ele pode ser estilizado como qualquer outro form no seu site.

Resultados

Quando você cria seu form de busca, ele tem uma action que aponta para um URL designado como a Página para exibir seus resultados. Para buscar resultados do SearchWP, primeiro criaremos um Modelo de Página personalizado.

Aqui está um modelo inicial com o qual podemos trabalhar:

<?php
/* Template Name: SearchWP Results */
global $post;
// Retrieve applicable query parameters.
$search_query = isset( $_GET['searchwp'] ) ? sanitize_text_field( $_GET['searchwp'] ) : null;
$search_page = isset( $_GET['swppg'] ) ? absint( $_GET['swppg'] ) : 1;
// Perform the search.
$search_results = [];
$search_pagination = '';
if ( ! empty( $search_query ) && class_exists( '\\SearchWP\\Query' ) ) {
$searchwp_query = new \SearchWP\Query( $search_query, [
'engine' => 'supplemental', // The Engine name.
'fields' => 'all', // Load proper native objects of each result.
'page' => $search_page,
] );
$search_results = $searchwp_query->get_results();
$search_pagination = paginate_links( array(
'format' => '?swppg=%#%',
'current' => $search_page,
'total' => $searchwp_query->max_num_pages,
) );
}
get_header(); ?>
<div id="primary" class="content-area">
<main id="main" class="site-main" role="main">
<header class="page-header">
<h1 class="page-title">
<?php if ( ! empty( $search_query ) ) : ?>
<?php printf( __( 'Search Results for: %s' ), esc_html( $search_query ) ); ?>
<?php else : ?>
SearchWP Supplemental Search
<?php endif; ?>
</h1>
<!-- BEGIN Supplemental Engine Search form -->
<form role="search" method="get" class="search-form"
action="<?php echo site_url( 'search-results/' ); ?>">
<label>
<span class="screen-reader-text">
<?php echo _x( 'Search for:', 'label' ) ?>
</span>
<input type="search" class="search-field"
name="searchwp"
placeholder="<?php echo esc_attr_x( 'Search...', 'placeholder' ) ?>"
value="<?php echo isset( $_GET['searchwp'] ) ? esc_attr( $_GET['searchwp'] ) : '' ?>"
title="<?php echo esc_attr_x( 'Search for:', 'label' ) ?>" />
</label>
<input type="submit" class="search-submit"
value="<?php echo esc_attr_x( 'Search', 'submit button' ) ?>" />
</form>
<!-- END Supplemental Engine Search form -->
</header>
<?php if ( ! empty( $search_query ) && ! empty( $search_results ) ) : ?>
<?php foreach ( $search_results as $search_result ) : ?>
<article class="page hentry search-result">
<?php
switch( get_class( $search_result ) ) {
case 'WP_Post':
$post = $search_result;
?>
<header class="entry-header"><h2 class="entry-title">
<a href="<?php echo get_permalink(); ?>"><?php the_title(); ?></a>
</h2></header>
<div class="entry-summary"><?php the_excerpt(); ?></div>
<?php
wp_reset_postdata();
break;
case 'WP_User':
?>
<header class="entry-header"><h2 class="entry-title">
<a href="<?php echo get_author_posts_url( $search_result->data->ID ); ?>">
<?php echo esc_html( $search_result->data->display_name ); ?>
</a>
</h2></header>
<div class="entry-summary">
<?php echo wp_kses_post( get_the_author_meta( 'description',
$search_result->data->ID ) ); ?>
</div>
<?php
break;
case 'WP_Term':
?>
<header class="entry-header">
<h2 class="entry-title">
<a href="<?php echo get_term_link( $search_result->term_id, $search_result->taxonomy ); ?>">
<?php echo esc_html( $search_result->name ); ?>
</a>
</h2>
<div class="entry-summary">
<?php echo esc_html( $search_result->description ); ?>
</div>
</header>
<?php
break;
}
?>
</article>
<?php endforeach; ?>
<?php if ( $searchwp_query->max_num_pages > 1 ) : ?>
<div class="navigation pagination" role="navigation">
<h2 class="screen-reader-text">Results navigation</h2>
<div class="nav-links"><?php echo wp_kses_post( $search_pagination ); ?></div>
</div>
<?php endif; ?>
<?php elseif ( ! empty( $search_query ) ) : ?>
<p>No results found, please search again.</p>
<?php endif; ?>
</main> <!-- .site-main -->
</div> <!-- .content-area -->
<?php get_footer(); ?>

Vamos dividir este modelo inicial em quatro seções:

  1. Executando a busca
  2. Exibindo o formulário de busca (novamente)
  3. Exibindo resultados
  4. Exibindo paginação

As linhas 7-28 são responsáveis por recuperar a consulta de busca, executar a busca e popular nosso array de resultados.

As linhas 44-60 exibem o formulário de busca que fizemos acima

As linhas 64-94 são responsáveis pela exibição dos nossos resultados de busca.

Observe que na linha 15 instruímos \SearchWP\Query a recuperar 'all', o que garante que os resultados sejam retornados como seu tipo de objeto original (por exemplo, WP_Post) conforme configurado em \SearchWP\Source.

Nota: Por padrão, \SearchWP\Query retornará um objeto contendo o id, source, site e relevance para cada resultado. Definir o argumento fields como 'all' instrui \SearchWP\Query a substituir esse resultado por um objeto nativo da própria Fonte. Alternativamente, definir o argumento fields como 'entries' retornará um array de objetos \SearchWP\Entry.

Isso significa que Posts, Páginas, Tipos de Post Personalizados e Mídia retornarão como seus objetos WP_Post originais. Usuários retornarão como objetos WP_User. Quaisquer Fontes adicionais retornarão seus objetos nativos também.

Ao contrário de trabalhar com The Loop, ao trabalhar com um Motor Suplementar, precisamos determinar qual tipo de resultado temos antes de exibir quaisquer dados.

Neste exemplo, usamos um switch que funciona bem, porque este Motor de demonstração inclui apenas Posts, Páginas e Usuários como Fontes.

Nota: Se você preferir apenas a quantidade mínima de dados retornados com os resultados da busca, pode omitir o argumento fields completamente. Você precisará usar as propriedades do objeto do resultado para recuperar os dados necessários para exibir seus resultados.

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