空搜索返回首页,如何返回未找到的搜索页面?

时间:2011-09-26 作者:Drai

默认搜索功能如果搜索表单为空,则返回主页,我希望它返回“抱歉,您的搜索没有返回结果”页面。

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).\'" &raquo;</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(\'&laquo; Older Entries\', "bonestheme")) ?></li>
                            <li class="next-link"><?php previous_posts_link(_e(\'Newer Entries &raquo;\', "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 -->
`

8 个回复
最合适的回答,由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网友:user3537506

检查搜索查询是否为空(get_search_query() ), 如果出现以下情况,只需替换第一个:

<?php if (have_posts() && get_search_query()) : while (have_posts()) : the_post(); ?>

SO网友:Rutwick Gangurde

我在我的主题中处理它如下。尝试使用此代码:

<?php if (!have_posts()): ?>
    <article id="post-0">
        <header>
            <h3>No posts found.</h3>
        </header> <!-- end article header -->

        <section class="post_content">
           Sorry, we found 0 posts for your search, Please try searching again.
        </section> <!-- end article section -->

        <footer>
        </footer> <!-- end article footer -->

    </article> <!-- end article -->
<?php endif; ?>
我们正在处理if(!have\\u posts())条件。把它放在你的h3后面。在if(have\\u posts)开始之前存档标题。您甚至可以在内容区域调用搜索表单函数。

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

SO网友:Vishal Patel

避免空搜索的一种方法是对搜索字段的空值执行javascript检查,如果发现字段为空,则停止提交搜索表单,如下所示:

$(\'#searchform\').submit(function(){

            search_value =$.trim($(\'#searchform #s\').val());

            if(search_value == ""){

                return false; // You can also pop a notification here to inform to user.
            }

});

SO网友:Lasse Enggaard
# Catch empty searches
RewriteCond %{QUERY_STRING} ^s=$
RewriteRule ^ /? [L,R=301]
结束

相关推荐

Varying Search Result Pages

我的网站上有两种不同的搜索结果,我想完全改变搜索结果页面的外观。我对搜索表单做了一些修改,但我不确定如何强制它重定向到另一个搜索。php如有任何帮助,将不胜感激<form role=\"search\" method=\"get\" id=\"searchsupport\" action=\"/\"> <label class=\"screen-reader-text\" for=\"s\">Search for:</label> <