खाली खोज रिटर्न होम पेज, कैसे नहीं खोज पेज वापस करने के लिए?


16

डिफ़ॉल्ट खोज फ़ंक्शन यदि खोज फ़ॉर्म होम पेज पर खाली है, तो मैं चाहता हूं कि यह "क्षमा करें आपकी खोज का कोई परिणाम नहीं मिला" पृष्ठ पर वापस लौटना है।

इस पोस्ट का जवाब नहीं है

और यह टिकट मुझे बताता है कि इस तरह से कार्य करना चाहिए! कोई भी पता लगाता है कि .htaccess रीडायरेक्ट का उपयोग करने के अलावा इसे कैसे बदला जाए?

मैं निम्नलिखित search.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 -->

`


कुछ कोड दिखाओ?
कैसर

मुझे यह भी पता नहीं है कि इसे कहां से शुरू करना है (htaccess के अलावा), इसलिए कोई कोड नहीं। किसी भी मदद की सराहना की है
Drai

कैसे अपने searchform.php और search.php कोड के बारे में?
kaiser

मैं हड्डियों के विषय का उपयोग कर रहा हूं, जिसमें एक खोज है। एफपी लेकिन कोर
सर्चफॉर्म

2
यह एक सामान्य वर्डप्रेस मुद्दा नहीं एक विषय विशिष्ट मुद्दा है
टॉम जम्मू नॉवेल

जवाबों:


18

यहां इसे ठीक करने के 3 तरीके हैं, मैं आपको समाधान 2 का उपयोग करने की सलाह देता हूं, लेकिन पहले स्थान पर स्थिति से बचने के तरीके के रूप में समाधान 1 में jQuery पर ध्यान दें।

प्रश्न पूछने वाले विषय से अधिक कोड चाहने वालों के लिए, यह एक थीम मुद्दा नहीं है, यह एक सामान्य वर्डप्रेस मुद्दा है जो सभी वर्डप्रेस साइटों को प्रभावित करता है।

समाधान 1

आप इसे कैसे ठीक करें, इस बारे में गहराई से ट्यूटोरियल पा सकते हैं:

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

आज, आइए कुछ देखें, जो कि अधिकांश पेशेवर कभी नहीं देखते हैं: खाली खोज। आप एक खोज इनपुट फ़ील्ड प्रदान करते हैं, और कोई व्यक्ति बिना किसी शब्द दर्ज किए, अनायास ही सबमिट बटन दबा देता है। परिणामी URI इस तरह दिखता है: example.com/?s=। यह आपके सामने वाले पृष्ठ के समान सामग्री दिखाता है। वास्तव में, यह फ्रंट पेज है।

जिसकी किसी को जरूरत नहीं है।

समाधान 2 (अनुशंसित)

Spitzerg 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 कोड को अपग्रेड करना आसान बनाने में कोई बदलाव नहीं किया गया है।

समाधान 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']=' ';
        }
    }
}

1
समाधान 2 के साथ समस्या यह है कि यह हर पोस्ट (या कम से कम हर पोस्ट को इसमें एक स्थान के साथ) देगा जब वास्तव में इसे कोई पोस्ट नहीं लौटना चाहिए।
फेलिक्स ईव

2

एक पृष्ठ Search.php बनाएं और इस कोड को पेस्ट करें और अपने पाश को "get_template_part ('लूप', 'खोज') से बदलें;

                    <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

टॉम के समाधान 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;
}

लेकिन इस बार कोई परिवर्तन नहीं लौटाया जाना चाहिए कहने के लिए एक वैश्विक चर निर्धारित किया है। फिर एक पोस्ट_ जगह हुक का उपयोग करके सुनिश्चित करें कि कोई भी पोस्ट वापस नहीं किया जाता है:

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

जांचें कि क्या खोज क्वेरी खाली है ( get_search_query () ), बस पहले IF को उसके द्वारा प्रतिस्थापित करें:

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

मुझे लगता है कि यह उचित समाधान है। सरल और साफ। कोई विशेष फिल्टर और क्रिया जो कोड को जटिल कर सकती है
कामिल

0

मैं इसे अपने थीम्स में निम्नानुसार संभालता हूं। इस कोड का उपयोग करने का प्रयास करें:

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

यदि हम (। Has_posts ()) स्थिति को संभाल रहे हैं। अपने h3.archive शीर्षक के ठीक बाद इसे रखें, यदि (has_posts) शुरू होता है। आप सामग्री क्षेत्र में खोज फ़ॉर्म फ़ंक्शन को भी कॉल कर सकते हैं।


0

मुझे भी इसी समस्या का सामना करना पड़ा, यह डिफ़ॉल्ट रूप से वर्डप्रेस द्वारा दिया गया है।

लेकिन सौभाग्य से मुझे कुछ मिला जिसने मेरी मदद की।

नीचे "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) को search.php में बदलें

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

हो सकता है कि यह आपकी मदद भी करे

विवरण के लिए इसे पढ़ें: खाली खोज वर्डप्रेस को कस्टमाइज़ करें


0

खाली खोज से बचने का एक तरीका यह है कि खोज फ़ील्ड के खाली मान के लिए जावास्क्रिप्ट जाँच करें और यदि फ़ील्ड खाली मिली तो नीचे दिए गए खोज फ़ॉर्म को सबमिट करना बंद करें:

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

});

0
# Catch empty searches
RewriteCond %{QUERY_STRING} ^s=$
RewriteRule ^ /? [L,R=301]

यह स्पष्ट नहीं है कि यह प्रश्न का उत्तर कैसे देता है। क्या आप अपना उत्तर संपादित कर सकते हैं ( ऊपर दिए गए संपादन बटन का उपयोग करके ) और इस कोड में क्या है, इसे कहां रखा जाए, और यह कैसे समस्या को हल करता है, इस पर कुछ विवरण जोड़ें, कृपया?
Howdy_McGee
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.