投稿記事に関する記事も表示させたい。解決編?
先週からの問題「関連記事を表示させると、コメントが関連記事の方へポストされる」問題。
ひとまず、これでOKかな?と。一応確認したところ、関連記事もコメントもちゃんと予定通り。
今後のの為に、KRUZの低レベルっぷりを露呈してみる。
事の発端は、現在の記事のタグを取得して、同じタグから関連してそうな記事を表示させよう!と考えたわけですよ。
プラグインなら山ほど出ているんですが、まぁそこまで高性能でなくていいよ・・・。と思った次第。
それじゃってことで、下記コードを書いてアップ。おおつ!ちゃんと関連記事を表示してる!ヒャッホーィ。
<?php
// list 5 post titles related to first tag on current post
$tags = wp_get_post_tags($post->ID);
if ($tags) {
echo '以下の記事が関連がありそうです。';
$first_tag = $tags[0]->term_id;
$args=array(
'tag__in' => array($first_tag),
'post__not_in' => array($post->ID),
'showposts'=>5,
'caller_get_posts'=>1
);
$my_query = new WP_Query($args);
if( $my_query->have_posts() ) { while ($my_query->have_posts()) : $my_query->the_post(); ?>
<p><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></p>
<?php
endwhile;
}
}
?>
数日後、ある記事にコメントを頂いたんですが、その記事を見てもコメントが表示されていない。管理パネルではコメント入っている。あれ~?
んで、よく見るとメインポストでなく、表示した関連記事の方へコメントが表示されているじゃない!? もうね、「えええぇぇぇ!!!」ですよ。
ほぼパニック状態でソース確認。どうもループの処理がマズイっぽい。さっそくWordpress.orgやgoogle先生にお伺いをたて、ネット徘徊。
で、でました。wordpressではメインループ中に$post->IDでIDを取得すると以降のプールでIDを継承する仕様とgoogle先生が教えてくださいました。
ということは、KRUZが書いたコードでは確かにマズイです。 この場合だと$post->IDでとったIDに紐付けされているタグから、同じタグのポストを5件表示させています。ここが問題!同じタグのポストもループ処理させているので最後の吐き出したポストのIDが以降継承されたのが原因。
ソレさえわかれば、鬼に金棒・豚に真珠・鶴と亀!
ループ中に取得した$post->IDのクエリをループ終了時に削除してしまえばOK 。
んで、修正後のコードは以下。
<?php
// list 5 post titles related to first tag on current post
$tags = wp_get_post_tags($post->ID);
if ($tags) {
echo '以下の記事が関連がありそうです。';
$first_tag = $tags[0]->term_id;
$args=array(
'tag__in' => array($first_tag),
'post__not_in' => array($post->ID),
'showposts'=>5,
'caller_get_posts'=>1
);
$my_query = new WP_Query($args);
if( $my_query->have_posts() ) { while ($my_query->have_posts()) : $my_query->the_post(); ?>
<p><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></p>
<?php
endwhile;
}
wp_reset_query();
}
?>
最後の部分。
ここを、こうする。
}
これで大丈夫のはず。すでに実装してますが、問題なさそうなかんじです。
あ~つかれた。応援してくれた皆さんありがとう!そしてご迷惑お掛けしました。ゴメンネごめんね~
Facebook comments:
Leave a Reply
※コメントが認証されるまで、コメントは反映されません。


One Response so far.