WordPress 2.7でコメントとトラックバックを分ける方法

新しいコメントコードを使用している場合、コメントとトラックバックを分ける方法は次の通りです。

まず、single.phpを開いて次のコードを探します。

<?php comments_template(); ?>

それを次のように変更します。

<?php comments_template('', true); ?>

次に comments.phpを開いて次のコードを探します。

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

その下に次のコードを追加します。

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

そして

<?php wp_list_comments(); ?>

を次のように修正します。

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

その下に次のコードがあります。

</ol>

その下に次のコードを追加します。

<?php endif; ?>

これでトラックバックが表示されません。トラックバックを表示するには、先ほど追加したコードの下に次のコードを追加します。

<?php if ( ! empty($comments_by_type['pings']) ) : ?>
<h3 id="pings">トラックバック</h3>

<ol class="commentlist"> <?php wp_list_comments('type=pings'); ?> 

</ol>
<?php endif; ?>

次にfunctions.php を開いて次のコードを追加します(存在しなければ作成して次のコードだけを入れればいいです)。

< ?php
function list_pings($comment, $args, $depth) {
$GLOBALS['comment'] = $comment;
?>
<li id="comment-<?php comment_ID(); ?>">< ?php comment_author_link(); ?>
< ?php } ?>

そして最後にcomments.phpに戻って、

 <ol class="commentlist"> <?php wp_list_comments('type=pings'); ?> 

を次のように修正します。

 <ol class="pinglist">
<?php wp_list_comments('type=pings&callback=list_pings'); ?>

これでコメントとトラックバックが別々に表示されます。

トラックバックをコメントの数に入れない場合は先ほどのfunctions.phpに次のコードを追加します。

< ?php
add_filter('get_comments_number', 'comment_count', 0);
function comment_count( $count ) {
global $id;
$comments_by_type = &separate_comments(get_comments('status=approve&post_id=' . $id));
return count($comments_by_type['comment']);
}
?>

修正済みのcomments.phpは次の通りです。

< ?php
/**
* @package WordPress
* @subpackage cdharrison
*/

// Do not delete these lines
if (!empty($_SERVER['SCRIPT_FILENAME']) &amp;amp;&amp;amp; 'comments.php' == basename($_SERVER['SCRIPT_FILENAME']))
die ('Please do not load this page directly. Thanks!');

if ( post_password_required() ) { ?>
<p class="nocomments">This post is password protected. Enter the password to view comments.</p>
< ?php
return;
}
?>

<!-- You can start editing here. -->
< ?php if ( have_comments() ) : ?>
< ?php if ( ! empty($comments_by_type['comment']) ) : ?>
<h3 id="comments" class="comment-title">< ?php comments_number(__('No Comments'), __('1 Comment'), __('% Comments')); ?></h3>

<ol class="commentlist">
< ?php wp_list_comments('type=comment'); ?>
</ol>
< ?php endif; ?>
< ?php if ( ! empty($comments_by_type['pings']) ) : ?>
<h3 id="pings" class="comment-title">トラックバック</h3>

<small><ol class="pinglist">
< ?php wp_list_comments('type=pings&amp;amp;callback=list_pings'); ?>
</ol></small>
< ?php endif; ?>

<div class="navigation">
<div class="alignleft">< ?php previous_comments_link() ?></div>
<div class="alignright">< ?php next_comments_link() ?></div>
</div>
< ?php else : // this is displayed if there are no comments so far ?>

< ?php if ('open' == $post->comment_status) : ?>
<!-- If comments are open, but there are no comments. -->

< ?php else : // comments are closed ?>
<!-- If comments are closed. -->
<p class="nocomments">Comments are closed.</p>

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

< ?php if ('open' == $post->comment_status) : ?>

<div id="respond">

<h3>< ?php comment_form_title( 'コメントをどうぞ', '%s に返信する' ); ?></h3>

<div class="cancel-comment-reply">
<small>< ?php cancel_comment_reply_link(); ?></small>
</div>

< ?php if ( get_option('comment_registration') &amp;amp;&amp;amp; !$user_ID ) : ?>
<p>You must be <a href="<?php echo get_option('siteurl'); ?>/wp-login.php?redirect_to=< ?php echo urlencode(get_permalink()); ?>">logged in</a> to post a comment.</p>
< ?php else : ?>

<form action="<?php echo get_option('siteurl'); ?>/wp-comments-post.php" method="post" id="commentform">

< ?php if ( $user_ID ) : ?>

<p><a href="<?php echo get_option('siteurl'); ?>/wp-admin/profile.php">< ?php echo $user_identity; ?></a>としてログイン中(<a href="<?php echo wp_logout_url(get_permalink()); ?>" title="Log out of this account">ログアウト</a>)</p>

< ?php else : ?>

<p><input type="text" name="author" id="author" value="<?php echo $comment_author; ?/>" size="22" tabindex="1" < ?php if ($req) echo "aria-required='true'"; ?> />
<label for="author"><small>お名前 < ?php if ($req) _e('(required)'); ?></small></label></p>

<p><input type="text" name="email" id="email" value="<?php echo $comment_author_email; ?/>" size="22" tabindex="2" < ?php if ($req) echo "aria-required='true'"; ?> />
<label for="email"><small>メール (公開されません) < ?php if ($req) _e('(required)'); ?></small></label></p>

<p><input type="text" name="url" id="url" value="<?php echo $comment_author_url; ?/>" size="22" tabindex="3" />
<label for="url"><small>ホームページ</small></label></p>

< ?php endif; ?>

<p class="comment-tag">
次のタグは有効です: < ?php echo allowed_tags(); ?><br />
Smilies: < ?php
if ( function_exists(cs_print_smilies) ) {
cs_print_smilies();
}
?><br />

</p><p><textarea name="comment" id="comment" cols="80%" rows="10" tabindex="4"></textarea></p>

<p><input name="submit" type="submit" id="submit" tabindex="5" value="コメントを送信する" />
< ?php comment_id_fields(); ?>
</p>
< ?php do_action('comment_form', $post->ID); ?>

</form>
</div>

< ?php endif; // If registration required and not logged in ?>

< ?php endif; // if you delete this the sky will fall on your head ?>

-----------------------

関連するかもしれない記事:
  • WordPress コメントをスレッド対応にする

  • トレンドマイクロ・オンラインショップ

    トラックバック

    1. Test Track
    2. Test Track

    1件のコメント

    1. casey より:

      コメントとトラックバックがこのように分かれて表示されます。

    コメントをどうぞ

    次のタグは有効です: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>
    Smilies: :) :D ;) 全部表示 »