コメントとトラックバックを分けて表示[WordPressテーマ作成#6]

コメントとトラックバックを分けて表示[WordPressテーマ作成#6]

コメントとトラックバックを分けて表示するようにテンプレートを改造します。

前回、コメントまわりのテンプレート(comments.php)を作成しました。WordPressではコメントとトラックバックが同じコメントとして扱われるのでwp_comments_list()を引数なしで使うと両方混ざって表示されてしまうようです。

しかもほかのブログには必ずあるはずのトラックバックURLもデフォルトでは表示されません。これはちょっと気持ち悪いのでコメントとトラックバックを分けて表示し、トラックバックURLも表示するようにします。

ピンバックというのもありますが、今回はトラックバックと同様に扱うことにします。

まずはコメントがあるかどうかで分岐します。

<?php if ( have_comments() ) : ?>

内部の変数$comments_by_typeは連想配列で、グローバル変数$commentsのcomment_typeの値を持っているようです。comment.phpのseparate_comments関数で定義されているのでそちらを参照してください。以下はcomment_typeが ‘comment’ だったらというif文。

<?php if ( ! empty($comments_by_type['comment']) ) : ?>

もっていたらコメントのリストを表示します。wp_list_comments()にはいろいろなパラメータがありますが、そのなかの「type」を使うとリストをコメントとトラックバック別々に表示することができるようです。typeがとる値は ‘all’, ‘comment’, ‘trackback’, ‘pingback’, ‘pings’ です。’pings’ は ‘trackback’ と ‘pingback’ をあわせたものです。デフォルトは ‘all’ です。 たとえば、コメントだけのリストを作るときは次のようにします。

<ol>
 <?php wp_list_comments('type=comment'); ?>
</ol>

コメントがないときは、「コメントはありません。」と表示。

<?php else: ?>
<p>コメントはありません。</p>
<?php endif; ?>

同じようにトラックバックとピンバックのときは次のように。

<?php if ( ! empty($comments_by_type['pings']) ) : ?>
<h3 id="Trackbacks">Trackbacks/Pinbacks</h3>
<ol>
<?php wp_list_comments('type=trackback'); ?>
</ol>
<?php else: ?>
<p>トラックバック/ピンバックはありません。</p>
<?php endif; ?>

次にリストをページ分割するときのリンクをつくります。前後のリンクはulリストにしたいので、分割したページがあると時だけ表示するようにします。

<?php if (previous_comments_link() || next_comments_link() ) : ?>
<ul class="navigation">
  <li class="previous-comments"><?php previous_comments_link() ?></li>
  <li class="next-comments"><?php next_comments_link() ?></li>
</ul>
<?php endif; ?>

あとは、はじめの分岐「コメント(トラックバック、ピンバックのいずれか)がないときの表示。

<?php else : // this is displayed if there are no comments so far ?>

         <?php if ( comments_open() ): ?>

  <!-- If comments are open, but there are no comments. -->

  <?php else: ?>

  <!-- If comments are closed. -->

  <p class="nocomments">この記事はコメント、トラックバックおよびピンバックを受け付けていません。</p>

  <?php endif; ?>
<?php endif; ?>

これでいいと思うのですが、if文のところは次のようにしたほうがいいかなと思ったりして・・・。

<?php if ( comments_open() || pings_open() ) : ?>

以上をまとめたのが以下。

<?php if ( have_comments() ) : ?>
  <?php if ( ! empty($comments_by_type['comment']) ) : ?>
  <h3 id="Comments"><?php comments_number('comment', '1 comment', '% comments' );?></h3>
  <ol>
   <?php wp_list_comments('type=comment'); ?>
  </ol>
  <?php else: ?>
  <p>コメントはありません。</p>
  <?php endif; ?>

  <?php if ( ! empty($comments_by_type['pings']) ) : ?>
  <h3 id="Trackbacks">Trackbacks/Pinbacks</h3>
  <ol>
  <?php wp_list_comments('type=trackback'); ?>
  </ol>
  <?php else: ?>
  <p>トラックバック/ピンバックはありません。</p>
  <?php endif; ?>
  <?php if (previous_comments_link() || next_comments_link() ) : ?>
  <ul class="navigation">
  <li class="previous-comments"><?php previous_comments_link() ?></li>
  <li class="next-comments"><?php next_comments_link() ?></li>
  </ul>
  <?php endif; ?>
<?php else : // this is displayed if there are no comments so far ?>
  <?php if ( comments_open() ): ?>
  <!-- If comments are open, but there are no comments. -->
  <?php else: ?>
  <!-- If comments are closed. -->
  <p class="nocomments">この記事はコメント、トラックバックおよびピンバックを受け付けていません。</p>
  <?php endif; ?>
<?php endif; ?>
  • 774

    こうしないと不具合があるかもしれないです。

  • 774

    ?php comments_template(”, true); ?

    でした。

そうのひとりごと

© 2017 PAOLOG