Includere le categorie nei risultati di ricerca

5 feb 2013, 07:55:14
Visualizzazioni: 25.5K
Voti: 10

Sto cercando di includere le categorie nei risultati di ricerca. Ho cercato per ore senza trovare una soluzione.

Per "includere le categorie" non intendo cercare in una determinata categoria, ma per esempio, supponiamo di avere un negozio di biciclette con molte aziende incluse nel sito; se un utente cerca BMX mountain cross, dovrebbe apparire prima la categoria BMX (cliccandoci si viene indirizzati alla pagina della categoria) e poi i post relativi al termine di ricerca come fa normalmente WordPress.

Qualcuno ha suggerimenti o può indirizzarmi nella giusta direzione?

0
Tutte le risposte alla domanda 8
0

Utilizza get_terms(), così non avrai bisogno di usare una query personalizzata al database.

$terms = get_terms( 'category', array(
    'name__like' => $s,
    'hide_empty' => true // Opzionale 
) );
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>';
}

Basato sulla risposta di birgire a una domanda simile: https://wordpress.stackexchange.com/a/239680/50432

18 set 2016 20:35:28
1

Sto utilizzando questo codice nel mio search.php prima del loop principale:

$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>';
}

Questo codice esegue una query aggiuntiva al database, ma cerca le categorie non solo associate ai post restituiti, ma effettua una ricerca aggiuntiva per ogni parola del termine di ricerca e restituisce tutte le categorie trovate - anche quelle vuote.

5 feb 2013 11:37:27
Commenti

David grazie. questo potrebbe fare quello che sto cercando ma ho deciso di usare get_term_by e procedere da lì. accetterò la tua risposta

Yaniv Kossas Yaniv Kossas
5 feb 2013 19:17:56
0

Ho creato una pagina personalizzata per i risultati di ricerca che confronta le keyword con categorie, articoli, custom post type...

Ecco il codice per le categorie (mostra anche un campo ACF per le immagini delle categorie):

<?php
    // categorie degli articoli nei risultati
    $terms = get_terms( 'post', array(
        'name__like' => $s,
        'hide_empty' => false // Opzionale 
    ) );
?>
<?php
// elenco categorie degli articoli nei risultati
if ( count($terms) > 0 ) {
    echo '<div class="sr-categories">';
    echo '<h3 class="search-title">Risultati per categorie</h3>';
?>
<div class="posts-wrap posts-layout-default  row">
    <?php
        foreach ( $terms as $term ) { ?>

        <?php
            echo '<article class="sub-cat-row col-md-4 col-sm-6 col-xs-6 col-xxs-12">';
            echo '<a href="' . esc_url( get_term_link( $term ) ) . '" title="' . esc_attr( $term->name ) . '">';

            $taximg_id = get_field('image', $term);
            $taxsize = "grid-image"; // (thumbnail, medium, large, full o dimensioni personalizzate)
            $taximage = wp_get_attachment_image_src( $taximg_id, $taxsize );

            if($taximg_id) { ?>
                <img src="<?php echo $taximage[0]; ?>" alt="Immagine della categoria <?php echo esc_attr( $term->name ); ?>" title="Immagine della categoria <?php echo esc_attr( $term->name ); ?>" class="img-responsive" />
            <?php } else { ?>
                <img src="<?php echo get_stylesheet_directory_uri(); ?>/assets/images/default-image-600x400.png" alt="Immagine predefinita" title="Immagine predefinita" />
            <?php }

            echo '<div class="sc-title text-center">' . esc_html( $term->name ) . '</div></a>';
            echo '</article>';

            //get_template_part('template-parts/loop/content','listevents');
            wp_reset_postdata();
        }

     ?>
</div>
<?php echo '</div>'; // chiusura sr-events
} else {
    echo 'Nessuna categoria di Eventi trovata';
}
?>
14 set 2018 16:59:34
1

Ovviamente è possibile, se funziona così, sto usando TwentyTwelve, devi modificare search.php. Lì troverai il loop:

<?php while ( have_posts() ) : the_post(); ?>
<?php get_template_part( 'content', get_post_format() ); ?>
<?php endwhile; ?>

Quindi, il loop sta prendendo il post_format(). Perciò devi modificare content.php. Qui troverai queste righe:

