设置_Search_Query()的默认文本;

时间:2012-07-04 作者:its_me

这是我搜索表单中的代码。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>
我用它调用模板中的搜索框:<?php get_search_form(); ?>

我想用value="<?php the_search_query(); ?>" 而不是value="Search...", 因此,在搜索结果页面上,搜索框将填充“搜索查询”,而不是默认占位符文本。

使用的问题value="<?php the_search_query(); ?>" 其他所有页面上的搜索框均为空(即没有占位符文本)。

有没有办法设置the_search_query(); 所以当它不是搜索结果页面时,会显示一些默认文本?例如value="<?php the_search_query( \'Search...\' ); ?>" (不起作用!)

到目前为止,我是这样做的:

<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>

3 个回复
最合适的回答,由SO网友:fuxia 整理而成

不要在搜索字段中硬编码值。你会得到很多无意义的搜索,因为人们并不期望他们在输入内容之前必须清理字段。他们只需键入并按enter键。

备选方案:

使用placeholder 属性你可以style it separately.

<input placeholder="<?php _e( \'Search\' ); ?>">
什么都不用。如果您的用户需要字段内的文本来意识到它是一个搜索字段,那么您的页面设计就被破坏了。修复设计,不要添加混乱。

SO网友:Chris_O

您可以将筛选器添加到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;
}
这将允许您使用value="<?php the_search_query(); ?>" 以您的形式。

SO网友:Sarathi

您可以在value属性中使用第三个if语句来实现这一点。这与您的第二块代码的想法相同,但没有重复的输入,例如:。

value="<?php echo is_search()? get_search_query() : \'Search...\'; ?>"

结束