Incluir taxonomías en las búsquedas
-
Muy buenas.
Quiero utilizar el buscador de WordPress para buscar sólo dentro del blog (no en páginas) y, además, incluya a las etiquetas y categorías dentro de la búsqueda. No quiero plugins. Uso Elementor, y le he dado un Query ID a los resultados de búsqueda en el blog (ID=busqueda_blog).
He conseguido visualizar sólo post en los resultados con el siguiente código dentro del archivo functions.php:
// Resultados de búsqueda en el blog: sólo entradas add_action( 'elementor_pro/posts/query/busqueda_blog', function( $query ) { $query->set('post_type', 'post' ); } );El problema viene cuando intento incluir categorías y etiquetas. Encontré el siguiente código que lo solucionaba:
function childorbit_search_join($join){ global $wpdb; if ( is_search() ) { $join .= "INNER JOIN {$wpdb->term_relationships} tr ON {$wpdb->posts}.ID = tr.object_id INNER JOIN {$wpdb->term_taxonomy} tt ON tt.term_taxonomy_id=tr.term_taxonomy_id INNER JOIN {$wpdb->terms} t ON t.term_id = tt.term_id INNER JOIN {$wpdb->postmeta} pm ON {$wpdb->posts}.ID = pm.post_id "; } return $join; } add_filter('posts_where','childorbit_search_where'); function childorbit_search_where($where){ global $wpdb; if ( is_search() ) { $where .= " OR (t.name LIKE '%".get_search_query()."%') "; $where .= " OR (pm.meta_value LIKE '%".get_search_query()."%') "; } return $where; } add_filter('posts_groupby', 'childorbit_search_groupby'); function childorbit_search_groupby($groupby){ global $wpdb; // we need to group on post ID $groupby_id = "{$wpdb->posts}.ID"; if(!is_search() || strpos($groupby, $groupby_id) !== false) return $groupby; // groupby was empty, use ours if(!strlen(trim($groupby))) return $groupby_id; // wasn't empty, append ours return $groupby.", ".$groupby_id; }Al usarlo, funciona, y devuelve resultados de etiquetas y categorías, pero también de las plantillas de Elementor, cosa que no quiero que aparezca. Lo solucioné en parte quitando la línea:
$where .= " OR (pm.meta_value LIKE '%".get_search_query()."%') ";Esto hace que, en búsquedas «normales» como por ejemplo «nieve», el resultado sea el esperado. Pero en búsquedas de palabras cortas o letras, sigan apareciendo las plantillas de Elementor, además de muchos resultados en blanco, pero que ocupan espacio. Si busco, por ejemplo, «a», obtengo 7 páginas de resultados, la mayoría en blanco y plantillas, y no puedo acceder a partir de la página 4.
Resumo: ¿cómo puedo utilizar el buscador de WordPress para que incluya etiquetas y categorías en la búsqueda y excluya las plantillas de Elementor?
Tengo casi nula experiencia con el código.
Perdón por la turra.
La página con la que necesito ayuda: [accede para ver el enlace]
El debate ‘Incluir taxonomías en las búsquedas’ está cerrado a nuevas respuestas.