footer.phpの中でthe_title()を使ったら全然違う記事のタイトルが表示されました。
何でだろう?と原因を探っていったらsidebar.phpの「最近のコメント」が原因でした。
sidebar.phpの「最近のコメント」はウィジェットを使わず直接書いてます。
一般によくあるコード
<dl> <?php $comments = get_comments('type=comment&status=approve&number=5'); foreach($comments as $comment): $post = get_post($comment->comment_post_ID); ?> <dt><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>:<?php comment_author_link(); ?>さん</dt> <dd><?php echo mb_substr(get_comment_excerpt(), 0, 17); ?>...</dd> <?php endforeach; ?> <dl>
を使ったのですが、このコードの中の「$post = get_post($comment->comment_post_ID)」が問題でした。
このコードを取ると問題なくフッターに記事タイトルが表示されます。
この「$post = get_post($comment->comment_post_ID)」は、コメントが付いた記事のタイトルを表示するために必要なんです。
なので取り除くことができない。
何かいい方法はないか。。。
ありました。
解決策はここに。
http://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/wp_reset_postdata
「wp_reset_postdata()」を使うと、$postが復元されます。
つまり $post がコメントで使われたのを、もとの状態に戻し、現在の投稿になるんです。
なので上の「最近のコメント」は
<dl> <?php $comments = get_comments('type=comment&status=approve&number=5'); foreach($comments as $comment): $post = get_post($comment->comment_post_ID); ?> <dt><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>:<?php comment_author_link(); ?>さん</dt> <dd><?php echo mb_substr(get_comment_excerpt(), 0, 17); ?>...</dd> <?php endforeach; wp_reset_postdata(); ?> <dl>
とするとOK!
最後から2行目のところに「wp_reset_postdata()」を入れます。
これでフッターに記事タイトルが表示されました。
コメント