• 解決済 ken.I

    (@keni-1)


    search.phpでの表示に関する質問になります。

    検索結果をsearch.phpにて表示するようにしています。
    seachフォームにて検索したキーワードにヒットする記事があった場合には、該当記事の表示、キーワードにヒットする該当記事がない場合に、再入力するよう促すフォームの表示と、ランダムの記事を3件表示するようなループを組んでいます。
    該当する記事があった場合の出力は正常にできるのですが、該当記事がないときに、フォームは出力されますがランダムの記事は出力されません。また、サイドバーに組んでいる同じランダム表示も同時に出力されないようになります。
    以下がループのソースです。

    <?php if (have_posts()) : query_posts('posts_per_page=3&orderby=rand'); ?>
    <? while(have_posts()) : the_post() ; ?>
    <div class="post">
          	<div class="post_title"><h2><?php the_title(); ?></h2></div>
    	<?php the_post_thumbnail(); ?>
            <div class="post_text">
              <div class="textHead"><p class="date"><?php the_time('Y年m月j日'); ?></p></div>
            <?php remove_filter ('the_content', 'wpautop'); ?>
              <?php echo mb_substr(get_the_excerpt(), 0, 50); ?>
              <div class="mores"><p><a>">もっと読む</a></p></div>
            </div>
          </div>
         <?php endwhile; ?>
        <?php else: ?>
        <?php endif; ?>

    ちょっと詰まってしまって困っています。解決法があればご教授ください。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • ken.Iさん

    if (have_posts()) :

    は、表示する記事の有無を判別するためのものです。これをquery_postsの前で行うと、元々の検索の結果で判別することになるため、query_posts自体が実行されません。

    ですので、query_postsを if (have_posts()) : の前に移動してください。

    それから、query_postsを使う場合は、必ず最後に wp_reset_query を行うようにして下さい。

    トピック投稿者 ken.I

    (@keni-1)

    >> jim912さん

    お返事ありがとうございました。
    理解することができました。
    phpの基本とwordpressの基本がないままコピペだけでやりくりしていたのでわからない問題でした。
    本当に助かりまいた。もう一度本を読みなおしながら正しい構文を作ってみたいと思います。
    ありがとうございました。

2件の返信を表示中 - 1 - 2件目 (全2件中)

トピック「search.phpでの問題です。」には新たに返信することはできません。