[WordPress]コメントが表示されない場合の対処法

WordPressでコメントを表示させようとしたとき、コメント用テンプレートファイルの読み込み方によってはコメントが正しく表示されない場合があるようです。
今回はその解決方法について、数パターン紹介します。

コメントが表示されない現象

まずは、コメントが正しく表示されないケースの紹介から。
私の環境では、次のようなコードでコメントが表示されませんでした。

<?php if ( have_comments() ): ?>
	<h2>コメント</h2>
	<ul class="commentlist">
		<?php wp_list_comments('type=comment'); ?>
	</ul>
<?php endif; ?>
<?php comment_form(); ?>
<?php get_template_part('comments'); ?>

上記の例では、 comment_form() によるコメントの入力用フォームだけが表示されました。
have_comments()wp_list_comments() は、 comments_template('comments') でテンプレートファイルを読み込んだ際には機能しませんでした。
同様に、includeでcomments.phpファイルの読み込みを行ってもコメントの表示ができません。

コメントの表示方法

WordPressでは、コメントのテンプレートは他のテンプレートと内部的に区別されているようで、専用の読み込みタグがあります。
ほとんどの場合、テンプレートファイルの読み込み方法を変更することでコメントが表示されるようになります。

comments_template()を使ってコメントテンプレートファイルを読み込む

comments_template()を使用することで、コメントが正しく表示されます。
コメントのテンプレートファイルの読み込み箇所の記述を、以下のように変更してみましょう。

<?php comments_template(); ?>

get_comments_number()を使ってコメントの有無を判定する

テンプレートの読み込み方法を変えても動作しない場合、コメントの表示に必要な変数がどこかで書き換えられていたり、まだコメントを読み込めない段階にあることが考えられます。
そんな時は、 have_comments() を使って行っていたコメントの有無判定を、 get_comments_number() に変えてみましょう。
get_comments_number() は、コメントの件数を取得することのできるテンプレートタグです。条件分岐と合わせて使用することで、コメントの有無判定に用いることができます。

<?php if ( get_comments_number() > 0 ): ?>
	<!-- コメントが一件以上ある場合は表示 -->
	...
</php endif; ?>

取得するコメントを指定し、wp_list_comments()の第二引数として渡す

また、コメントの表示用テンプレートファイルがデフォルトのcomments.php以外に存在する場合などは、 get_comments() を用いてコメントを取得してから wp_list_comments() の第二引数として渡すことで、コメントを表示させることができます。

<?php
	//投稿のコメントを取得
	$comments = get_comments();
	//コメントのリストを表示
	wp_list_comments('', $comments);
?>

get_comments() はデフォルトでは現在の投稿のコメントデータを取得しますが、与えるパラメータによって様々な条件でコメントを取得することができます。
いろいろなカスタマイズができそうですね。

まとめ

コメントが取得・表示できない場合は、以下の点を試してましょう。

  • テンプレートファイルの読み込みには comments_template() を使用する
  • get_comments_number() でコメントの有無判定をする
  • get_comments() でコメントを取得し、 wp_list_comments() の第二引数に渡す

以上、コメントが表示されない場合の対処法でした!