Căutarea goală returnează pagina principală, cum să returneze pagina de căutare fără rezultate?
Funcția implicită de căutare returnează pagina principală dacă formularul de căutare este gol. Vreau să returneze o pagină cu mesajul "ne pare rău, căutarea dvs. nu a returnat niciun rezultat".
această postare nu răspunde la întrebare
iar acest ticket îmi spune că așa ar trebui să funcționeze! A reușit cineva să schimbe acest comportament fără a folosi o redirecționare .htaccess?
Folosesc următorul fișier search.php: `
<div id="content" class="clearfix">
<div id="main" class="col700 left clearfix" role="main">
<h1 class="archive_title"><span>Rezultatele căutării pentru:</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("Publicat", "bonestheme"); ?> <time datetime="<?php echo the_time('Y-m-j'); ?>" pubdate><?php the_time('F jS, Y'); ?></time> <?php _e("de", "bonestheme"); ?> <?php the_author_posts_link(); ?> <span class="amp">&</span> <?php _e("categorisit în", "bonestheme"); ?> <?php the_category(', '); ?>.</p>
</header> <!-- sfârșitul header-ului articolului -->
<section class="post_content">
<?php the_excerpt('<span class="read-more">Citește mai mult despre "'.the_title('', '', false).'" »</span>'); ?>
</section> <!-- sfârșitul secțiunii articolului -->
<footer>
</footer> <!-- sfârșitul footer-ului articolului -->
</article> <!-- sfârșitul articolului -->
<?php endwhile; ?>
<?php if (function_exists('page_navi')) { // dacă funcția experimentală este activă ?>
<?php page_navi(); // folosește funcția de navigare în pagină ?>
<?php } else { // dacă este dezactivată, afișează link-urile wp prev & next standard ?>
<nav class="wp-prev-next">
<ul class="clearfix">
<li class="prev-link"><?php next_posts_link(_e('« Intrări mai vechi', "bonestheme")) ?></li>
<li class="next-link"><?php previous_posts_link(_e('Intrări mai noi »', "bonestheme")) ?></li>
</ul>
</nav>
<?php } ?>
<?php else : ?>
<!-- această zonă apare dacă nu există rezultate -->
<article id="post-not-found">
<header>
<h1>Nu au fost găsite rezultate</h1>
</header>
<section class="post_content">
<p>Ne pare rău, dar resursa solicitată nu a fost găsită pe acest site.</p>
</section>
<footer>
</footer>
</article>
<?php endif; ?>
</div> <!-- sfârșitul #main -->
<div id="sidebar1" class="sidebar right col220">
<?php get_search_form(); ?>
</div>
</div> <!-- sfârșitul #content -->
`

Iată 3 metode de a rezolva această problemă, vă recomand să folosiți soluția 2, dar fiți atenți la jQuery din soluția 1 ca o modalitate de a evita situația de la bun început.
Pentru cei care doresc mai mult cod de la tema utilizatorului care a pus întrebarea, aceasta nu este o problemă specifică temei, ci o problemă generală WordPress care afectează toate site-urile WordPress.
Soluția 1
Puteți găsi un tutorial detaliat despre cum să remediați această problemă aici:
http://wpengineer.com/2162/fix-empty-searches/
Astăzi, să analizăm ceva pe care majoritatea profesionalilor nu-l întâlnesc niciodată: căutările goale. Oferiți un câmp de căutare, iar cineva apasă butonul de trimitere din greșeală, fără să introducă niciun termen. URI-ul rezultat arată astfel: exemplu.ro/?s=. Acesta afișează același conținut ca pagina principală. De fapt, este chiar pagina principală.
Nimeni nu are nevoie de asta.
Soluția 2 (recomandată)
Preluat dintr-un post de Spitzerg http://wordpress.org/support/topic/blank-search-sends-you-to-the-homepage
O altă opțiune este să adăugați un filtru de request:
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; }
Apoi, dacă refolosiți interogarea de căutare în formularul de căutare, nu uitați să o tăiați (trim) ca să nu rămâneți cu unul sau mai multe spații (doar pentru a menține lucrurile curate, probabil nu va afecta rezultatele).
<input type="text" name="s" id="s" value="<?php echo trim( get_search_query() ); ?>"/>
Sper că acest lucru vă ajută, pare să funcționeze până acum pe site-ul meu și nu implică modificarea codului WP, făcând actualizările mai ușoare.
Soluția 3
http://www.warpconduit.net/2011/08/02/fix-redirection-and-error-page-on-empty-wordpress-search/
Similar cu soluția 2, dar nu la fel de extins și ușor diferit.
if(!is_admin()){
add_action('init', 'search_query_fix');
}
function search_query_fix(){
if(isset($_GET['s']) && $_GET['s']==''){
$_GET['s']=' ';
}
}

