web-dev-qa-db-fra.com

Résultats de la recherche quand aucun trouvé - rester sur la page où ils étaient

J'ai actuellement une barre latérale avec un formulaire de recherche en haut. Lorsque l'utilisateur saisit un mot-clé, une fois soumis, il est dirigé vers une page avec des résultats de recherche avec des messages les concernant dans chaque article.

Pour le moment, lorsqu'un mot-clé n'est pas trouvé, il est envoyé sur une page contenant le titre "rien trouvé" et un message "Désolé, rien trouvé, veuillez réessayer".

Ce que je voudrais, c'est quelle que soit la page sur laquelle l'utilisateur se trouve (page principale, page de catégorie, page unique, etc.) pour permettre à l'utilisateur de rester sur cette page et d'afficher en haut de la navigation ce titre ainsi que les informations "Aucun résultat trouvé". .

Est-ce possible d'une certaine manière? Je ne suis pas l'expert quand il s'agit de Wordpress, donc excuses-moi si la réponse est simple et que je ne l'ai pas critiqué!

Merci.

<?php get_header(); ?>
<?php if ( have_posts() ) : ?>
<?php get_template_part( 'nav', 'above' ); ?>
<h1 class="page-title">
<?php printf( __( 'Search Results for: %s', 'blankslate' ), '<span>' . get_search_query()  . '</span>' ); ?>
</h1>
<?php while ( have_posts() ) : the_post() ?>
<?php get_template_part( 'entry' ); ?>
<?php get_sidebar(); ?>
<?php endwhile; ?>

<?php else : ?>
<?php get_template_part( 'nav', 'above' ); ?>
<h1 class="page-title">
<?php _e( 'Nothing Found', 'blankslate' ) ?>
</h1>
<p><?php _e( 'Sorry, nothing matched your search. Please try again.', 'blankslate' ); ?></p>
<?php get_sidebar(); ?>
<?php get_template_part( 'nav', 'below' ); ?>
<?php get_footer(); ?>
<?php endif; ?>
2
Shimsham84

Pas sûr que ce soit une bonne chose à faire * mais c'est possible.

La solution simple consiste à vérifier si vous avez des publications et si non à rediriger en fonction du référant.

En haut de votre code (avant l’appel à get_header), ajoutez

if ( !have_posts() ) { 
  if (isset($_SERVER['HTTP_REFERER'])) {
    wp_redirect(301,$_SERVER['HTTP_REFERER']);
  }
}

Ceci est basé sur l'hypothèse qu'un référent est envoyé avec la demande, hypothèse qui peut être fausse en fonction de la configuration du navigateur et qui est toujours fausse lorsque le site utilise SSL.

Il existe une solution alternative dans laquelle vous modifiez votre formulaire de recherche pour inclure l'URL de la page actuelle en tant que champ masqué.

Le formulaire de recherche ressemblera à

<form action="<?php echo get_option('siteurl')?>" method="get">
  <input name="s" type="text">
  <input type="hidden" name="ref_url" value="<?php esc_url($_SERVER['REQUEST_URI'])?>">
</form>

Et puis le code en haut de la page de recherche sera

if ( !have_posts() ) { 
  if (isset($_GET['ref_url'])) {
    wp_redirect($_GET['ref_url'],302); 
  }
} else if (isset($_GET['ref_url'])) { // fix the URL
    wp_redirect(remove_query_arg('ref_url',$_SERVER['REQUEST_URI']),301);    
}

La deuxième partie du code consiste à supprimer le paramètre supplémentaire d'une URL, sinon vous aurez différentes URL pour la même recherche en fonction de la page à partir de laquelle la recherche a été effectuée.

** Ce n'est pas une bonne chose, car les gens sont habitués aux recherches qui ne trouvent pas ce qu'ils cherchent, mais ne sont pas habitués à être redirigés vers un autre endroit s'il n'y a pas de résultats. Pour beaucoup, il semblera que le formulaire de recherche ne fonctionne pas et vous devrez ajouter un avis indiquant qu'il n'y a aucun résultat.

1
Mark Kaplun