WordPress.org

Ready to get started?Download WordPress

Codex

it:Riferimento funzioni/get search form

Contents

Descrizione

Mostra il form di ricerca utilizzando il file searchform.php del tema in uso.

Utilizzo

<?php get_search_form(); ?>

Parametri

$echo
(boolean) (opzionale) true per stampare il form; false per restituire il form come stringa.
Default: true

Valori restituiti

(string) 
Il codice HTML del form, se il parametro $echo è impostato a false.

Esempi

Se nel proprio tema non è presente searchform.php, WordPress utilizzerà il proprio form di ricerca interno:

<form role="search" method="get" id="searchform" action="<?php echo home_url( '/' ); ?>">
    <div><label class="screen-reader-text" for="s">Cerca:</label>
        <input type="text" value="" name="s" id="s" />
        <input type="submit" id="searchsubmit" value="Cerca" />
    </div>
</form>

Il form qui sopra è utilizzato nei siti web HTML4. Se il proprio tema supporta HTML5, che avviene quando si utilizza add_theme_support('html5', array('search-form')), verrà stampato il seguente form HTML. Questo comportamento si verifica a partire da WordPress 3.6.

<form role="search" method="get" class="search-form" action="<?php echo home_url( '/' ); ?>">
  <label>
    <span class="screen-reader-text">Cerca:</span>
    <input type="search" class="search-field" placeholder="Cerca …" value="" name="s" title="Cerca:" />
  </label>
  <input type="submit" class="search-submit" value="Cerca" />
</form>

Tra i cambiamenti vi è anche la presenza di class="search-form". Inoltre, l'input è type="search" e non type="text". Oltre a ciò c'è un segnaposto (placeholder) che stampa del testo quando appropriato: in tal modo non è necessario utilizzare javascript per mostrare tale segnaposto. Non sono più presenti elementi con un id: in questo modo è possibile avere più form di ricerca in un documento valido.

Se è presente searchform.php nel proprio tema, verrà utilizzato questo. Si tenga a mente che il form di ricerca deve fare una richiesta GET all'home page del sito. Il campo di testo deve avere nome s e si deve sempre includere una label come negli esempi riportati sopra.

Esempio di un searchform.php personalizzato:

<form action="/" method="get">
    <fieldset>
        <label for="search">Cerca in <?php echo home_url( '/' ); ?></label>
        <input type="text" name="s" id="search" value="<?php the_search_query(); ?>" />
        <input type="image" alt="Cerca" src="<?php bloginfo( 'template_url' ); ?>/images/search.png" />
    </fieldset>
</form>

L'unico parametro che verrà inviato è s con il valore della corrente query di ricerca. Tuttavia, è possibile affinarla in molti modi. Ad esempio mostrando solo i post nei risultati della ricerca. Questo si può fare con la seguente aggiunta al form:

<input type="hidden" value="post" name="post_type" id="post_type" />

Qui viene inviato il valore post. Il valore predefinito è any, ossia articoli, pagine e tipi di post personalizzati. Con questo l'input aggiunto al form la ricerca verrà effettuata solo nei post di tipo post_type. Ci sono molte aggiunte come questa. Con un var_dump dell'oggetto $wp_query è possibile vedere tutti i valori predefiniti delle variabili di ricerca. Con un var_dump di $wp_query->query è possibile vedere la query corrente.

Un'ultima opzione è quella di scrivere una funzione personalizzata (nel file functions.php) e agganciare tale funzione all'azione get_search_form.

function my_search_form( $form ) {
    $form = '<form role="search" method="get" id="searchform" class="searchform" action="' . home_url( '/' ) . '" >
    <div><label class="screen-reader-text" for="s">' . __( 'Cerca:' ) . '</label>
    <input type="text" value="' . get_search_query() . '" name="s" id="s" />
    <input type="submit" id="searchsubmit" value="'. esc_attr__( 'Cerca' ) .'" />
    </div>
    </form>';

    return $form;
}

add_filter( 'get_search_form', 'my_search_form' );

Note

Il parametro $echo viene ignorato quando searchform.php è presente. C'è una discussione a tal proposito nel WordPress Trac.

Uno stratagemma è quello di passare il form a get_search_form() attraverso il filtro get_search_form.

Si prega di utilizzare value="<?php echo get_search_query(); ?>" (una funzione wrapper per: esc_attr( $s ) e altri filtri necessari) se si desidera stampare i termini appena cercati nel campo di ricerca una volta effettuata la ricerca. Questo è uno dei punti nei temi più vulnerabili ai cross-site scripting se non si prendono precauzioni.

Log delle modifiche

File sorgente

get_search_form() si trova in wp-includes/general-template.php.

Correlati

Include Tags

Si veda anche l'indice di Riferimento funzioni e l'indice di Tag dei template.