Halaman muka pencarian kosong, bagaimana mengembalikan halaman pencarian tidak ditemukan?

16

Fungsi pencarian default jika formulir pencarian kosong mengembalikan halaman beranda, saya ingin mengembalikan halaman "maaf pencarian Anda tidak menghasilkan apa-apa".

posting ini tidak menjawabnya

dan tiket ini memberitahu saya bahwa seharusnya berfungsi seperti itu! Adakah yang tahu cara mengubahnya selain menggunakan pengalihan .htaccess?

Saya menggunakan file search.php berikut: `

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

`

Drai
sumber
perlihatkan beberapa kode?
kaiser
Saya bahkan tidak tahu harus mulai dari mana (selain htaccess), jadi tidak ada kode. Bantuan apa pun dihargai
Drai
bagaimana dengan kode searchform.php dan search.php Anda?
kaiser
Saya menggunakan tema tulang yang memiliki search.php tetapi menggunakan
form pencarian
2
Ini adalah masalah umum WordPress bukan masalah khusus tema
Tom J Nowell

Jawaban:

18

Berikut adalah 3 cara untuk memperbaikinya, saya sarankan Anda menggunakan solusi 2, tetapi perhatikan jQuery di solusi 1 sebagai cara menghindari situasi di tempat pertama.

Bagi mereka yang ingin lebih banyak kode diposting dari tema pertanyaan penanya, ini bukan masalah tema, ini adalah masalah WordPress umum yang mempengaruhi semua situs WordPress.

Solusi 1

Anda dapat menemukan tutorial mendalam tentang cara memperbaikinya di sini:

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

Hari ini, mari kita lihat sesuatu, yang sebagian besar profesional tidak pernah lihat: pencarian kosong. Anda menawarkan bidang input pencarian, dan seseorang menekan tombol kirim secara tidak sengaja, tanpa memasukkan istilah apa pun. URI yang dihasilkan terlihat seperti ini: example.com/?s=. Ini menunjukkan konten yang sama dengan halaman depan Anda. Bahkan, itu adalah halaman depan.

Tidak ada yang butuh itu.

Solusi 2 (disarankan)

Diambil dari pos oleh Spitzerg http://wordpress.org/support/topic/blank-search-sends-you-to-the-homepage

Opsi lain adalah menambahkan filter permintaan:

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

Kemudian jika Anda menggunakan kembali permintaan pencarian dalam formulir pencarian Anda jangan lupa untuk memotongnya sehingga Anda tidak berakhir dengan satu ruang atau lebih (hanya untuk menjaga semuanya tetap bersih, mungkin tidak akan mempengaruhi hasil.

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

Semoga ini bisa membantu, sepertinya sudah berfungsi sejauh ini di situs saya dan tidak melibatkan mengubah kode WP mana pun yang membuat pemutakhiran lebih mudah.

Solusi 3

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

Mirip dengan solusi 2 tetapi tidak luas dan sedikit berbeda.

if(!is_admin()){
    add_action('init', 'search_query_fix');
    function search_query_fix(){
        if(isset($_GET['s']) && $_GET['s']==''){
            $_GET['s']=' ';
        }
    }
}
Tom J Nowell
sumber
1
Masalah dengan solusi 2 adalah bahwa ia akan mengembalikan setiap posting (atau setidaknya setiap posting dengan spasi di dalamnya) padahal seharusnya tidak ada posting sama sekali.
Felix Eve
2

Buat Halaman Search.php dan rekatkan kode ini dan ubah loop Anda dengan "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(); ?>
Mohit Bumb
sumber
2

Membangun berdasarkan solusi Tom 2 tetapi memastikan tidak ada posting yang dikembalikan tambahkan filter permintaan seperti sebelumnya:

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

Tapi kali ini atur variabel global untuk mengatakan tidak ada hasil pencarian yang harus dikembalikan. Kemudian menggunakan kait posts_where pastikan tidak ada posting yang dikembalikan:

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;
}
Felix Eve
sumber
1

Periksa apakah permintaan pencarian kosong ( get_search_query () ), ganti saja IF pertama dengan itu:

<?php if (have_posts() && get_search_query()) : while (have_posts()) : the_post(); ?>
pengguna3537506
sumber
Saya pikir ini solusi yang cukup adil. Sederhana dan bersih. Tidak ada filter dan tindakan khusus yang dapat menyulitkan kode
Kamil
0

Saya menanganinya dalam tema saya sebagai berikut. Coba gunakan kode ini:

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

Kami sedang menangani kondisi if (! Have_posts ()). Letakkan tepat setelah judul h3.archive Anda, sebelum if (have_posts) dimulai. Anda bahkan dapat memanggil fungsi form pencarian di area konten.

Rutwick Gangurde
sumber
0

Saya juga menghadapi masalah yang sama, itu default yang diberikan oleh wordpress.

tetapi untungnya saya menemukan sesuatu yang membantu saya.

Tambahkan di bawah ini di "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');

dan kemudian ganti baris di bawah ini (baris no 15) di search.php

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

Mungkin itu akan membantu Anda juga

Untuk detail baca ini: Kustomisasi wordpress pencarian kosong

Mendongkrak
sumber
0

Salah satu cara untuk menghindari pencarian kosong adalah dengan melakukan pemeriksaan javascript untuk nilai kosong dari bidang pencarian dan jika bidang yang ditemukan kosong maka berhentilah mengirimkan formulir pencarian seperti di bawah ini:

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

});
Vishal Patel
sumber
0
# Catch empty searches
RewriteCond %{QUERY_STRING} ^s=$
RewriteRule ^ /? [L,R=301]
Lasse Enggaard
sumber
Tidak jelas bagaimana ini menjawab pertanyaan. Bisakah Anda mengedit jawaban Anda (menggunakan tombol edit di atas) dan menambahkan beberapa detail tentang apa yang dilakukan kode ini, di mana harus meletakkannya, dan bagaimana cara memecahkan masalah?
Howdy_McGee