默认搜索功能如果搜索表单为空,则返回主页,我希望它返回“抱歉,您的搜索没有返回结果”页面。
this post doesn\'t answer it
和
this ticket 告诉我它应该是这样工作的!任何人都知道如何改变它,除了使用。htaccess重定向?
我正在使用以下搜索。php文件:`
<div id="content" class="clearfix">
<div id="main" class="col700 left clearfix" role="main">
<h1 class="archive_title"><span>Search Results for:</span> <?php echo esc_attr(get_search_query()); ?></h1>
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<article id="post-<?php the_ID(); ?>" <?php post_class(\'clearfix\'); ?>>
<header>
<h3><a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></h3>
<p class="meta"><?php _e("Posted", "bonestheme"); ?> <time datetime="<?php echo the_time(\'Y-m-j\'); ?>" pubdate><?php the_time(\'F jS, Y\'); ?></time> <?php _e("by", "bonestheme"); ?> <?php the_author_posts_link(); ?> <span class="amp">&</span> <?php _e("filed under", "bonestheme"); ?> <?php the_category(\', \'); ?>.</p>
</header> <!-- end article header -->
<section class="post_content">
<?php the_excerpt(\'<span class="read-more">Read more on "\'.the_title(\'\', \'\', false).\'" »</span>\'); ?>
</section> <!-- end article section -->
<footer>
</footer> <!-- end article footer -->
</article> <!-- end article -->
<?php endwhile; ?>
<?php if (function_exists(\'page_navi\')) { // if expirimental feature is active ?>
<?php page_navi(); // use the page navi function ?>
<?php } else { // if it is disabled, display regular wp prev & next links ?>
<nav class="wp-prev-next">
<ul class="clearfix">
<li class="prev-link"><?php next_posts_link(_e(\'« Older Entries\', "bonestheme")) ?></li>
<li class="next-link"><?php previous_posts_link(_e(\'Newer Entries »\', "bonestheme")) ?></li>
</ul>
</nav>
<?php } ?>
<?php else : ?>
<!-- this area shows up if there are no results -->
<article id="post-not-found">
<header>
<h1>No Results Found</h1>
</header>
<section class="post_content">
<p>Sorry, but the requested resource was not found on this site.</p>
</section>
<footer>
</footer>
</article>
<?php endif; ?>
</div> <!-- end #main -->
<div id="sidebar1" class="sidebar right col220">
<?php get_search_form(); ?>
</div>
</div> <!-- end #content -->
`
最合适的回答,由SO网友:Tom J Nowell 整理而成
这里有3种方法可以解决这个问题,我建议您使用解决方案2,但首先要注意解决方案1中的jQuery,以避免出现这种情况。
对于那些希望从提问者主题发布更多代码的人来说,这不是一个主题问题,这是一个影响所有WordPress网站的一般WordPress问题。
Solution 1
您可以在此处找到有关如何解决此问题的深入教程:
http://wpengineer.com/2162/fix-empty-searches/
今天,让我们看看大多数专业人士从未见过的东西:空搜索。您提供了一个搜索输入字段,有人无意中点击了提交按钮,但没有输入任何术语。生成的URI如下所示:示例。com/?s=。它显示与您的首页相同的内容。事实上,这是头版。
没人需要这个。
Solution 2 (recommended)
斯皮策从一个岗位上取下
http://wordpress.org/support/topic/blank-search-sends-you-to-the-homepage另一个选项是添加请求筛选器:
add_filter( \'request\', \'my_request_filter\' );
function my_request_filter( $query_vars ) {
if( isset( $_GET[\'s\'] ) && empty( $_GET[\'s\'] ) ) {
$query_vars[\'s\'] = " ";
}
return $query_vars;
}
然后,如果要在搜索表单中重用搜索查询,请不要忘记对其进行修剪,以免最后出现一个或多个空格(只是为了保持整洁,可能不会影响结果)。
<input type="text" name="s" id="s" value="<?php echo trim( get_search_query() ); ?>"/>
希望这有帮助,到目前为止,它似乎在我的网站上工作,并且不涉及更改任何WP代码以使升级更容易。
Solution 3
http://www.warpconduit.net/2011/08/02/fix-redirection-and-error-page-on-empty-wordpress-search/
与解决方案2类似,但范围不大,略有不同。
if(!is_admin()){
add_action(\'init\', \'search_query_fix\');
}
function search_query_fix(){
if(isset($_GET[\'s\']) && $_GET[\'s\']==\'\'){
$_GET[\'s\']=\' \';
}
}
SO网友:Felix Eve
以Tom的解决方案2为基础,但确保未返回帖子,如前所述添加请求筛选器:
add_filter( \'request\', \'my_request_filter\' );
function my_request_filter( $query_vars ) {
if( isset( $_GET[\'s\'] ) && empty( $_GET[\'s\'] ) ) {
$query_vars[\'s\'] = " ";
global $no_search_results;
$no_search_results = TRUE;
}
return $query_vars;
}
但这次设置了一个全局变量,表示不应返回任何搜索结果。然后使用posts\\U where hook确保未返回任何posts:
add_filter( \'posts_where\' , \'posts_where_statement\' );
function posts_where_statement( $where ) {
global $no_search_results;
if($no_search_results) {
$where .= \' AND 1=0\';
}
return $where;
}
SO网友:Mohit Bumb
创建页面搜索。php并粘贴此代码,并使用“get\\u template\\u part(\'loop\',search\')更改循环;
<div id="container">
<div id="content" role="main">
<?php if ( have_posts() ) : ?>
<h1 class="page-title"><?php printf( __( \'Search Results for: %s\', \'mb\' ), \'<span>\' . get_search_query() . \'</span>\' ); ?></h1>
<?php
/* Run the loop for the search to output the results.
* If you want to overload this in a child theme then include a file
* called loop-search.php and that will be used instead.
*/
get_template_part( \'loop\', \'search\' );
?>
<?php else : ?>
<div id="post-0" class="post no-results not-found">
<h2 class="entry-title"><?php _e( \'Nothing Found\', \'mb\' ); ?></h2>
<div class="entry-content">
<p><?php _e( \'Sorry, but nothing matched your search criteria. Please try again with some different keywords.\', \'twentyten\' ); ?></p>
<?php get_search_form(); ?>
</div><!-- .entry-content -->
</div><!-- #post-0 -->
<?php endif; ?>
</div><!-- #content -->
</div><!-- #container -->
<?php get_sidebar(); ?>
<?php get_footer(); ?>
SO网友:Jack
我也面临着同样的问题,这是wordpress的默认设置。
但幸运的是,我找到了一些帮助我的东西。
在“Functions.php”中添加以下内容
function SearchFilter($query) {
// If \'s\' request variable is set but empty
if (isset($_GET[\'s\']) && empty($_GET[\'s\']) && $query->is_main_query()){
$query->is_search = true;
$query->is_home = false;
}
return $query;}
add_filter(\'pre_get_posts\',\'SearchFilter\');
然后在搜索中替换下一行(第15行)。php
<?php if ( have_posts() && strlen( trim(get_search_query()) ) != 0 ) : ?>
也许这对你也有帮助
有关详细信息,请阅读:Customize empty search wordpress