Ir para conteúdo

POWERED BY:

Roberto Pereira Lima Ribei

Filtro e Seletor para categoria em resultado de busca - Wordpress

Recommended Posts

 

Olá pessoal.

 

O site do meu cliente tinha um problema nas buscas, como mostra a imagem:

Screenshot_126.thumb.png.967dc6a85eeab978be8664fa30ca8d97.png

 

Na barra lateral, essa busca era filtrada pelo plugin Search & Filter com a opção de selecionar as categorias de Custom Post Types criadas com o ACF e CPT UI.

 

A questão é que mesmo havendo vários posts com a palavra chave relacionada "olfato", somente uma publicação aparecia.

 

Aparentemente, um conflito entre os plugins gerou a falha e consegui corrigir usando o ACF: Better Search.

Busca-01.thumb.jpg.e1270d380eb169fe20e40851516dfb88.jpg

 

Só que nessa, ainda não mostrava também os resultados para publicações que constavam a palavra-chave somente em campos personalizados e perdemos a filtragem e o seletor (feito pelo Search & Filter).

 

Consegui resolver a busca. O post "Teste para busca" tem a palavra-chave somente no campo personalizado.

Mostrar as categorias de publicações do CPT UI, consegui resolver com o o Plugin Custom Post Types Widget.

 

Busca-02.thumb.jpg.fac18d3760635eb753e2366f93bacd54.jpg

 

Agora, preciso filtrar a amostragem dessas categorias de acordo com os resultados de busca e ter um seletor, para que o usuário possa selecionar um ou mais categorias e mostrar apenas os posts relacionados a elas.

 

Eu encontrei esse código que aprimora os resultados da busca nativa do wordpress, mas não encontro o arquivo onde eu devo colocar esse código. Quando eu fiz as alterações tanto no arquivo seach.php quanto functions.php, o site quebrou. Não faço ideia se errei os parâmetros, argumentos ou o que fiz de errado. (novato)

 

Essa é a página onde aparecem os resultados:

https://geroprodev.dbai.com.br/?s=olfato&post_type[]=post&post_type[]=page&post_type[]=acervo&post_type[]=produtos&post_type[]=projetos&post_type[]=evento&fs=1

 

Essa é a página de busca:

https://geroprodev.dbai.com.br/busca-teste/

 

Esse é o link código que encontrei no Github para extender a pesquisa nativa com o Search & Filter que eu quero usar como referência (que eu não encontrei onde vou incluir esse código):

https://support.searchandfilter.com/forums/topic/compatibility-with-acf-better-search/

 

https://gist.github.com/fiskhandlarn/f6f86c99e59f62d72ac2ce10be12dc1a/

 

☼ IMPORTANTE ☼

O tema utilizado é o Avada.

Mesmo com vários plugins sendo indicados para resolver esse problema, neste caso, nenhum deles resolveu.

A solução mais simples que encontrei foi usar a "Search CPT" e o plugin ACF: Better Search.

O que eu não encontrei em nenhuma pasta do CPT foi o arquivo search.php ou relacionado.

 

BUSCA-NATIVA-BUSCA-CPT-02.thumb.jpg.5357af64f17ba485136c77044433f1a2.jpg

E esse é o código:

 

<?php
/*
  ##############################
  ########### Search ###########
  ##############################

  Included are steps to help make this script easier for other to follow
  All you have to do is add custom ACF post types into Step 1 and custom taxonomies into Step 10
  I also updated this work to include XSS and SQL injection projection
  [list_searcheable_acf list all the custom fields we want to include in our search query]
  @return [array] [list of custom fields]
*/

// Define list of ACF fields you want to search through - do NOT include taxonomies here
function list_searcheable_acf(){
    $list_searcheable_acf = array( "your",
                                   "acf",
                                   "non-repeater",
                                   "field-names",
                                   "here",
                                   "repeater" => array( "repeater-sub-field1",
                                                        "repeater-sub-field2" )
                                   );
    return $list_searcheable_acf;
}

/*
 * [advanced_custom_search search that encompasses ACF/advanced custom fields and taxonomies and split expression before request]
 * @param  [query-part/string]      $search    [the initial "where" part of the search query]
 * @param  [object]                 $wp_query []
 * @return [query-part/string]      $search    [the "where" part of the search query as we customized]
 * modified from gist: https://gist.github.com/FutureMedia/9581381/73afa809f38527d57f4213581eeae6a8e5a1340a
 * see https://vzurczak.wordpress.com/2013/06/15/extend-the-default-wordpress-search/
 * credits to Vincent Zurczak for the base query structure/spliting tags section and Sjouw for comment cleanup
*/

