X

Limitar Pesquisa Apenas a Títulos de Postagem

Snippets por IsItWP

Você está procurando uma maneira de limitar seus resultados de pesquisa aos títulos das postagens? Embora provavelmente exista um plugin para isso, criamos um trecho de código rápido que você pode usar para limitar a pesquisa apenas aos títulos de postagens no WordPress.

Instruções:

Tudo o que você precisa fazer é adicionar este código ao arquivo functions.php do seu tema ou a um plugin específico do site:

function __search_by_title_only( $search, &$wp_query )
{
    global $wpdb;

    if ( empty( $search ) )
        return $search; // skip processing - no search term in query

    $q = $wp_query->query_vars;    
    $n = ! empty( $q['exact'] ) ? '' : '%';

    $search =
    $searchand = '';

    foreach ( (array) $q['search_terms'] as $term ) {
        $term = esc_sql( like_escape( $term ) );
        $search .= "{$searchand}($wpdb->posts.post_title LIKE '{$n}{$term}{$n}')";
        $searchand = ' AND ';
    }

    if ( ! empty( $search ) ) {
        $search = " AND ({$search}) ";
        if ( ! is_user_logged_in() )
            $search .= " AND ($wpdb->posts.post_password = '') ";
    }

    return $search;
}
add_filter( 'posts_search', '__search_by_title_only', 500, 2 );

Observação: Se esta é a sua primeira vez adicionando snippets de código no WordPress, consulte nosso guia sobre como adicionar snippets de código corretamente no WordPress, para não quebrar acidentalmente seu site.

Se você gostou deste trecho de código, considere conferir nossos outros artigos no site como: 43 melhores temas de fotografia para WordPress e 11 melhores plugins de slider para WordPress.

