Definir texto padrão para the_search_query ();

2

Este é o código no meu searchform.php:

<div class="search-box">
    <form method="get" class="searchform" action="<?php echo esc_url( home_url( '/' ) ); ?>">
        <label for="s" class="assistive-text"><?php _e( 'Search', 'reddle' ); ?></label>
        <div class="search-input-holder">
            <input type="text" class="field s" name="s" value="Search..." onfocus="if (this.value == 'Search...') {this.value = '';}" onblur="if (this.value == '') {this.value = 'Search...';}" />
        </div>
        <input type="image" src="/images/search.png" alt="Search" class="submit" name="submit" class="searchsubmit"  />
    </form>
</div>

E eu uso isso para chamar a caixa de pesquisa em meus modelos: <?php get_search_form(); ?>

Eu gostaria de usar algo como value="<?php the_search_query(); ?>" em vez de value="Search..." , para que nas páginas de resultados de pesquisa, a caixa de pesquisa seja preenchida com a "consulta de pesquisa" em vez do texto de espaço reservado padrão.

O problema com o uso de value="<?php the_search_query(); ?>" é que a caixa de pesquisa está em branco em todas as outras páginas (ou seja, não há texto de espaço reservado).

Existe uma maneira de definir o padrão para the_search_query(); para que, quando não for uma página de resultados de pesquisa, algum texto padrão seja exibido? Por exemplo, algo nos moldes de value="<?php the_search_query( 'Search...' ); ?>" (NÃO TRABALHA!)

A partir de agora, é assim que estou fazendo isso:

<div class="search-box">
    <form method="get" class="searchform" action="<?php echo esc_url( home_url( '/' ) ); ?>">
        <label for="s" class="assistive-text"><?php _e( 'Search', 'reddle' ); ?></label>
        <div class="search-input-holder">

            <?php if ( is_search() ) { ?>
            <input type="text" class="field s" name="s" value="<?php the_search_query(); ?>" onfocus="if (this.value == 'Search...') {this.value = '';}" onblur="if (this.value == '') {this.value = 'Search...';}" />

            <?php } else { ?>
            <input type="text" class="field s" name="s" value="Search..." onfocus="if (this.value == 'Search...') {this.value = '';}" onblur="if (this.value == '') {this.value = 'Search...';}" />
            <?php } ?>

        </div>
        <input type="image" src="/images/search.png" alt="Search" class="submit" name="submit" class="searchsubmit"  />
    </form>
</div>
    
por its_me 04.07.2012 / 07:24

3 respostas

3

Não codifique um valor no campo de pesquisa. Você obterá muitas pesquisas sem sentido porque as pessoas não esperam que tenham que limpar o campo antes de digitar algo nele. Eles apenas digitarão e teclarão.

Alternativas:

  1. Use o atributo placeholder . Você pode formatá-lo separadamente .

    <input placeholder="<?php _e( 'Search' ); ?>">
    
  2. Não use nada. Se os seus usuários precisarem de um texto dentro do campo para perceber que é um campo de pesquisa, o design da sua página está quebrado. Corrigir o design, não adicionar desordem.

por fuxia 04.07.2012 / 14:38
5

Você pode adicionar um filtro a the_search_query() .

add_filter( 'the_search_query', 'wpse_search_q_filter' );
function wpse_search_q_filter( $query ) {
    if( empty( $query ) )
        $query = 'Search...';

    return $query;
}

Isso permitirá que você use value="<?php the_search_query(); ?>" em seu formulário.

    
por Chris_O 04.07.2012 / 07:51
3

Você pode usar uma declaração terciária if no atributo value para realizar isso. É a mesma ideia do segundo bloco de código, mas sem as entradas duplicadas, por exemplo,

value="<?php echo is_search()? get_search_query() : 'Search...'; ?>"
    
por Sarathi Hansen 04.07.2012 / 08:06

Tags