Limiter les résultats au type de publication (par ex. Publications, Pages)
Par défaut, SearchWP renverra les résultats conformément à la configuration du moteur utilisé pour effectuer la recherche. Il y a des moments où vous voudrez créer un formulaire qui permet aux visiteurs de limiter les résultats à un nombre quelconque de sources ajoutées au moteur. Une fois le formulaire créé, nous pouvons utiliser un Mod pour limiter les résultats renvoyés par le moteur à ceux spécifiés par le formulaire.
L'implémentation de base ressemble à ceci :
All hooks should be added to your custom SearchWP Customizations Plugin.
| <?php | |
| // Limit SearchWP results to Posts and Pages. | |
| add_filter( 'searchwp\query\mods', function( $mods, $query ) { | |
| $mod = new \SearchWP\Mod(); | |
| $mod->set_where( [ [ | |
| 'column' => 'source', | |
| 'value' => [ | |
| \SearchWP\Utils::get_post_type_source_name( 'post' ), | |
| \SearchWP\Utils::get_post_type_source_name( 'page' ) | |
| ], | |
| 'compare' => 'IN', | |
| ] ] ); | |
| $mods[] = $mod; | |
| return $mods; | |
| }, 10, 2 ); |
Note : Cet extrait illustre la limitation des résultats aux articles et aux pages, sans tenir compte de la saisie du formulaire.
Nous pouvons intégrer ce Mod à la saisie du formulaire (en supposant que la variable $_GET s'appelle sources) comme ceci :
All hooks should be added to your custom SearchWP Customizations Plugin.
| <?php | |
| // Limit SearchWP results to form field value. | |
| // `sources` is a GET array of post type names. | |
| add_filter( 'searchwp\query\mods', function( $mods, $query ) { | |
| if ( empty( $_GET['sources'] ) ) { | |
| return $mods; | |
| } | |
| $mod = new \SearchWP\Mod(); | |
| $mod->set_where( [ [ | |
| 'column' => 'source', | |
| 'value' => array_map( function( $source ) { | |
| return \SearchWP\Utils::get_post_type_source_name( $source ); | |
| }, $_GET['sources'] ), | |
| 'compare' => 'IN', | |
| ] ] ); | |
| $mods[] = $mod; | |
| return $mods; | |
| }, 10, 2 ); |
Note : Cet extrait suppose que votre variable de formulaire a été configurée comme des cases à cocher qui créent un tableau de noms de types de publication, et que les noms de types de publication correspondent à ceux qui ont été ajoutés au moteur utilisé, par exemple.
| <form role="search" method="get" class="search-form" action="<?php echo home_url( '/' ); ?>"> | |
| <label> | |
| <span class="screen-reader-text"><?php echo _x( 'Search for:', 'label' ) ?></span> | |
| <input type="search" class="search-field" | |
| placeholder="<?php echo esc_attr_x( 'Search …', 'placeholder' ) ?>" | |
| value="<?php echo get_search_query() ?>" name="s" | |
| title="<?php echo esc_attr_x( 'Search for:', 'label' ) ?>" /> | |
| </label> | |
| <p> | |
| <input type="checkbox" class="search-field" id="source-post" | |
| value="post" name="sources[]" /> | |
| <label for="source-post">Posts</label> | |
| </p> | |
| <p> | |
| <input type="checkbox" class="search-field" id="source-page" | |
| value="post" name="sources[]" /> | |
| <label for="source-page">Pages</label> | |
| </p> | |
| <input type="submit" class="search-submit" | |
| value="<?php echo esc_attr_x( 'Search', 'submit button' ) ?>" /> | |
| </form> |
(Spécifiquement les lignes 9-18)

