web-dev-qa-db-ja.com

カスタム検索結果ページ

私がしたこと、

私は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(); ?>

それから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>

しかし、私の結果ページにはコンテンツの説明が表示されず、結果も1つだけ表示されます。タイトルH1に2/3/5/6/7などの番号を表示しています検索結果が見つかりました。私は少なくとも10の結果を表示してからページを表示し、また検索結果の200/300文字のコンテンツテキストを表示したいです。みんな私を助けることができます。私はまだエキスパートWPではありません

2
pagol001

私はあなたの質問に対していくつかの提言をします:

Firstquery_posts()の使用をやめます。 この関数についてのコーデックス を見て、なぜあなたがそれをテーマやプラグインの中で使うべきではないのかを見てください。とにかく、あなたがオプションを持っておらず、query_posts()を使う必要があるような、ちょっと変わった状況にあるのなら、ループの後にwp_reset_query()を実行するべきです。あなたはWordPressによって作られたオリジナルのクエリを含むglobal $wp_queryを使っていることを知っていなければなりません、そしてそれからquery_post変数を変えるglobal $wp_query、あなたは予期しない結果に終わるでしょう。さらに、廃止予定のパラメータshowpostsposts_per_pageに置き換えて使用しています。

Second:あなたはルックアンドフィールをカスタマイズするためにカスタム検索テンプレート(search.php)を使うことができます。テーマフォルダ内のsearch.phpファイルを作成して、必要に応じてカスタマイズするだけです。 ここでカスタムクエリを作成しないでください;あなたがそうするならば、あなたは投稿のために新しい質問をして、そしてすでにWordPressによってなされた質問を無駄にしています。パフォーマンスに悪影響を与えるリソースの無駄。

Third:1ページあたりの投稿数など、WordPressが使用するデフォルトのクエリパラメータを変更するには、 pre_get_posts action を使用できます。

それで、あなたが望むようにあなたのsearch.phpテンプレートを作成して、あなたが検索クエリでどんなパラメータを使いたいかをWordPressに言うためにpre_get_postsアクションを使います:

Search.phpテンプレートは次のようになります。

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

そしてpre_get_postsアクションは次のようになります。

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

あなたはループを実行する必要があります、あなたのsearch.phpを以下のコードのように修正してください

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