Limita i risultati al tipo di post (es. Post, Pagine)
Per impostazione predefinita, SearchWP restituirà i risultati in base alla configurazione del Motore utilizzato per eseguire la ricerca. Ci sono momenti in cui si desidera creare un modulo che consenta ai visitatori di limitare i risultati a qualsiasi numero di Fonti aggiunte al Motore. Una volta creato il modulo, possiamo utilizzare una Mod per limitare i risultati restituiti dal Motore a quelli specificati dal modulo.
L'implementazione di base è la seguente:
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 ); |
Nota: Questo snippet illustra la limitazione dei risultati ad Articoli e Pagine, senza tenere conto dell'input del modulo.
Possiamo integrare questa Mod con l'input del modulo (supponendo che la variabile $_GET abbia un nome di sources) in questo modo:
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 ); |
Nota: Questo snippet presuppone che la variabile del tuo modulo sia stata impostata come caselle di controllo che creano un array di nomi di tipi di post e che i nomi dei tipi di post corrispondano a quelli aggiunti al Motore in uso, ad esempio.
| <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> |
(Specificamente le righe 9-18)

