Regrouper les résultats de recherche en direct par catégorie
La personnalisation de l'affichage des résultats pour l'extension Live Search de SearchWP a été conçue pour faciliter la personnalisation de quelque manière que ce soit. Si, par exemple, vous souhaitez regrouper vos résultats par catégorie de publication, vous pouvez utiliser ceci comme point de départ dans votre modèle de résultats personnalisé :
| <?php if ( ! have_posts() ) : ?> | |
| <p>No results</p> | |
| <?php return; endif;?> | |
| <?php | |
| global $post; | |
| $grouped_results = []; | |
| $no_term_results = []; | |
| while ( have_posts() ) { | |
| the_post(); | |
| $categories = get_the_terms( $post, 'category' ); | |
| // Group by the first Category returned. | |
| if ( ! empty( $categories ) && isset( $categories[0] ) ) { | |
| // If this group doesn't exist yet, create it. | |
| if ( ! array_key_exists( $categories[0]->term_id, $grouped_results ) ) { | |
| $grouped_results[ $categories[0]->term_id ] = [ | |
| 'term' => $categories[0], | |
| 'results' => [], | |
| ]; | |
| } | |
| // Add this result to the group. | |
| $grouped_results[ $categories[0]->term_id ]['results'][ $post->ID ] = get_post( $post->ID ); | |
| } else { | |
| $no_term_results[ $post->ID ] = get_post( $post->ID ); | |
| } | |
| } | |
| // Output grouped results. | |
| if ( ! empty( $grouped_results ) ) { | |
| foreach ( $grouped_results as $grouped_result ) { | |
| echo '<h3>' . esc_html( $grouped_result['term']->name ) . '</h3>'; | |
| foreach ( $grouped_result['results'] as $result ) { | |
| ?> | |
| <div class="searchwp-live-search-result" role="option" id="" aria-selected="false"> | |
| <p> | |
| <a href="<?php echo esc_url( get_permalink( $result->ID ) ); ?>"> | |
| <?php echo wp_kses_post( get_the_title( $result->ID ) ); ?> » | |
| </a> | |
| </p> | |
| </div> | |
| <?php | |
| } | |
| } | |
| } | |
| // Output ungrouped results. | |
| if ( ! empty( $no_term_results ) ) { | |
| foreach ( $no_term_results as $result ) { | |
| ?> | |
| <div class="searchwp-live-search-result" role="option" id="" aria-selected="false"> | |
| <p> | |
| <a href="<?php echo esc_url( get_permalink( $result->ID ) ); ?>"> | |
| <?php echo wp_kses_post( get_the_title( $result->ID ) ); ?> » | |
| </a> | |
| </p> | |
| </div> | |
| <?php | |
| } | |
| } |

