Todos sabemos que a função de pesquisa padrão do WordPress não é muito boa ou pelo menos não tão boa quanto o Google , mas existem alguns truques para ajudar a melhorar os resultados da pesquisa. Esta postagem mostrará diferentes métodos para limitar seus resultados de pesquisa a tipos ou categorias de postagens específicas e como alterar o número padrão ou os resultados de pesquisa por página.
Limitar os resultados de pesquisa do WordPress por categoria
Aqui estão alguns métodos que você pode usar para limitar seus resultados de pesquisa por categoria, o que pode ser muito útil para sites como WPExplorer.com, que possui seções como temas, plugins e blog.
1. Usando um campo de entrada oculto em seu Searchform.php
Este é o método que eu uso atualmente no WPExplorer.com, então, quando as pessoas pesquisam no site principal, elas só obtêm resultados de pesquisa da categoria “Temas WordPress”. Tudo o que você precisa fazer é adicionar uma entrada oculta ao seu searchform.php com um id de “cat” e o id de categoria para o valor.
Um searchform.php básico
<form method=”get” action=”<?php echo esc_url( home_url( ‘/’ ) ); ?>”>
<input type=”text” size=”16″ name=”s” value=”Search” />
<input type=”submit” value=”Go” />
</form>
Adicione o seguinte para limitar à categoria com um ID de 5
<input type=”hidden” name=”cat” id=”cat” value=”5″ />
Código Completo
<form method=”get” action=”<?php echo esc_url( home_url( ‘/’ ) ); ?>”>
<input type=”hidden” name=”cat” id=”cat” value=”5″ />
<input type=”text” size=”16″ name=”s” value=”Search” />
<input type=”submit” value=”Go” />
</form>
2. Adicionando uma instrução de consulta ao seu arquivo Search.php
Outro método útil para limitar seus resultados de pesquisa a categorias específicas é adicionar uma consulta ao seu arquivo search.php logo antes da instrução if.
Incluindo categorias para a pesquisa
Ao usar IDs positivos na consulta, você pode definir quais categorias deseja exibir nos resultados da pesquisa (mostrar categorias com IDs 1,2 e 3).
<?php
$paged = ( get_query_var(‘paged’) ) ? get_query_var(‘paged’) : 1;
query_posts( “s=$s&paged=$paged&cat=1,2,3” );
?>
Excluindo categorias da pesquisa
Como alternativa, você pode usar IDs negativos para excluir determinadas categorias de sua página de pesquisa (excluir a categoria com ID 7)
<?php
$paged = ( get_query_var(‘paged’) ) ? get_query_var(‘paged’) : 1;
query_posts( “s=$s&paged=$paged&cat=-7” );
?>
Excluir páginas da sua página de pesquisa
Abaixo estão algumas maneiras de limitar seus resultados de pesquisa para excluir páginas dos resultados e mostrar apenas postagens.
Usando uma função
Basta inserir a seguinte função em seu arquivo functions.php
// Remove pages from search results
function exclude_pages_from_search( $query ) {
if ( $query->is_search() && $query->is_main_query() && ! is_admin() ) {
$query->set( ‘post_type’, ‘post’ );
}
}
add_filter( ‘pre_get_posts’,’exclude_pages_from_search’ );
Usando uma condicional em seu arquivo search.php
Outra forma de remover páginas do seu arquivo search.php é inserir uma condicional em seu arquivo search.php logo após “while ( have_posts())”. Isso não é recomendado se você estiver usando um tema de terceiros, porque se você atualizar o tema no futuro, perderá suas edições, se for seu próprio tema personalizado, tudo bem.
<?php
if ( have_posts() ) : while ( have_posts() ) : the_post();
// Exclude pages from the loop.
if ( is_search() && ( $post->post_type==’page’ ) ) {
continue;
}
?>
Excluir uma página ou páginas específicas
Você também pode excluir postagens/páginas específicas de suas páginas de resultados de pesquisa em seus IDs usando o seguinte código adicionado no arquivo functions.php. Basta alterar a matriz de IDs para incluir os IDs das páginas ou postagens que você deseja excluir.
// Exclude specific posts/pages from search
function myprefix_exclude_pages_from_search( $query) {
if ( $query->is_search() && $query->is_main_query() && ! is_admin() ) {
$exclude_ids = array( 7, 19 , 21 ); // Array of the ID’s to exclude
$query->set( ‘post__not_in’, $exclude_ids );
}
}
add_filter( ‘pre_get_posts’, ‘myprefix_exclude_pages_from_search’ );
Limitar a pesquisa ao tipo de postagem
Uma das razões para usar Port Types no WordPress é porque você não quer isso em seu feed ou loop wp principal, é por isso que eles são perfeitos para coisas como sliders, depoimentos, serviços… etc. No entanto, suas postagens personalizadas ainda podem aparecer em sua página de resultados de pesquisa.
1. Excluir um tipo de postagem personalizado dos resultados da pesquisa
Tudo o que você precisa fazer para excluir postagens personalizadas dos resultados da pesquisa é definir o seguinte argumento ao definir sua postagem personalizada ( mais informações ):
‘exclude_from_search’ => true
2. Usando um campo oculto no formulário de pesquisa para mostrar apenas postagens de um tipo de postagem personalizado específico
Como alternativa, você pode usar um campo oculto em seu formulário de pesquisa da mesma forma que fez para limitar as categorias, se quiser configurar um formulário de pesquisa avançada que pesquisará apenas o tipo de postagem personalizado especificado.
<input type=”hidden” name=”post_type” value=”portfolio” />
Esse campo extra entraria no seu formulário de pesquisa e você simplesmente substituiria onde diz “portfólio” pelo seu próprio nome de tipo de postagem personalizado. Esse método é ótimo se você tiver uma determinada seção em seu site que usa tipos de postagem personalizados e deseja que os usuários possam pesquisar apenas essas postagens específicas.
Alterando o número de resultados por página
Por padrão, o WordPress usa o número definido em Configurações > Leitura (as páginas do blog são exibidas no máximo…) para definir quantos resultados aparecem na página de resultados de pesquisa. Se você deseja mostrar mais, menos ou infinitos resultados em sua página de pesquisa, pode fazê-lo usando o seguinte código:
// Alter search posts per page
function myprefix_search_posts_per_page( $query) {
if ( $query->is_search() && $query->is_main_query() && ! is_admin() ) {
$query->set( ‘posts_per_page’, ’10’ );
}
}
add_filter( ‘pre_get_posts’, ‘myprefix_search_posts_per_page’ );
Este código iria em seu arquivo functions.php. De preferência em seu tema filho se estiver trabalhando com um tema de outro desenvolvedor. O código definirá seus resultados de pesquisa para “10” por página. Você pode alterar o número para o que quiser. Para tornar seus resultados de pesquisa ilimitados, use -1. Ou utilize um plugin como o Toolset Search para adicionar paginação aos seus resultados.
Pesquisa avançada/melhor
O WordPress por padrão pesquisa com base em qualquer conteúdo dentro de suas postagens e páginas. Seria possível alterar a maneira como a pesquisa funciona por meio de funções, mas é bastante complexo, portanto, se você quiser alterar a maneira como a pesquisa realmente funciona (o que ela pesquisa), considere usar um plug-in como o plug-in WP Extended Search . Clique no banner abaixo para conferir ou procure-o no painel do WordPress em Plugins > Adicionar Novo .
Este plugin permitirá que você controle melhor a pesquisa padrão se quiser pesquisar por meta, categorias, tags, termos, título… etc. Você pode incluir ou excluir determinados tipos de postagem da pesquisa, excluir postagens mais antigas que uma data específica, alterar o número de itens exibidos nos resultados da pesquisa e muito mais!