サポート » テーマ » get_postsとthe_permalinkとsetup_postdata()について

  • 解決済 reconte_tout

    (@reconte_tout)


    PHP初心者です。

    sidebar.phpで最新記事一覧を表示させたいと思い、テンプレートタグ/get_posts – WordPress Codexに書かれていたコードをほんの少し編集した次のようなコードをsidebar.phpに追加したのですが、

    <ul>
    <?php
    $myposts = get_posts('numberposts=5');
    foreach($myposts as $post) :
    ?>
    <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
    <?php endforeach; ?>
    </ul>

    表示してみたところ、the_title();はちゃんと最新記事5件のタイトルになっていたのですが、the_permalink();のほうは全て同じURL(5件目の記事のURLだと思います)になってしまいました。

    最終的に、foreachの直後の行にsetup_postdata(%post);を追加することでタイトルもリンクもちゃんと動くようになったのですが、どうしてですか?

    また上記コードがちゃんと動かなかったので、$wpdb->get_results();でpost_statusがpublishedの記事のIDとタイトルを新しい順から10件、インデックス配列で取り出して、get_permalink(id);でリンクを取り出せないかとやってみたのですが、これも動きませんでした。なぜでしょうか。(すみません、このときのコードは残っていません。インデックス配列で取り出したものをprint_r();で表示させたらちゃんと取り出せていたので、get_permalink(id);の使い方に問題があったのかと思っているのですが…。)

    よろしくお願いします。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • reconte_toutさんこんにちは。

    私もPHP初心者ですが試しに上記のコードをコピペしてみたところ問題なく最新記事一覧を表示できましたよ。

    もしかして、サイドバーに他に記述しているコードが悪さしているとかはないですか?

    日本語版Codexは記述が少々古くなっています。本家英語版の方もあわせて読んでみましょう;)

    スレッド開始 reconte_tout

    (@reconte_tout)

    返信ありがとうございました。

    >syoshinさん
    こんにちは!
    そうですか…プラグインの影響でしょうか。
    sidebarにはまだ最新記事一覧しか入れていません。

    >shokun0803さん
    なるほど、本家英語版の方のコードにはsetup_postdata(%post);が追加されているのですね。

    何のプラグインかは忘れましたが、
    以前サイドバーに正しいコードを記述しても全く表示されない事があって、
    その後幾つかのプラグインを外したら正常に表示されたということがありました。

    一度全てのプラグインを停止してみてはどうですか?

    あと、テンプレ内でquery_postsを使っていてwp_reset_queryで
    リセットしていなかったりするとサイドバーの挙動がおかしかったりしたこともありました。

    あくまで私の体験談ですが。参考までに。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「get_postsとthe_permalinkとsetup_postdata()について」には新たに返信することはできません。