Tìm kiếm trống trở về trang chủ, làm thế nào để trở lại không tìm thấy trang tìm kiếm?


16

Chức năng tìm kiếm mặc định nếu biểu mẫu tìm kiếm trống sẽ trả về trang chủ, tôi muốn nó trả về trang "xin lỗi, tìm kiếm của bạn không có kết quả".

bài này không trả lời

vé này cho tôi biết rằng nó được cho là hoạt động theo cách đó! Bất cứ ai cũng tìm ra cách thay đổi nó ngoài việc sử dụng chuyển hướng .htaccess?

Tôi đang sử dụng tệp search.php sau: `

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

`


hiển thị một số mã?
kaiser

Tôi thậm chí không biết bắt đầu từ đâu để giải quyết vấn đề này (ngoài htaccess), vì vậy không có mã. Bất kỳ trợ giúp đều được đánh giá cao
Drai

Làm thế nào về mã searchform.php và search.php của bạn?
kaiser

Tôi đang sử dụng chủ đề xương có search.php nhưng sử dụng dạng tìm kiếm cốt lõi
Drai

2
Đây là một vấn đề chung của WordPress không phải là vấn đề cụ thể về chủ đề
Tom J Nowell

Câu trả lời:


18

Dưới đây là 3 cách khắc phục điều này, tôi khuyên bạn nên sử dụng giải pháp 2, nhưng chú ý đến jQuery trong giải pháp 1 như một cách để tránh tình huống ở nơi đầu tiên.

Đối với những người muốn có nhiều mã được đăng từ chủ đề người hỏi, đây không phải là vấn đề chủ đề, đây là vấn đề chung của WordPress ảnh hưởng đến tất cả các trang web WordPress.

Giải pháp 1

Bạn có thể tìm thấy một hướng dẫn chuyên sâu về cách khắc phục điều này tại đây:

http://wpengineer.com/2162/fix-empty-searches/

Ngày nay, chúng ta hãy nhìn vào một cái gì đó, mà hầu hết các chuyên gia không bao giờ thấy: các tìm kiếm trống. Bạn cung cấp trường nhập tìm kiếm và ai đó vô tình nhấn nút gửi mà không có bất kỳ thuật ngữ nào được nhập. URI kết quả trông như thế này: example.com/?s=. Nó hiển thị cùng nội dung với trang trước của bạn. Trong thực tế, nó là trang đầu.

Không ai cần điều đó.

Giải pháp 2 (được khuyến nghị)

Lấy từ một bài đăng của Spitzerg http://wordpress.org/support/topic/blank-search-sends-you-to-the-homepage

Một tùy chọn khác là thêm bộ lọc yêu cầu:

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

Sau đó, nếu bạn đang sử dụng truy vấn tìm kiếm trong biểu mẫu tìm kiếm của mình, đừng quên cắt bớt nó để bạn không kết thúc với một hoặc nhiều khoảng trắng (chỉ để giữ mọi thứ sạch sẽ, có thể sẽ không ảnh hưởng đến kết quả.

<input type="text" name="s" id="s" value="<?php echo trim( get_search_query() ); ?>"/>

Hy vọng điều này sẽ giúp, có vẻ như nó đang hoạt động cho đến nay trên trang web của tôi và không liên quan đến việc thay đổi bất kỳ mã WP nào giúp việc nâng cấp dễ dàng hơn.

Giải pháp 3

http://www.warpconduit.net/2011/08/02/fix-redirection-and-error-page-on-empty-wordpress-search/

Tương tự như giải pháp 2 nhưng không rộng rãi và hơi khác nhau.

if(!is_admin()){
    add_action('init', 'search_query_fix');
    function search_query_fix(){
        if(isset($_GET['s']) && $_GET['s']==''){
            $_GET['s']=' ';
        }
    }
}

1
Vấn đề với giải pháp 2 là nó sẽ trả về mọi bài đăng (hoặc ít nhất là mỗi bài có một khoảng trống trong đó) khi thực sự nó sẽ không trả lại bài nào cả.
Đêm giao thừa

2

Tạo một trang Search.php và dán mã này và thay đổi vòng lặp của bạn với "get_template_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(); ?>

2

Dựa trên giải pháp 2 của Tom nhưng đảm bảo không có bài đăng nào được trả về thêm bộ lọc yêu cầu như trước:

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

Nhưng lần này đặt một biến toàn cục để nói rằng không có kết quả tìm kiếm nào được trả về. Sau đó, sử dụng hook tests_where đảm bảo không có bài đăng nào được trả về:

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

1

Kiểm tra xem truy vấn tìm kiếm có trống không ( get_search_query () ), chỉ cần thay thế IF đầu tiên bằng cách đó:

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

Tôi nghĩ rằng đây là giải pháp đủ công bằng. Đơn giản và sạch sẽ. Không có bộ lọc và hành động đặc biệt nào có thể làm phức tạp mã
Kamil

0

Tôi xử lý nó trong các chủ đề của tôi như sau. Hãy thử sử dụng mã này:

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

Chúng tôi đang xử lý điều kiện if (! Have_posts ()). Đặt nó ngay sau tiêu đề h3.archive của bạn, trước khi (have_posts) bắt đầu. Bạn thậm chí có thể gọi chức năng biểu mẫu tìm kiếm trong khu vực nội dung.


0

Tôi cũng gặp phải vấn đề tương tự, nó được mặc định bởi wordpress.

nhưng may mắn thay tôi đã tìm thấy thứ gì đó giúp tôi

Thêm vào bên dưới trong "Hàm.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');

và sau đó thay thế dòng dưới đây (dòng số 15) trong search.php

<?php if ( have_posts() && strlen( trim(get_search_query()) ) != 0 ) : ?>

Có thể nó sẽ giúp bạn quá

Để biết chi tiết đọc này: Tùy chỉnh wordpress trống tìm kiếm


0

Một cách để tránh tìm kiếm trống là thực hiện kiểm tra javascript cho giá trị trống của trường tìm kiếm và nếu trường tìm thấy trống thì dừng gửi biểu mẫu tìm kiếm như dưới đây:

$('#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.
            }

});

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.