web-dev-qa-db-fra.com

page de résultat de recherche personnalisée

ce que j'ai fait,

je crée un search.php

<?php get_header(); ?>
<div class="wapper">
  <div class="contentarea clearfix">
    <div class="content">
      <h1 class="search-title"> <?php echo $wp_query->found_posts; ?>
        <?php _e( 'Search Results Found For', 'locale' ); ?>: "<?php the_search_query(); ?>" </h1>
      <ul>
        <?php query_posts('showposts=3'); if (have_posts()) : ?>
        <li>
          <h3><a href="<?php echo get_permalink(); ?>">
            <?php the_title();  ?>
            </a></h3>
          <?php  the_post_thumbnail('medium') ?>
          <?php echo substr(get_the_excerpt(), 0,200); ?>
          <div class="h-readmore"> <a href="<?php the_permalink(); ?>">Read More</a></div>
        </li>
        <?php endif ?>
      </ul>
    </div>
  </div>
</div>
<?php get_footer(); ?>

puis créez un searchform.php

<form action="<?php bloginfo('siteurl'); ?>" id="searchform" method="get">
  <input type="search" id="searchbox" name="s" placeholder="Enter keywords" required>
    <input type="image" id="searchsubmit" alt="Search" class="searchicon" src="<?php bloginfo( 'template_url' ); ?>/images/icon-search.gif" />
</form>

mais ma page de résultat ne montre pas la description du contenu et affiche également un seul résultat. mais sur le titre H1 le 2/3/5/6/7 numéro etc. Résultat de la recherche trouvé. Je veux montrer au moins 10 résultats, puis la page et montrer aussi le texte du contenu de 200/300 caractères pour le résultat de la recherche. les gars peuvent m'aider. je ne suis pas encore expert wp

2
pagol001

J'ai quelques recommandations pour votre question:

First : arrête d'utiliser query_posts(). Voir le codex sur cette fonction pour voir pourquoi vous ne devriez pas l’utiliser dans des thèmes ou des plugins. Quoi qu’il en soit, si vous vous trouvez dans une situation étrange où vous n’avez pas d’option et que vous devez utiliser query_posts(), vous devez exécuter wp_reset_query() après la boucle. Vous devez savoir que vous utilisez le global $wp_query, qui contient la requête originale faite par WordPress, puis le query_post qui modifie la variable global $wp_query, vous obtenez des résultats inattendus. En outre, vous utilisez un paramètre obsolète showposts, remplacé par posts_per_page.

Deuxième : vous pouvez utiliser un modèle de recherche personnalisé (search.php) pour personnaliser l’apparence. Il suffit de créer un fichier search.php dans votre dossier de thèmes et de le personnaliser à votre guise. Ne faites pas de requêtes personnalisées ici ; Si vous faites cela, vous faites une nouvelle requête pour les publications et gaspillez la requête déjà effectuée par WordPress. Un gaspillage de ressources ayant un impact négatif sur la performance.

Troisième : pour modifier les paramètres de requête par défaut utilisés par WordPress, tels que le nombre de publications par page, etc., vous pouvez utiliser pre_get_posts action .

Créez donc votre modèle search.php à votre guise et utilisez l’action pre_get_posts pour indiquer à WordPress quels paramètres vous souhaitez utiliser dans la requête de recherche:

Le modèle search.php pourrait ressembler à ceci:

<?php
get_header();
global $wp_query;
?>
<div class="wapper">
  <div class="contentarea clearfix">
    <div class="content">
      <h1 class="search-title"> <?php echo $wp_query->found_posts; ?>
        <?php _e( 'Search Results Found For', 'locale' ); ?>: "<?php the_search_query(); ?>" </h1>

        <?php if ( have_posts() ) { ?>

            <ul>

            <?php while ( have_posts() ) { the_post(); ?>

               <li>
                 <h3><a href="<?php echo get_permalink(); ?>">
                   <?php the_title();  ?>
                 </a></h3>
                 <?php  the_post_thumbnail('medium') ?>
                 <?php echo substr(get_the_excerpt(), 0,200); ?>
                 <div class="h-readmore"> <a href="<?php the_permalink(); ?>">Read More</a></div>
               </li>

            <?php } ?>

            </ul>

           <?php echo paginate_links(); ?>

        <?php } ?>

    </div>
  </div>
</div>
<?php get_footer(); ?>

Et l'action pre_get_posts ressemble à ceci:

add_action( 'pre_get_posts', function( $query ) {

    // Check that it is the query we want to change: front-end search query
    if( $query->is_main_query() && ! is_admin() && $query->is_search() ) {

        // Change the query parameters
        $query->set( 'posts_per_page', 3 );

    }

} );
7
cybmeta

Vous devez exécuter la boucle, modifier votre search.php quelque chose de similaire au code ci-dessous

  <?php get_header();?>

    <div class="wapper">
      <div class="contentarea clearfix">
        <div class="content">
            <ul>
                <?php if ( have_posts() ) : ?>

            <header class="page-header">
                <p><?php printf( __( 'Search Results for: %s', 'twentyfourteen' ), get_search_query() ); ?></p>
            </header><!-- .page-header -->

                        <?php
                        // Start the Loop.
                        while ( have_posts() ) : the_post();
                        ?>
                        <li><h3><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h3></li>
                        <?php the_post_thumbnail('medium') ?>
                        <?php echo substr(get_the_excerpt(), 0, 200); ?>
                            <div class="h-readmore"> 
                                <a href="<?php the_permalink(); ?>">Read More</a>
                            </div>
                        <?php
                        endwhile;
                else :
                // If no content, include the "No posts found" template.
                get_template_part( 'content', 'none' );
                endif;
                ?>       
            </ul>                                 

        </div>
      </div>
    </div>
<?php get_footer(); ?>
0
shuvroMithun