Comentários   Deixe uma resposta

  1. Johanthan Smith January 6, 2023 at 4:02 pm

    de qualquer forma você pode me ajudar... Não consigo fazer isso funcionar com o TEMA DIVI

  2. Olá, obrigado por esta postagem. Eu estava me perguntando se você sabia como adaptar o código para que ele funcione para um tipo de postagem personalizado, especificamente, para o WP Job Manager, o tipo de postagem é: job_listing. Obrigado.

  3. como ignorar espaços na pesquisa

    ex. iphone 7 32 gb
    e iphone 7 32gb

    apenas com um espaço entre 32 e gb retorna uma grande diferença nos resultados

    como podemos ignorar esses espaços na pesquisa do wordpress adicionando uma função

    para que possamos obter os mesmos resultados de ambos os tipos de pesquisa

    Por favor, aconselhe
    Atenciosamente

  4. Seu código funciona bem localmente, ainda não testei em produção. Meu PHP e conhecimento de WordPress não são tão bons. Tenho tentado fazer com que
    $wpdb->postmeta.page_banner_subtitle seja pesquisado, assim como o post_title, sem sucesso, fora do meu escopo. Alguém pode ajudar ou me indicar a direção certa.
    Obrigado.

  5. isso é para o front-end ou também funciona no back-end?

    1. Isso é para o front-end.

  6. Funciona muito bem! Excelente trecho de código, mas como você limitaria a pesquisa apenas ao título da postagem e não aos títulos das páginas?

    1. Olá Richard, ficamos felizes que você gostou. O trecho foi escrito especificamente para títulos de postagens. Você pode ver que ele tem como alvo o CPT Posts.

  7. Isso estava funcionando bem para mim há um mês.
    Agora recebo erros de PHP.
    Você por acaso tem uma solução atualizada?
    É um ótimo trecho de código para um site grande.

    Aviso: O parâmetro 2 para __search_by_title_only() esperava uma referência, valor dado em /wp-includes/class-wp-hook.php na linha 303

    1. Você poderia tentar mudar a linha 1 para:

      function __search_by_title_only( $search, $wp_query )

  8. Por que eu insiro texto no formulário de pesquisa, que limita os caracteres a apenas 5 caracteres?

    como resolver isso?

  9. Obrigado, mas funciona 100% se usar Chrome etc., mas não funciona bem (apenas obtém metade dos resultados que deveria) se usar I.E. (o navegador nº 1 do mundo), bizarramente!

    1. Pode ser que o I.E. esteja tendo um problema adicional, pois este código é executado no servidor e não no navegador.

  10. Olá, os caracteres turcos e não turcos estão correspondendo como iguais. por exemplo, quando pesquiso “aşk” pode me dar ask, aşk. como posso consertar isso? eu quero apenas aşk quando pesquiso aşk. Obrigado.

  11. Isso é realmente útil – pode ser adaptado para pesquisar títulos de posts e páginas?

  12. Isso é muito bom! Obrigado!

  13. du lich singapore January 20, 2014 at 7:51 pm

    código: add_filter( ‘posts_search’, ‘__search_by_title_only’, 500, 2 );

    2 parâmetros: 500, 2. O que significa?

    1. 500 é a prioridade e 2 é o número de parâmetros na função de callback.

  14. du lich singapore January 20, 2014 at 7:46 pm

    add_filter( ‘posts_search’, ‘__search_by_title_only’, 500, 2 );
    2 parâmetros 500, 2. O que significa?

  15. Eu não entendo muito de PHP, preciso colocar algo antes e depois desse código?

  16. Isso é incrível… Estou pensando em como adicionar este código à busca do back-end. Eu quero busca por título para o back-end do WP também.. 🙂

    Obrigado! 🙂

  17. Oi,
    Isso foi realmente incrível.
    Você acabou de resolver meu problema com o mínimo de esforço da minha parte.
    Muito obrigado.

  18. disqus_JuU9dzgzNc January 18, 2013 at 2:27 pm

    Isso é ótimo! Tenho 2 formulários de busca no meu site. É possível aplicar esta função a apenas 1 dos formulários de busca?

  19. E aí, Senhor!
    você manda bem, valeu mesmo

  20. Valeu Kevin… exatamente o código que eu estava procurando…

    1. Legal, fico feliz em saber que pude ajudar.

  21. Sou novo (também conhecido como "sou péssimo") em PHP e WordPress.  Eu apenas jogo este código em qualquer lugar ou há um lugar específico onde ele precisa ir ou substituir algum código que já está lá?

    Coloquei isso no final da página functions.php e minha tela ficou branca, então removi.

    1. Ok, eu estava adicionando isso ao arquivo functions.php do WordPress e não ao do tema.  Funciona como um encanto.

  22. Ótimo código! Isso realmente limpa a busca do WordPress.  Existe uma maneira de incluir as primeiras X palavras do post? Talvez com a função substr?
    $content = get_the_content();
    $content = strip_tags($content);
    echo substr($content, 0, 50);

    1. No seu template de resultados de busca, você pode limitar a quantidade de texto exibido usando a tag de template de resumo para um resultado mais curto sem nenhuma modificação.

  23. Isso é ótimo! Algo que eu gostaria de ver é um ajuste de busca que limite os resultados a títulos e tags. Dessa forma, tenho a liberdade de nomear minhas postagens como quiser sem me preocupar em precisar incluir termos de busca por palavras-chave. 

    1. Fico feliz em saber que você gostou do snippet! Se você vai levar as coisas tão longe quanto tags, etc., eu daria uma olhada no plugin "search everything", ele tem muitas opções que você pode configurar.

  24. não funciona! 🙁

    1. qual versão do wordpress você está executando atualmente? Eu testo tudo para ter certeza de que funciona antes de postar um snippet. Vou dar uma olhada nisso novamente apenas para ter certeza.

      1. 3.2.1

        esta é a saída de $search:

        E ( E (((wpmtx_posts.post_title LIKE ‘%alice%’) OU
        (wpmtx_posts.post_content LIKE ‘%alice%’)) E ((wpmtx_posts.post_title
        LIKE ‘%cooper%’) OU (wpmtx_posts.post_content LIKE ‘%cooper%’)))
        (.post_title LIKE ‘%alice%’) E (.post_title LIKE ‘%cooper%’) OU
        (.post_title LIKE ‘%alice cooper%’))

        1. fiz uma pequena atualização, veja se isso resolve.

        2. Sim! Agora funciona! Muito obrigado!!!

      2. 3.2.1

        esta é a saída de $search:

        E ( E (((wpmtx_posts.post_title LIKE ‘%alice%’) OU
        (wpmtx_posts.post_content LIKE ‘%alice%’)) E ((wpmtx_posts.post_title
        LIKE ‘%cooper%’) OU (wpmtx_posts.post_content LIKE ‘%cooper%’)))
        (.post_title LIKE ‘%alice%’) E (.post_title LIKE ‘%cooper%’) OU
        (.post_title LIKE ‘%alice cooper%’))

  25. 29 Wordpress Tweaks to Improve Posts and Pages October 18, 2011 at 9:11 am

    […] [Fonte: WPSNIPP] […]

Adicionar um comentário

Ficamos felizes que você tenha escolhido deixar um comentário. Por favor, tenha em mente que todos os comentários são moderados de acordo com nossa política de privacidade, e todos os links são nofollow. NÃO use palavras-chave no campo do nome. Vamos ter uma conversa pessoal e significativa.

Checklist de Lançamento WordPress

O Checklist Definitivo para Lançamento de WordPress

Compilamos todos os itens essenciais da lista de verificação para o lançamento do seu próximo site WordPress em um e-book prático.
Sim, envie-me o eBook Gratuito!