Установите текст по умолчанию для the_search_query ();

Это код в моем 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> 

И я использую это, чтобы вызвать окно поиска в моих шаблонах: <?php get_search_form(); ?> <?php get_search_form(); ?>

Я хотел бы использовать что-то вроде value="<?php the_search_query(); ?>" Вместо value="Search..." , так что на страницах результатов поиска окно поиска заполняется "поисковым запросом" вместо текста по умолчанию для заполнителя.

Проблема с использованием value="<?php the_search_query(); ?>" том, что поле поиска пустое на всех других страницах (т. 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> 

Не переустанавливайте значение в поле поиска. Вы получите много бессмысленных поисков, потому что люди не ожидают, что им придется очистить поле, прежде чем они смогут что-то ввести в него. Они просто набирают и нажимают enter.

Альтернативы:

  1. Используйте атрибут placeholder . Вы можете стилизовать его отдельно .

     <input placeholder="<?php _e( 'Search' ); ?>"> 
  2. Не используйте ничего. Если вашим пользователям нужен текст внутри поля, чтобы понять, что это поле поиска, ваш дизайн страницы нарушен. Исправьте конструкцию, не добавляйте беспорядок.

Вы можете добавить фильтр в 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(); ?>" .

Вы можете использовать оператор третичного if в атрибуте value для выполнения этого. Это та же идея, что и ваш второй блок кода, но без дублирующих входов, например

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