-
Total de itens
2 -
Registro em
-
Última visita
Tudo que Roberto Pereira Lima Ribei postou
-
wordpress Filtro e Seletor para categoria em resultado de busca - Wordpress
Roberto Pereira Lima Ribei postou um tópico no fórum Desenvolvimento com Wordpress
Olá pessoal. O site do meu cliente tinha um problema nas buscas, como mostra a imagem: 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. 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. 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. 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á!