posts – Incluir categorías en los resultados de la búsqueda

Pregunta:

Estoy intentando incluir categorías en los resultados de búsqueda. He estado buscando durante horas sin solución.

Por "incluir categorías" no me refiero a buscar en una categoría determinada, me refiero a que tengo una tienda de bicicletas y muchas empresas incluidas en el sitio; un usuario buscó BMX mountain cross por ejemplo. Devolverá la categoría BMX primero (al hacer clic se le enviará a la página de la categoría) y las publicaciones relacionadas con el término de búsqueda como lo hace normalmente WordPress.

¿Alguien tiene alguna pista o podría indicarme la dirección correcta?

Respuesta:

Estoy usando este código en mi search.php encima del bucle principal:

$search_term = explode( ' ', get_search_query( false ) );   
global $wpdb;
$select = "
SELECT DISTINCT t.*, tt.* 
FROM wp_terms AS t 
INNER JOIN wp_term_taxonomy AS tt 
ON t.term_id = tt.term_id 
WHERE tt.taxonomy IN ('category')";      
$first = true;
foreach ( $search_term as $s ){
    if ( $first ){
        $select .= " AND (t.name LIKE '%s')";
        $string_replace[] = '%'.$wpdb->esc_like( $s ).'%';
        $first = false;
    }else{
        $select .= " OR (t.name LIKE '%s')";
        $string_replace[] = '%'. $wpdb->esc_like( $s ).'%';
    }
}
$select .= " ORDER BY t.name ASC";
$terms = $wpdb->get_results( $wpdb->prepare( $select, $string_replace ) );
if ( count($terms) > 0 ){
    echo '<ul>';
    foreach ( $terms as $term ) {
        echo '<li><a href="'.esc_url( get_term_link( $term ) ).'" title="'.esc_attr( $term->name ).'">' . esc_html( $term->name ) . '</a></li>';
    }
    echo '</ul>';
}

Este código realiza una consulta de base de datos adicional, pero busca categorías no solo asociadas a las publicaciones devueltas, sino que realiza una búsqueda adicional para cada palabra en un término de búsqueda y trae todas las categorías encontradas, incluso vacías.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım