雨過天晴

get_posts時、the_content()だけ別の記事が出る

2016.05.31

WordPress備忘録

img from: フリー素材ぱくたそ

get_postsで最新の記事○件の日付・タイトルを表示させるコードをコピペして~、あ、本文の一部とか抜粋とかそういうのも表示させたいな!よし、the_content()を追加だ!…あれ?本文だけ別の記事が出てくる…?

ってことないですか。
私はあります。何度もあります。

タイトルや日付、カスタムフィールドの値は正しいものが出てくるのに、the_content()the_excerpt()で出力される本文の内容が別の記事になる。

これが今回の症状です。

いや、作成時の「コードをコピペして~」がダメなのは分かってるんですがね。

結論を言ってしまうと「最新○件のタイトル一覧表示」でよく書かれているget_postsを使った短めのコードでは本文を読みだすところまで行ってなくて、タイトルやカスタムフィールドなどの付属情報までしか読まれてないのです。

setup_postdata() してやんないと駄目なんです。


このブログの過去記事「同人小説サイト作成時のタグとコードのメモ 2014」ではタイトル・日付・あらすじ(カスタムフィールド)を下記のように定義リストで表示させています。

<dl>
<?php $posts = get_posts('numberposts=5&order=desc&cat=表示カテゴリID指定'); ?>
<?php foreach($posts as $post): ?>
<dt><?php the_time('Y.m.d.') ?>
<?php $cat = get_the_category(); $cat = $cat[0]; { echo $cat->cat_name; } ?>
<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></dt>
<dd><?php echo post_custom('カスタムフィールド名'); ?></dd>
<?php endforeach; ?>
</dl>

ここに本文内容を表示させたい……とカスタムフィールドの代わりにthe_content()とかthe_excerpt()を入れても駄目なわけですね。
タイトル・日付・本文抜粋を出したければ、

<dl>
<?php $posts = get_posts('numberposts=5&order=desc&cat=表示カテゴリID指定'); ?>
<?php foreach($posts as $post): setup_postdata($post); //ここでsetup ?>
<dt><?php the_time('Y.m.d.') ?>
<?php $cat = get_the_category(); $cat = $cat[0]; { echo $cat->cat_name; } ?>
<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></dt>
<dd><?php the_excerpt(抜粋を表示させる文字数); ?></dd>
<?php endforeach; wp_reset_postdata(); //setupしたのをreset ?>
</dl>

とするべし。と。

以上、コピペに頼らず勉強しなきゃいけない……と毎回思うメモでした。