Aggiungere un menu a discesa Motore al Modulo di Ricerca
Una delle funzionalità più apprezzate di SearchWP è la possibilità di creare motori di ricerca multipli. Più spesso che no, motori multipli si traducono in moduli di ricerca multipli, ognuno con il proprio template dei risultati di ricerca. È anche possibile utilizzare invece il modulo di ricerca e il template dei risultati predefiniti per qualsiasi motore di ricerca in SearchWP.
Questo articolo spiegherà come puoi realizzare tre diversi approcci per aggiungere un menu a discesa Motore al tuo modulo di ricerca.
- Crea il tuo modulo di ricerca con un menu a discesa Motore
- Personalizza l'estensione Shortcodes per includere un menu a discesa Motore
- Personalizza il modulo di ricerca predefinito per includere un menu a discesa di selezione Motore
Creazione del tuo modulo di ricerca
La creazione del tuo modulo di ricerca implica la modifica dei file del tuo tema per includere i campi di input e i pulsanti che vogliamo includere. A un livello più basilare, puoi aggiungere quanto segue al file del template del tuo tema dove desideri che appaia il modulo:
| <!-- https://searchwp.com/documentation/knowledge-base/engine-select-dropdown/ --> | |
| <form role="search" method="get" class="search-form" action="<?php echo esc_url( home_url( '/' ) ); ?>"> | |
| <label> | |
| <span class="screen-reader-text">Search for:</span> | |
| <input type="search" class="search-field" placeholder="Search..." value="<?php echo esc_attr( get_search_query() ); ?>" name="s" title="Search for:" /> | |
| </label> | |
| <?php | |
| $engines = \SearchWP\Settings::get_engines(); | |
| $current_engine = isset( $_GET['swpengine'] ) ? esc_attr( $_GET['swpengine'] ) : 'default'; | |
| ?> | |
| <select name="swpengine" id="swpengine"> | |
| <?php foreach ( $engines as $engine_name => $engine ) : ?> | |
| <option value="<?php echo esc_attr( $engine_name ); ?>" | |
| <?php selected( $current_engine, $engine_name ); ?>> | |
| <?php echo esc_html( $engine->get_label() ); ?> | |
| </option> | |
| <?php endforeach; ?> | |
| </select> | |
| <input type="submit" class="search-submit" value="Search" /> | |
| </form> |
Nota: 'Default' viene visualizzato per il motore predefinito, puoi personalizzarlo modificando la riga 14 in questo snippet.
Questo modulo è strutturato come il modulo di ricerca predefinito di WordPress, ma include anche un elemento select contenente tutti i tuoi Motori SearchWP definiti.
Una volta impostato il tuo modulo, reindirizzerà al tuo template dei risultati di ricerca predefinito, ma dobbiamo anche dire a SearchWP quale motore utilizzare per la ricerca.
All hooks should be added to your custom SearchWP Customizations Plugin.
| <?php | |
| // @link https://searchwp.com/documentation/knowledge-base/engine-select-dropdown/ | |
| if ( ! empty( $_GET['swpengine'] ) ) { | |
| add_filter( 'searchwp\query\args', function( $args ) { | |
| $args['engine'] = $_GET['swpengine']; | |
| return $args; | |
| } ); | |
| } |
Questo snippet è unicamente responsabile di verificare quale opzione è stata scelta dal menu a discesa Motori e di utilizzare tale configurazione del motore per la ricerca.
Utilizza l'estensione Shortcodes di SearchWP
L'estensione Shortcodes di SearchWP ti consente di generare facilmente moduli di ricerca e controllare le pagine dei risultati di ricerca utilizzando gli Shortcodes di WordPress. Ecco un esempio di modulo di ricerca che include un menu a discesa Categorie tra cui scegliere:
Nota: richiede Shortcodes versione 1.2.1 o superiore
All hooks should be added to your custom SearchWP Customizations Plugin.
| <?php | |
| // @link https://searchwp.com/documentation/knowledge-base/engine-select-dropdown/ | |
| // ***** UNCOMMENT THIS IF YOU WANT TO USE SHORTCODES IN WIDGETS | |
| // add_filter( 'widget_text', 'do_shortcode' ); | |
| // Output a SearchWP Engines dropdown | |
| function my_searchwp_shortcodes_inject_engines() { ?> | |
| <p class="searchwp-shortcodes-engines"> | |
| <?php | |
| $engines = \SearchWP\Settings::get_engines(); | |
| $current_engine = isset( $_GET['swpengine'] ) ? esc_attr( $_GET['swpengine'] ) : 'default'; | |
| ?> | |
| <select name="swpengine" id="swpengine"> | |
| <?php foreach ( $engines as $engine_name => $engine ) : ?> | |
| <option value="<?php echo esc_attr( $engine_name ); ?>" | |
| <?php selected( $current_engine, $engine_name ); ?>> | |
| <?php echo esc_html( $engine->get_label() ); ?> | |
| </option> | |
| <?php endforeach; ?> | |
| </select> | |
| </p><?php | |
| } | |
| add_action( 'searchwp_shortcodes_after_input', 'my_searchwp_shortcodes_inject_engines' ); |
Questo personalizzerà il modulo Shortcodes di SearchWP per includere anche il nostro menu a discesa Motori. Questo gestisce solo il menu a discesa, tuttavia. Dobbiamo ancora dire a SearchWP quale motore utilizzare quando si esegue una ricerca. Ciò può essere fatto aggiungendo quanto segue al tuo plugin di personalizzazione di SearchWP (non al file del template del tema dove hai aggiunto il codice del modulo).
| <?php | |
| // @link https://searchwp.com/documentation/knowledge-base/engine-select-dropdown/ | |
| if ( ! empty( $_GET['swpengine'] ) ) { | |
| add_filter( 'searchwp\query\args', function( $args ) { | |
| $args['engine'] = $_GET['swpengine']; | |
| return $args; | |
| } ); | |
| } |
Questo snippet controllerà la richiesta di ricerca per vedere quale motore è stato scelto dal menu a discesa e lo utilizzerà per la ricerca corrente.
Modifica il modulo di ricerca predefinito per includere un menu a discesa Motori
WordPress ci consente di filtrare il modulo di ricerca predefinito presente in molti temi. Viene generato da una chiamata a get_search_form() che può essere completamente personalizzata includendo un file denominato searchform.php nella directory del tuo tema, o tramite il filtro get_search_form. Per questo esempio utilizzeremo il filtro get_search_form.
All hooks should be added to your custom SearchWP Customizations Plugin.
Per includere un menu a discesa Motori nel modulo di ricerca predefinito del tuo sito, aggiungi quanto segue al tuo plugin di personalizzazione di SearchWP:
| <?php | |
| // Adds a SearchWP Engines dropdown to the search form | |
| // @link https://searchwp.com/documentation/knowledge-base/engine-select-dropdown/ | |
| function my_searchwp_get_search_form_with_engines_dropdown( $form ) { | |
| ob_start(); ?> | |
| <form role="search" method="get" class="search-form" action="<?php echo esc_url( home_url( '/' ) ); ?>"> | |
| <label> | |
| <span class="screen-reader-text">Search For</span> | |
| <input type="search" class="search-field" placeholder="Search..." value="<?php echo esc_attr( get_search_query() ); ?>" name="s" title="Search for:" /> | |
| </label> | |
| <?php | |
| $engines = \SearchWP\Settings::get_engines(); | |
| $current_engine = isset( $_GET['swpengine'] ) ? esc_attr( $_GET['swpengine'] ) : 'default'; | |
| ?> | |
| <select name="swpengine" id="swpengine"> | |
| <?php foreach ( $engines as $engine_name => $engine ) : ?> | |
| <option value="<?php echo esc_attr( $engine_name ); ?>" | |
| <?php selected( $current_engine, $engine_name ); ?>> | |
| <?php echo esc_html( $engine->get_label() ); ?> | |
| </option> | |
| <?php endforeach; ?> | |
| </select> | |
| <input type="submit" class="search-submit" value="Search" /> | |
| </form> | |
| <?php return ob_get_clean(); | |
| } | |
| add_filter( 'get_search_form', 'my_searchwp_get_search_form_with_engines_dropdown' ); |
Il codice del modulo utilizzato qui si basa sul modulo di ricerca predefinito fornito con WordPress. C'è la possibilità che il tuo tema abbia precedentemente personalizzato il modulo e tu voglia semplicemente aggiungere il menu a discesa. Puoi semplicemente modificare il codice del modulo per farlo corrispondere a quello fornito con il tuo tema e aggiungere le righe 11-22 da quel campione di codice dove vuoi che appaia il tuo menu a discesa Engines.
Questo snippet modifica solo il modulo di ricerca, dobbiamo ancora acquisire il valore dal menu a discesa e dire a SearchWP di utilizzare il motore scelto per la ricerca. Possiamo farlo aggiungendo quanto segue al tuo plugin SearchWP Customizations (non al file del modello del tema in cui hai aggiunto il codice del modulo).
| <?php | |
| // @link https://searchwp.com/documentation/knowledge-base/engine-select-dropdown/ | |
| if ( ! empty( $_GET['swpengine'] ) ) { | |
| add_filter( 'searchwp\query\args', function( $args ) { | |
| $args['engine'] = $_GET['swpengine']; | |
| return $args; | |
| } ); | |
| } |

