サポート » 使い方全般 » カテゴリ別の記事表示で投稿記事が無い場合

  • 解決済 shortpeace

    (@shortpeace)


    現在、TOPページにカテゴリ別に記事の一覧を表示させようとしています。

    現在、カテゴリ毎に記事を表示させる事は出来たのですが、カテゴリに投稿記事が無い場合見出しだけが残って表示されてしまいます。

    下のソースで、while文を二回囲うと表示されなくなります。なにかよい解決方法はないでしょうか?

    <?php query_posts(“showposts=1&category_name=岩のテクスチャ”); ?>
    <?php while (have_posts()) : the_post(); ?>

    <!–ここから岩のテクスチャ–>
    <div class=”block”>
    <h4>岩のテクスチャ</h4>
    <div class=”hp-p-list”>
    <?php query_posts(“showposts=0&category_name=岩のテクスチャ”); ?>
    <?php while (have_posts()) : the_post(); ?>
    <table border=”0″ cellspacing=”0″ cellpadding=”0″>
    <tr>
    <th>” rel=”bookmark”><?php echo get_post_meta($post->ID,’number’,TRUE); ?></th>
    <td><?php echo get_post_meta($post->ID,’classify’,TRUE); ?></td>
    <td><?php echo get_post_meta($post->ID,’place’,TRUE); ?></td>
    <td><?php echo get_post_meta($post->ID,’terms’,TRUE); ?></td>
    </tr>
    </table>
    <?php endwhile; ?>
    <?php endif; ?>
    </div>
    </div>
    <!–ここまで岩のテクスチャ–>
    <?php endwhile; else: ?>

    <?php endif; ?>

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • <?php if(have_posts()):?>

    <?php endif;?>
    の間に見出しとループを書けば投稿がある場合にのみその部分が出力されます。
    後下の<?php endif;?>はおそらくどこかからのコピペで持ってきたのでしょうか?
    対応するIF文がありません(おそらくここが本来if ( have_posts() )に対応していると思われる)

    トピック投稿者 shortpeace

    (@shortpeace)

    ありがとうございます。ご指摘いただいた、ifの部分を修正したらうまくいきました。
    いくつかのサイトのコードを組み合わせて作りました。その時にifとwhileの締めタグがごちゃごちゃになったみたいです。

    でも、<?php if(have_posts()):?>は使用していなかったので勉強になりました。
    ありがとうございます。

    <?php query_posts(“showposts=0&category_name=岩のテクスチャ”); ?>
    <?php if(have_posts()) : the_post(); ?>
    <!–ここから岩のテクスチャ–>
    <div class=”hp-plan”>
    <h4>最新の岩のテクスチャ</h4>
    <div class=”hp-p-list”>
    <?php query_posts(“showposts=5&category_name=岩のテクスチャ”); ?>
    <?php while (have_posts()) : the_post(); ?>
    <table border=”0″ cellspacing=”0″ cellpadding=”0″>
    <tr>
    <th>” rel=”bookmark”><?php echo get_post_meta($post->ID,’number’,TRUE); ?></th>
    <td><?php echo get_post_meta($post->ID,’classify’,TRUE); ?></td>
    <td><?php echo get_post_meta($post->ID,’place’,TRUE); ?></td>
    <td><?php echo get_post_meta($post->ID,’terms’,TRUE); ?></td>
    </tr>
    </table>
    <?php endwhile; ?>
    </div>
    </div>
    <!–ここまで岩のテクスチャ–>
    <?php endif; ?>

    have_postsは投稿があるかどうかを確認して、the_postは投稿を一つ読み込みます。
    そのため上のコードだと最新一件が読み込まれません。(というかスキップされる)
    とおもったらquery_postsが2回宣言されてるのですね、正しくは下記のコードで多分動きます(確認してませんが)

    <?php query_posts("showposts=0&category_name=岩のテクスチャ"); ?>
    <?php if(have_posts()): ?>
    <!--ここから岩のテクスチャ-->
    <div class="hp-plan">
    <h4>最新の岩のテクスチャ</h4>
    <div class="hp-p-list">
    <?php while (have_posts()) : the_post(); ?>
    <table border="0" cellspacing="0" cellpadding="0">
    <tr>
    <th>" rel="bookmark"><?php echo get_post_meta($post->ID,'number',TRUE); ?></th>
    <td><?php echo get_post_meta($post->ID,'classify',TRUE); ?></td>
    <td><?php echo get_post_meta($post->ID,'place',TRUE); ?></td>
    <td><?php echo get_post_meta($post->ID,'terms',TRUE); ?></td>
    </tr>
    </table>
    <?php endwhile; ?>
    </div>
    </div>
    <!--ここまで岩のテクスチャ-->
    <?php endif; ?>

    トピック投稿者 shortpeace

    (@shortpeace)

    ありがとうございます。
    the_postは、分からずに付けていたのですが、投稿を一つ読み込むという意味だったのですね。

    これから勉強していきたいと思います。
    ありがとうございます。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「カテゴリ別の記事表示で投稿記事が無い場合」には新たに返信することはできません。