Ergebnisse auf Beitragstyp beschränken (z. B. Beiträge, Seiten)
Standardmäßig gibt SearchWP Ergebnisse gemäß der Konfiguration der Engine zurück, die zur Durchführung der Suche verwendet wird. Es gibt Zeiten, in denen Sie ein Formular erstellen möchten, das es Besuchern ermöglicht, die Ergebnisse auf eine beliebige Anzahl von Quellen zu beschränken, die zur Engine hinzugefügt wurden. Sobald das Formular erstellt ist, können wir ein Mod verwenden, um die von der Engine zurückgegebenen Ergebnisse auf die durch das Formular angegebenen zu beschränken.
Die grundlegende Implementierung sieht wie folgt aus:
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 ); |
Hinweis: Dieser Ausschnitt veranschaulicht die Beschränkung der Ergebnisse auf Beiträge und Seiten, ohne die Formulareingabe zu berücksichtigen.
Wir können dieses Mod mit der Formulareingabe integrieren (vorausgesetzt, die $_GET-Variable hat den Namen sources) wie folgt:
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 ); |
Hinweis: Dieser Ausschnitt geht davon aus, dass Ihre Formularvariable als Kontrollkästchen eingerichtet wurde, die ein Array von Beitragstypnamen erstellen, und dass die Beitragstypnamen mit denen übereinstimmen, die zur verwendeten Engine hinzugefügt wurden, z. B.
| <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> |
(Insbesondere Zeilen 9-18)