function advanced_custom_search( $search, $wp_query ) {
    global $wpdb;

    if ( empty( $search )) {
        return $search;
    }

    // 1- get search expression
    $terms_raw = $wp_query->query_vars[ 's' ];

    // 2- check search term for XSS attacks
    $terms_xss_cleared = strip_tags($terms_raw);

    // 3- do another check for SQL injection, use WP esc_sql
    $terms = esc_sql($terms_xss_cleared);

    // 4- explode search expression to get search terms
    $exploded = explode( ' ', $terms );
    if( $exploded === FALSE || count( $exploded ) == 0 ) {
        $exploded = array( 0 => $terms );
    }

    // 5- setup search variable as a string
    $search = '';

    // 6- get searcheable_acf, a list of advanced custom fields you want to search content in
    $list_searcheable_acf = list_searcheable_acf();

    // 7- get custom table prefixes, thanks to Brian Douglas @bmdinteractive on github for this improvement
    $table_prefix = $wpdb->prefix;

    // 8- search through tags, inject each into SQL query
    foreach( $exploded as $tag ) {
        $search .= "
      AND (
        (".$table_prefix."posts.post_title LIKE '%$tag%')
        OR (".$table_prefix."posts.post_excerpt LIKE '%$tag%')
        OR (".$table_prefix."posts.post_content LIKE '%$tag%')
        ".
        // 9- Adds to $search DB data from custom post types
            "OR EXISTS (
          SELECT * FROM ".$table_prefix."postmeta
          WHERE post_id = ".$table_prefix."posts.ID
          AND (";
        // 9b - reads through $list_searcheable_acf array to see which custom post types you want to include in the search string
        $metaStatements = array();
        foreach ($list_searcheable_acf as $key => $searcheable_acf) {
            if ( is_array( $searcheable_acf ) ) {
                foreach ( $searcheable_acf as $repeater_acf ) {
                    array_push( $metaStatements, "(meta_key LIKE '" . $key . "_%_" . $repeater_acf . "' AND meta_value LIKE '%$tag%')" );
                }
            }
            else {
                array_push( $metaStatements, "(meta_key = '" . $searcheable_acf . "' AND meta_value LIKE '%$tag%')" );
            }
        }
        $search .= join( $metaStatements, "\n          OR " );
        $search .= ")
        )".
        // 10- Adds to $search DB data from comments
        "OR EXISTS (
          SELECT * FROM ".$table_prefix."comments
          WHERE comment_post_ID = ".$table_prefix."posts.ID
          AND comment_content LIKE '%$tag%'
        )".
        // 11 - Adds to $search DB data from taxonomies
            "OR EXISTS (
          SELECT * FROM ".$table_prefix."terms
          INNER JOIN ".$table_prefix."term_taxonomy
          ON ".$table_prefix."term_taxonomy.term_id = ".$table_prefix."terms.term_id
          INNER JOIN ".$table_prefix."term_relationships
          ON ".$table_prefix."term_relationships.term_taxonomy_id = ".$table_prefix."term_taxonomy.term_taxonomy_id".
            // 11b- Add custom taxonomies here
            " WHERE (
            taxonomy = 'your'
            OR taxonomy = 'custom'
            OR taxonomy = 'taxonomies'
            OR taxonomy = 'here'
          )
          AND object_id = ".$table_prefix."posts.ID
          AND ".$table_prefix."terms.name LIKE '%$tag%'
        )".
            ")"; // closes $search
    } // closes foreach
    return $search;
} // closes function advanced_custom_search

// 12- use add_filter to put advanced_custom_search into the posts_search results
add_filter( 'posts_search', 'advanced_custom_search', 500, 2 );

 

Preciso entender como modificar esses argumentos e onde é que vou inserir as categorias/subcategorias dos Custom Post Types e como filtrar nessa aba lateral.

É possível fazer isso usando o próprio Custom Post Type Widget? Faço pela busca nativa ou pela busca do CPT?

 

 

Obrigado desde já!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por Gdonato
      Ola pessoal, baixei um tema wordpress Profolio e alterei ja grande parte do tema, porem estou com 2 problemas, um que os icones das redes sociais nao aparecem, altero, publico e nao aparece e  nao estou achando onde alterar a parte OUR PORTFOLIO onde esta em ingles, alguem pode me ajudar onde acho para editar e alterar?
    • Por Gdonato
      Ola pessoal, baixei um tema wordpress Profolio e alterei ja grande parte do tema, porem estou com 2 problemas, um que os icones das redes sociais nao aparecem, altero, publico e nao aparece e  nao estou achando onde alterar a parte OUR PORTFOLIO onde esta em ingles, alguem pode me ajudar onde acho para editar e alterar?
    • Por Gdonato
      Ola pessoal, baixei um tema wordpress Profolio e alterei ja grande parte do tema, porem estou com 2 problemas, um que os icones das redes socias nao aparecem, altero, publico e nao aparece e  nao estou achando onde alterar a parte OUR PORTFOLIO onde esta em ingles, alguem pode me ajudar onde acho para editar e alterar?
    • Por douglas79
      Boa noite,
      primeiramente eu fiz um site num servidor local (Wordpress 5.9), criei uma pasta chamada blog e fiz a transferência via FTP para essa pasta, mas não instalei o Wordpress nativo da hospedagem.. Acessei o painel de controle e criei o banco de dados e importei o BD do phpmyadmin do servidor XAMPP. Daí quando vou acessar o domínio www.guardamunparacambi.info/blog, aparece a mensagem "Erro ao conectar com o banco de dados". O que pode estar acontecendo?
      Preciso de ajuda!
    • Por douglas79
      Boa noite,
      primeiramente eu fiz um site num servidor local (Wordpress 5.9), criei uma pasta chamada blog e fiz a transferência via FTP para essa pasta, mas não instalei o Wordpress nativo da hospedagem.. Acessei o painel de controle e criei o banco de dados e importei o BD do phpmyadmin do servidor XAMPP. Daí quando vou acessar o domínio www.guardamunparacambi.info/blog, aparece a mensagem "Erro ao conectar com o banco de dados". O que pode estar acontecendo?
      Preciso de ajuda!
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.