Soporte » WordPress Avanzado » 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]

Viendo 2 respuestas - 1 de 2 (de 2 total)
  • Moderador LGrusin

    (@lgrusin)

    Hola LGrusin.

    Gracias por el enlace. Ya lo había leído antes y no conseguí que me ayudara. Lo he vuelto a releer con más atención, pero no veo que me resuelva el problema concreto que tengo.

    Lo que necesito es incluir todos los post con todas las etiquetas y categorías. Por ejemplo, si tengo un post con la etiqueta “nieve” y en la categoría “alpinismo”, pero que no incluya ninguna de esas palabras ni en su extracto, ni en su título ni en su contenido, me aparezca como resultado si busco cualquiera de las dos palabras.

    Hasta ahí lo he conseguido. El problema es que ahora me incluye las plantillas de Elementor y algunos resultados en blanco, que no sé qué serán. Llevan fecha y autor pero nada de contenido. Ni siquiera se pueden clickar.

    ¿No hay opción de evitar esto quitando o agregando nada del código que puse?

Viendo 2 respuestas - 1 de 2 (de 2 total)
  • Debes estar registrado para responder a este tema.