<?php if ( is_search() ) : // Mostra solo gli estratti per la Ricerca ?>
<div class="entry-summary">
<?php the_excerpt(); ?>
</div><!-- .entry-summary -->

Basta cambiarlo con:

<?php if ( is_search() ) : // Mostra solo gli estratti per la Ricerca ?>
<div class="entry-summary">
<?php the_category(); ?><br/>
<?php the_excerpt(); ?>
</div><!-- .entry-summary -->

Se tutto funziona correttamente, allora mostrerà la Categoria associata al risultato di ricerca. Ma solo se tutto va come speriamo. :)

5 feb 2013 11:06:07
Commenti

non è assolutamente quello che stavo cercando, ma grazie. tu stai semplicemente visualizzando il nome della categoria o il link della categoria, se ricordo bene, e non è quello che sto cercando di fare.

Yaniv Kossas Yaniv Kossas
5 feb 2013 19:13:21
0

Basato sulla risposta di @PhilOwen, ho aggiunto il seguente codice all'inizio della pagina search.php del mio tema:

// categorie dei post nei risultati
$terms = get_terms( 'taxonomy-goes-here', array(
  'name__like' => $s,
  'hide_empty' => false // Opzionale
) );

if ( count($terms) > 0 ) {
  foreach ( $terms as $term ) {
    echo '<h2><a href="' . esc_url( get_term_link( $term ) ) . '" title="' . esc_attr( $term->name ) . '">';
    echo esc_html( $term->name );
    echo '</a></h2>';
  }
}

Penso che spesso abbia senso mostrare i termini della tassonomia che corrispondono alla ricerca - se esistono - sopra i singoli elementi, poiché sarebbero più in alto nella gerarchia dei dati.

11 apr 2019 21:58:19
0

Ho trovato un modo migliore e volevo condividerlo non c'è bisogno di usare $wpdb questo codice funziona per me:

$val = get_search_query();
$categories = get_terms( ['taxonomy' => 'product_cat'] );
    foreach($categories as $cat){
    if (stristr($cat->name , $val)){
        echo '<tr><td><a href="'.get_term_link( $cat ).'" >' .$cat->name.'</a></td></tr>';
        break;
}

questo codice cerca nelle categorie di prodotto e non ha bisogno che la corrispondenza sia esatta

29 dic 2021 18:13:38
0

Ho visto alcune risposte che utilizzano get_terms(), il che va bene, ma sono un fan dell'andare alla fonte, quindi questo è ciò che ho creato utilizzando la classe WP_Term_Query sorgente @ https://github.com/WordPress/wordpress-develop/blob/6.7/src/wp-includes/class-wp-term-query.php#L96:

$product_category_query = new WP_Term_Query(array(
  'number'   => 10,                   // Numero massimo di termini da restituire
  'orderby'  => 'name',               // Ordina per nome
  'order'    => 'ASC',                // Ordine ascendente
  'search'   => $search_input_value,   // Valore di ricerca
  'taxonomy' => array('product_cat'), // Tassonomia delle categorie prodotto
));

Puoi poi ciclare attraverso i risultati:

<ul>
  <?php foreach($product_category_query->terms as $term) : ?>
    <li><a href="<?php echo get_term_link($term); ?>"><?php echo $term->name; ?></a></li>
  <?php endforeach; ?>
</ul>
20 feb 2025 22:34:58
2
-1

PROBLEM: A partire da marzo 2022, WordPress non cerca per categoria o tag.

SOLUZIONE/ALTERNATIVA: Utilizzare un plugin per permettere la ricerca per categoria o tag. L'ho testato con la versione gratuita del plugin Relevanssi. https://www.relevanssi.com/features/. Anche altri plugin potrebbero funzionare.

DISCLAIMER: Non sono affiliato con Relevanssi o con qualsiasi altro fornitore di plugin di ricerca per WordPress.

12 mar 2022 21:13:57
Commenti

WordPress non ha mai cercato nei nomi delle categorie, tag (o qualsiasi tipo di tassonomia in generale) o nelle descrizioni. Questo è il fulcro della domanda. "usa un plugin" è una risposta ovvia che non aggiunge molto e non è nello spirito delle risposte attese su questo sito.

Mark Kaplun Mark Kaplun
13 mar 2022 07:43:47

Un plugin per qualcosa del genere è davvero eccessivo. Dovresti usare WP_Term_Query o get_terms().

cfx cfx
20 feb 2025 22:35:47