La ricerca vuota reindirizza alla home page, come reindirizzare alla pagina "nessun risultato"?

26 set 2011, 18:14:14
Visualizzazioni: 33.6K
Voti: 16

La funzione di ricerca predefinita, se il modulo di ricerca è vuoto, reindirizza alla home page. Vorrei invece che mostrasse una pagina con il messaggio "spiacenti, la tua ricerca non ha prodotto risultati".

questo post non risponde alla domanda

e questo ticket mi dice che è progettato per funzionare così! Qualcuno ha trovato un modo per cambiarlo senza usare un reindirizzamento .htaccess?

Sto usando il seguente file search.php:

        <div id="content" class="clearfix">

            <div id="main" class="col700 left clearfix" role="main">

                <h1 class="archive_title"><span>Risultati della ricerca per:</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("Pubblicato", "bonestheme"); ?> <time datetime="<?php echo the_time('Y-m-j'); ?>" pubdate><?php the_time('F jS, Y'); ?></time> <?php _e("da", "bonestheme"); ?> <?php the_author_posts_link(); ?> <span class="amp">&</span> <?php _e("archiviato in", "bonestheme"); ?> <?php the_category(', '); ?>.</p>

                    </header> <!-- fine header articolo -->

                    <section class="post_content">
                        <?php the_excerpt('<span class="read-more">Leggi altro su "'.the_title('', '', false).'" &raquo;</span>'); ?>

                    </section> <!-- fine sezione articolo -->

                    <footer>


                    </footer> <!-- fine footer articolo -->

                </article> <!-- fine articolo -->

                <?php endwhile; ?>  

                <?php if (function_exists('page_navi')) { // se la funzionalità sperimentale è attiva ?>

                    <?php page_navi(); // usa la funzione page navi ?>

                <?php } else { // se è disabilitata, mostra i link wp prev & next standard ?>
                    <nav class="wp-prev-next">
                        <ul class="clearfix">
                            <li class="prev-link"><?php next_posts_link(_e('&laquo; Articoli più vecchi', "bonestheme")) ?></li>
                            <li class="next-link"><?php previous_posts_link(_e('Articoli più recenti &raquo;', "bonestheme")) ?></li>
                        </ul>
                    </nav>
                <?php } ?>          

                <?php else : ?>

                <!-- questa area appare se non ci sono risultati -->

                <article id="post-not-found">
                    <header>
                        <h1>Nessun Risultato Trovato</h1>
                    </header>
                    <section class="post_content">
                        <p>Spiacenti, ma la risorsa richiesta non è stata trovata su questo sito.</p>
                    </section>
                    <footer>
                    </footer>
                </article>

                <?php endif; ?>

            </div> <!-- fine #main -->

            <div id="sidebar1" class="sidebar right col220">

                <?php get_search_form(); ?>

            </div>

        </div> <!-- fine #content -->
9
Commenti

mostrare del codice?

kaiser kaiser
26 set 2011 18:18:31