Problema cu soluția 2 este că va returna fiecare articol (sau cel puțin fiecare articol care conține un spațiu) atunci când ar trebui să nu returneze niciun articol deloc.

De asemenea, nu rezolvă domain.com/page/2

Bazându-ne pe soluția lui Tom nr. 2, dar asigurându-ne că nu sunt returnate postări, adăugăm un filtru de cerere ca înainte:
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;
}
Dar de data aceasta setăm o variabilă globală care indică faptul că nu ar trebui returnate rezultate de căutare. Apoi, folosind un hook posts_where, ne asigurăm că nu sunt returnate postări:
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;
}

Creează un fișier search.php și lipește acest cod, apoi înlocuiește bucla ta cu "get_template_part('loop', 'search');
<div id="container">
<div id="content" role="main">
<?php if ( have_posts() ) : ?>
<h1 class="page-title"><?php printf( __( 'Rezultatele căutării pentru: %s', 'mb' ), '<span>' . get_search_query() . '</span>' ); ?></h1>
<?php
/* Rulează bucla pentru căutare pentru a afișa rezultatele.
* Dacă dorești să suprascrii asta într-un child theme, include un fișier
* numit loop-search.php și acesta va fi folosit în schimb.
*/
get_template_part( 'loop', 'search' );
?>
<?php else : ?>
<div id="post-0" class="post no-results not-found">
<h2 class="entry-title"><?php _e( 'Nu s-a găsit nimic', 'mb' ); ?></h2>
<div class="entry-content">
<p><?php _e( 'Ne pare rău, dar nimic nu corespunde criteriilor tale de căutare. Te rugăm să încerci din nou cu alte cuvinte cheie.', 'twentyten' ); ?></p>
<?php get_search_form(); ?>
</div><!-- .entry-content -->
</div><!-- #post-0 -->
<?php endif; ?>
</div><!-- #content -->
</div><!-- #container -->
<?php get_sidebar(); ?>
<?php get_footer(); ?>

Verifică dacă interogarea de căutare este goală (get_search_query()), înlocuiește primul IF cu acesta:
<?php if (have_posts() && get_search_query()) : while (have_posts()) : the_post(); ?>

Eu gestionez acest lucru în temele mele în felul următor. Încearcă să folosești acest cod:
<?php if (!have_posts()): ?>
<article id="post-0">
<header>
<h3>Nu s-au găsit articole.</h3>
</header> <!-- sfârșit antet articol -->
<section class="post_content">
Ne pare rău, nu am găsit nicio postare pentru căutarea ta. Te rugăm să încerci din nou.
</section> <!-- sfârșit secțiune articol -->
<footer>
</footer> <!-- sfârșit subsol articol -->
</article> <!-- sfârșit articol -->
<?php endif; ?>
Gestionăm condiția if(!have_posts()). Pune-o imediat după h3.archive title, înainte de începutul lui if(have_posts). Poți chiar să apelezi funcția formularului de căutare în zona de conținut.

Am întâmpinat și eu aceeași problemă, este ceva prestabilit de WordPress.
Dar din fericire, am găsit ceva care m-a ajutat.
Adaugă următorul cod în "functions.php":
function SearchFilter($query) {
// Dacă variabila 's' este setată dar goală
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');
Și apoi înlocuiește următoarea linie (linia 15) în search.php:
<?php if ( have_posts() && strlen( trim(get_search_query()) ) != 0 ) : ?>
Poate te va ajuta și pe tine.
Pentru detalii, citește aici: Personalizează căutarea goală în WordPress

O modalitate de a evita căutările goale este să efectuați o verificare în javascript pentru valoarea goală a câmpului de căutare și, dacă se constată că câmpul este gol, atunci opriți trimiterea formularului de căutare, așa cum se arată mai jos:
$('#searchform').submit(function(){
search_value =$.trim($('#searchform #s').val());
if(search_value == ""){
return false; // Puteți afișa și o notificare aici pentru a informa utilizatorul.
}
});

Nu este clar cum acest lucru răspunde la întrebare. Poți să editezi răspunsul tău (folosind butonul de editare de mai sus) și să adaugi câteva detalii despre ce face acest cod, unde să-l pui și cum rezolvă problema, te rog?
