• 解決済 t62m0nar

    (@t62m0nar)


    カテゴリーテンプレートにて・・・

    <?php if ($posts) : foreach ($posts as $post) : start_wp(); ?>
    <h3><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link:<?php the_title(); ?>">
    <?php the_title(); ?></a></h3>
    <?php the_content(''); ?>
    <?php endforeach; else: ?>
    <p><?php _e('Sorry, no posts matched your criteria.'); ?></p>
    <?php endif; ?>

    上記の記述で現在のカテゴリー記事のタイトルと本文を呼び出すとその後に記述している指定カテゴリーのリストが出力されません。

    個別には、問題ないのですが、何が問題なのでしょうか?
    他の記述方法がありますでしょうか?

    <?php if ( have_posts() ) : query_posts('showposts=3&cat=5'); ?>
    <ul>
    <?php while (have_posts()) : the_post(); ?>
    <li><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></li>
    <?php endwhile;?>
    </ul>
    <?php endif; ?>
    <?php wp_reset_query();?>
4件の返信を表示中 - 1 - 4件目 (全4件中)
  • これってどちらもちゃんと動いてないような気がするんですが…。

    まず、上、start_wp()は非推薦(古い関数という意味で)になりました。the_post()を使ってください。それと、the_post()がグローバル変数$postをセットするので、if文より前にないとおかしくなりません?

    下、have_posts()より前にquery_posts()しないとちゃんと動かないんじゃないかなと思いますがどうでしょう?

    トピック投稿者 t62m0nar

    (@t62m0nar)

    V.J.Catkickさま
    いつも、ありがとうございます。一応、htmlは理解しているですが、PHPは初心者で見よう見まねで、Wordpressでのサイト製作に試行錯誤しています。ですので、トンチンカンで申し訳ありません。

    まず、上の部分ですが、単純にstart_wp()をthe_post()入れ替えました。

    query_postsの方はhave_posts()より前にということで、自分なりにやってみたのですが、その後の記述がよく分からず、query_postsをダブって指定すると見ため上は問題ないのですが、明らかにおかしいですよね。

    <?php query_posts('showposts=3&cat=5'); ?>
    <?php if ( have_posts() ) : query_posts('showposts=3&cat=5'); ?>
    <ul>
    <?php while (have_posts()) : the_post(); ?>
    <li><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></li>
    <?php endwhile;?>
    </ul>
    <?php endif; ?>
    <?php wp_reset_query(); ?>

    それで、もうひとつ自分で調べてみたのが、下の記述です。こちらも、見ため上問題ないのですが、どうでしょうか?

    <?php query_posts($query_string ."showposts=3&cat=5") ; ?>
    <ul>
    <?php while (have_posts()) : the_post(); ?>
    <li><a>"><?php the_title(); ?></a></li>
    <?php endwhile;?>
    </ul>
    <?php wp_reset_query(); ?>

    query_posts()を呼ぶ時、引数に「$query_string .”showposts=3&cat=5″」と書くと

    今のページのクエリ(例えば月間表示だったりカテゴリだったり、本来そのページで呼ぼうとしていた検索)にプラスしてこれこれという意味になります。

    「”showposts=3&cat=5″」と書く(「$query_string .」がない状態)と、全部の記事から…という意味合いになるので、ループの種類によって使い分けるといいでしょう。

    これを踏まえた上で、下の書き方が一般的なループの書き方となります($query_stringの有無はそのループの性質上あったりなかったりします)。

    <?php query_posts( $query_string ."posts_per_page=3&cat=5" ) ; ?>
    <ul>
    <?php while( have_posts() ) : the_post(); ?>
    
    <li><a><?php the_title(); ?></a></li>←この行にゴミ?がありました
    
    <?php endwhile;?>
    </ul>
    <?php wp_reset_query(); ?>

    それと、showpostsも古くなって非推薦になりました。posts_per_pageを使いましょう。

    トピック投稿者 t62m0nar

    (@t62m0nar)

    V.J.Catkickさま
    ほんとうにありがとうございました。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「query_postsが出力されない」には新たに返信することはできません。