Non so nemmeno da dove iniziare per affrontare questo (a parte l'htaccess), quindi niente codice. Qualsiasi aiuto è apprezzato

Drai Drai
26 set 2011 19:10:20

che ne dici del tuo codice searchform.php e search.php?

kaiser kaiser
26 set 2011 20:00:28

Sto utilizzando il tema Bones che ha un search.php ma utilizza il core searchform

Drai Drai
26 set 2011 21:44:54

Ops, in realtà è il tema Roots

Drai Drai
30 set 2011 04:22:19

link? (placeholder)

kaiser kaiser
30 set 2011 12:02:09

@Drai, hai risolto? Ho lo stesso problema. Grazie!

dashaluna dashaluna
20 ott 2011 16:10:34

Ecco il link al tema roots che sto usando https://github.com/retlehs/roots

Drai Drai
25 ott 2011 00:52:41

Questo è un problema generale di WordPress non un problema specifico del tema

Tom J Nowell Tom J Nowell
28 ott 2011 17:07:17
Mostra i restanti 4 commenti
Tutte le risposte alla domanda 8
3
18

Ecco 3 modi per risolvere questo problema, ti consiglio di utilizzare la soluzione 2, ma presta attenzione al jQuery nella soluzione 1 come modo per evitare la situazione fin dall'inizio.

Per coloro che vogliono più codice pubblicato dal tema di chi ha posto la domanda, questo non è un problema del tema, è un problema generale di WordPress che riguarda tutti i siti WordPress.

Soluzione 1

Puoi trovare un tutorial approfondito su come risolvere questo problema qui:

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

Oggi, diamo un'occhiata a qualcosa che la maggior parte dei professionisti non vede mai: ricerche vuote. Offri un campo di input per la ricerca e qualcuno preme il pulsante di invio accidentalmente, senza inserire alcun termine. L'URI risultante appare così: example.com/?s=. Mostra lo stesso contenuto della tua home page. In effetti, è la home page.

Nessuno ha bisogno di questo.

Soluzione 2 (consigliata)

Preso da un post di Spitzerg http://wordpress.org/support/topic/blank-search-sends-you-to-the-homepage

Un'altra opzione è aggiungere un filtro alle richieste:

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

Poi, se riutilizzi la query di ricerca nel tuo modulo di ricerca, non dimenticare di trimarla così non finirai con uno o più spazi (solo per mantenere le cose pulite, probabilmente non influenzerà i risultati.

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

Spero che questo aiuti, sembra funzionare finora sul mio sito e non implica modificare alcun codice di WP rendendo gli aggiornamenti più facili.

Soluzione 3

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

Simile alla soluzione 2 ma non altrettanto estesa e leggermente diversa.

    if(!is_admin()){
        add_action('init', 'search_query_fix');
    }
    function search_query_fix(){
        if(isset($_GET['s']) && $_GET['s']==''){
            $_GET['s']=' ';
        }
    }
28 ott 2011 17:05:30
Commenti

Il problema con la soluzione 2 è che restituirà ogni post (o almeno ogni post con uno spazio) quando in realtà non dovrebbe restituire alcun post.

Felix Eve Felix Eve
2 set 2014 08:10:48

Inoltre non risolve domain.com/page/2

fdrv fdrv
20 mag 2020 08:49:02

Lo spazio è solo ciò che ho usato come segnaposto, potresti considerare l'uso di qualcosa che sai non apparirà mai nei tuoi contenuti, ma al momento non riuscivo a pensare a qualcosa di adatto. Inoltre, esiste più di una soluzione

Tom J Nowell Tom J Nowell
20 mag 2020 21:44:31
1

Basandosi sulla soluzione 2 di Tom ma assicurandosi che nessun post venga restituito, aggiungi un filtro di richiesta come prima:

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

Ma questa volta imposta una variabile globale per indicare che nessun risultato di ricerca dovrebbe essere restituito. Quindi utilizzando un hook posts_where assicurati che nessun post venga restituito:

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;
}
2 set 2014 08:28:24
Commenti

Grazie mille per lo snippet. Mi stava facendo impazzire il fatto che restituisse tutti i post quando non si cercava nulla.

Michael Rogers Michael Rogers
28 dic 2021 17:44:46
0

Crea un file Search.php e incolla questo codice, quindi sostituisci il tuo loop con "get_template_part('loop', 'search');

                    <div id="container">
                        <div id="content" role="main">

            <?php if ( have_posts() ) : ?>
                            <h1 class="page-title"><?php printf( __( 'Risultati della ricerca per: %s', 'mb' ), '<span>' . get_search_query() . '</span>' ); ?></h1>
                            <?php
                            /* Esegui il loop per la ricerca per mostrare i risultati.
                             * Se vuoi sovrascriverlo in un child theme, includi un file
                             * chiamato loop-search.php e verrà utilizzato quello invece.
                             */
                             get_template_part( 'loop', 'search' );
                            ?>
            <?php else : ?>
                            <div id="post-0" class="post no-results not-found">
                                <h2 class="entry-title"><?php _e( 'Nessun risultato trovato', 'mb' ); ?></h2>
                                <div class="entry-content">
                                    <p><?php _e( 'Spiacenti, ma nessun risultato corrisponde ai tuoi criteri di ricerca. Per favore prova ancora con parole chiave diverse.', 'twentyten' ); ?></p>
                                    <?php get_search_form(); ?>
                                </div><!-- .entry-content -->
                            </div><!-- #post-0 -->
            <?php endif; ?>
                        </div><!-- #content -->
                    </div><!-- #container -->

            <?php get_sidebar(); ?>
            <?php get_footer(); ?>
27 set 2011 08:54:19
1

Verifica se la query di ricerca è vuota ( get_search_query() ), sostituisci semplicemente il primo IF con questo:

<?php if (have_posts() && get_search_query()) : while (have_posts()) : the_post(); ?>
6 ago 2015 16:04:49
Commenti

Penso che questa sia una soluzione abbastanza equa. Semplice e pulita. Nessun filtro o azione speciale che possa complicare il codice

Kamil Kamil
24 set 2019 17:23:57
0

Gestisco questa situazione nei miei temi nel seguente modo. Prova a utilizzare questo codice:

<?php if (!have_posts()): ?>
    <article id="post-0">
        <header>
            <h3>Nessun articolo trovato.</h3>
        </header> <!-- fine intestazione articolo -->

        <section class="post_content">
           Spiacenti, non abbiamo trovato articoli corrispondenti alla tua ricerca. Per favore prova a cercare ancora.
        </section> <!-- fine sezione articolo -->

        <footer>
        </footer> <!-- fine piè di pagina articolo -->

    </article> <!-- fine articolo -->
<?php endif; ?>

Stiamo gestendo la condizione if(!have_posts()). Inseriscila subito dopo il tuo h3.archive title, prima che inizi if(have_posts). Puoi anche chiamare la funzione del modulo di ricerca nell'area del contenuto.

27 set 2011 06:45:06
0

Ho riscontrato lo stesso problema, è un comportamento predefinito di WordPress.

Ma fortunatamente ho trovato qualcosa che mi ha aiutato.

Aggiungi questo codice nel file "Functions.php"

function SearchFilter($query) {
    // Se la variabile di richiesta 's' è impostata ma vuota
    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');

E poi sostituisci questa riga (riga numero 15) nel file search.php

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

Spero possa aiutare anche te

Per maggiori dettagli leggi questo: Personalizzare la ricerca vuota in WordPress

3 ago 2013 08:55:06
0

Un modo per evitare ricerche vuote è eseguire un controllo JavaScript per verificare se il campo di ricerca è vuoto e, nel caso, impedire l'invio del modulo di ricerca come mostrato di seguito:

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

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

            if(search_value == ""){

                return false; // Puoi anche mostrare una notifica per informare l'utente.
            }

});
8 mag 2015 11:23:58
1
# Intercetta ricerche vuote
RewriteCond %{QUERY_STRING} ^s=$
RewriteRule ^ /? [L,R=301]
28 feb 2017 22:07:54
Commenti

Non è chiaro come questo risponda alla domanda. Potresti modificare la tua risposta (usando il pulsante modifica in alto) e aggiungere alcuni dettagli su cosa fa questo codice, dove inserirlo e come risolve il problema, per favore?

Howdy_McGee Howdy_McGee
28 feb 2017 22:29:19