投稿記事に関する記事も表示させたい。解決編?


先週からの問題「関連記事を表示させると、コメントが関連記事の方へポストされる」問題。
ひとまず、これで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();
				 }
				?>

最後の部分。

endwhile;
}
}

ここを、こうする。

endwhile;
}
wp_reset_query();

}

これで大丈夫のはず。すでに実装してますが、問題なさそうなかんじです。
あ~つかれた。応援してくれた皆さんありがとう!そしてご迷惑お掛けしました。ゴメンネごめんね~


Facebook comments:

    One Response so far.

Leave a Reply

※コメントが認証されるまで、コメントは反映されません。






ポートフォリオを見る