コメントとトラックバックを分けて表示する for WordPress(改)

コメントとトラックバックを分けて表示する for WordPress(改)

Posted at August 13,2009 1:17 AM
Tag:[Comment, Customize, Trackback, WordPress]

WordPress のデフォルト状態は、投稿情報や個別記事でのコメントとトラックバック(およびピンバック)が別々に表示されない仕様になっています。

個別記事では次のようにトラックバックとコメントが混在して表示されます。

変更前

それを踏まえて、以前「コメントとトラックバックを分けて表示する for WordPress(その1)」をエントリーしました。

これにより、次のようにコメントとトラックバックを分けて表示できるようになります。

変更後

また、メインページ等の投稿情報もコメントとトラックバックを分割表示できます。

変更後

以前紹介したカスタマイズでは「トラックバックが表示されません」とのご質問を頂きましたので、本エントリーで改修した内容を改めて紹介致します。

1.プラグインのダウンロード

下記のサイトよりの「Download」にある Trackping Separator. をクリックし、移動先のページ右側にある赤い「Download」をクリックして、プラグインアーカイブをダウンロードします。

Trackping Separator

2.プラグインのアップロード・有効化

ダウンロードしたアーカイブを展開し、中にある trackpings.php を /wp-content/plugins 配下にアップロードします。その後、WordPress の管理画面の「プラグイン」に移動し、Trackping Separator が表示されているので、「使用する」のリンクをクリックし、有効化します。

3.テンプレートの修正

WordPress 管理画面の「外観」→「編集」で、以下の各テンプレートを修正します。

3.1 メインインデックス/アーカイブ/検索結果/単一記事の投稿

インデックス/アーカイブ/検索結果/単一記事の投稿の各テンプレートに投稿者情報(投稿時間・カテゴリー等)がある場合は、 comments_popup_link で検索し、

<?php comments_popup_link('No Comments', '1 Comment', '% Comments'); ?>

というタグを見つけ、下記の内容に変更します。変更前のタグの内容はご利用のテンプレートによって若干異なりますのでご注意ください。

<?php comments_popup_link('Comments (0)', 'Comments (1)', 'Comments (%)'); ?> | <a href="<?php the_permalink() ?>#trackback" title="Trackback" class="trackacklink">Trackbacks (<?php echo trackpings('count'); ?>)</a>

個別記事ページにはコメント本文とトラックバック本文が表示されるので、当サイトでの配布テンプレートのように投稿者情報を本文下に表示している場合は、投稿者情報からコメント・トラックバックの表示自体を削除しても良いかもしれません。

3.2 コメント

ここでは当サイトで配布しているテンプレートを元に解説します。変更する箇所はコメント一覧を表示する部分だけなので、他のテンプレートをご利用の場合も適用可能と思います。

コメントテンプレートの下記の赤色部分を削除し、削除した部分に、その下にある「入れ替える内容(1)」または「入れ替える内容(2)」の内容を貼り付けてしてください。

(1)はトラックバックの表示部分に Trackping Separator プラグインで用意された関数 listtrackpings を利用したものです。(2)は listtrackpings を使わず、PHPを書き下してトラックバック部分を表示しています。表示内容は(2)の方がきめ細かく制御でき、編集用のリンクも表示できますが、構造が複雑です。PHPが書ける方は(2)を選択して自分好みの表示にしてください。

本項のテンプレート編集方法が分からない場合は、4項に進んでください。

<?php // Do not delete these lines
    if ('comments.php' == basename($_SERVER['SCRIPT_FILENAME']))
        die ('Please do not load this page directly. Thanks!');
    if (!empty($post->post_password)) { // if there's a password
        if ($_COOKIE['wp-postpass_' . COOKIEHASH] != $post->post_password) {  // and it doesn't match the cookie
            ?>
            <p class="nocomments">This post is password protected. Enter the password to view comments.<p>
            <?php return;
        }
    }
?>
 
<div id="comments">
 
<?php if ('open' == $post->ping_status) : // comment close ?> 
    <h3 class="comments-head">Trackback URL</h3> 
    <input type="text" value="<?php trackback_url(true); ?>" size="60" readonly="readonly" id="trackbackurl" tabindex="1" accesskey="t" onfocus="this.select()" />
<?php endif; ?>
 
<h3 class="comments-head">Comment &amp; Trackback<!-- [<?php comments_number('No Responses', 'One Response', '% Responses' );?>]--></h3> 
 
    <?php if (!('open' == $post->comment_status) && ('open' == $post->ping_status)) : // comment close ?> 
        <p class="nocomments">Comments are closed.</p>
    <?php elseif (('open' == $post->comment_status) && !('open' == $post->ping_status)) : // trackback close ?> 
        <p class="nocomments">Trackback are closed.</p>
    <?php elseif (!('open' == $post->comment_status) && !('open' == $post->ping_status)) : // comment and trackback close ?> 
        <p class="nocomments">Comments and Trackback are closed.</p>
    <?php endif; ?>
 
<?php if ($comments) : ?>
 
    <div class="commentlist">
    <?php foreach ($comments as $comment) : ?>
 
        <div id="comment-<?php comment_ID() ?>" class="comment">
            <?php if ($comment->comment_approved == '0') : ?>
                <em>Your comment is awaiting moderation.</em>
            <?php endif; ?>
            <div class="comment-content"><?php comment_text() ?></div>
            <p class="comment-footer">Posted at <a href="#comment-<?php comment_ID() ?>"><?php comment_date('Y.m.j') ?> <?php comment_time() ?></a> by <?php comment_author_link() ?><?php if ( $user_ID ) : ?> | <?php edit_comment_link('edit','',''); ?><?php endif; ?></p>
        </div>
 
    <?php endforeach; /* end for each comment */ ?>
    </div>
 
<?php else : // this is displayed if there are no comments so far ?>
    <p class="nocomments">No comments.</p>
<?php endif; ?>
 
<?php if (('open' == $post->comment_status) && ('open' == $post->ping_status)) : // open ?> 
    <p><?php comments_rss_link('Comment feed'); ?></p>
<?php endif; ?>
 
<?php if ('open' == $post->comment_status) : ?>
<h3 class="comments-head">Comment</h3>
 
<?php if ( get_option('comment_registration') && !$user_ID ) : ?>
<p>You must be <a href="<?php echo get_option('siteurl'); ?>/wp-login.php?redirect_to=<?php the_permalink(); ?>">logged in</a> to post a comment.</p>
<?php else : ?>
 
<form action="<?php echo get_option('siteurl'); ?>/wp-comments-post.php" method="post" name="commentform" id="commentform">
<div id="comments-open-data">
<?php if ( $user_ID ) : ?>
    <p>Logged in as <a href="<?php echo get_option('siteurl'); ?>/wp-admin/profile.php"><?php echo $user_identity; ?></a>. (<a href="<?php echo get_option('siteurl'); ?>/wp-login.php?action=logout" title="Log out of this account">Logout</a>)</p>
<?php else : ?>
    <p><label for="author">Name:<?php if ($req) echo "(required)"; ?></label><br />
       <input type="text" name="author" id="author" value="<?php echo $comment_author; ?>" size="22" tabindex="2" accesskey="n" />
    </p>
    <p><label for="email">Mail: (will not be published) <?php if ($req) echo "(required)"; ?></label><br />
       <input type="text" name="email" id="email" value="<?php echo $comment_author_email; ?>" size="22" tabindex="3" accesskey="m" />
    </p>
    <p><label for="url">Website:</label><br />
       <input type="text" name="url" id="url" value="<?php echo $comment_author_url; ?>" size="22" tabindex="4" accesskey="w" />
    </p>
<?php endif; ?>
 
<p><label for="url">Comment:</label><br />
   <textarea name="comment" id="comment" cols="40" rows="8" tabindex="5" accesskey="c" onfocus="if (this.value == 'Please comment') this.value = '';" onblur="if (this.value == '') this.value = 'Please comment';">Please comment</textarea>
</p>
<p>XHTML: You can use these tags:<br /><?php echo allowed_tags(); ?></p>
<p><input name="submit" type="submit" id="submit" tabindex="6" value="Submit" accesskey="s" />
   <input type="hidden" name="comment_post_ID" value="<?php echo $id; ?>" />
</p>
 
<?php do_action('comment_form', $post->ID); ?>
 
</div>
</form>
 
<?php endif; // If registration required and not logged in ?>
 
<?php endif; // if you delete this the sky will fall on your head ?>
 
</div><!-- comments -->

入れ替える内容(1)

<h3 class="comments-head">Trackbacks</h3>
 
<div class="tarckbacktlist">
<?php listtrackpings('', '<div id="comment--%id" class="comment"><div class="comment-content"><p>%content</p></div><a href="%url"></a><p class="comment-footer">Tracked on <a href="#comment-%id">%date</a> by %origin</div>','Y.m.j'); ?>
</div>
 
<h3 class="comments-head">Comments</h3>
 
<div class="commentlist">
<?php foreach ($comments as $comment) : ?>
 
<? if ($comment->comment_type != "trackback" && $comment->comment_type != "pingback" && !ereg("<pingback />", $comment->comment_content) && !ereg("<trackback />", $comment->comment_content)) { ?>
 
    <div id="comment-<?php comment_ID() ?>" class="comment">
        <?php if ($comment->comment_approved == '0') : ?>
            <em>Your comment is awaiting moderation.</em>
        <?php endif; ?>
        <div class="comment-content"><?php comment_text() ?></div>
        <p class="comment-footer">Posted at <a href="#comment-<?php comment_ID() ?>"><?php comment_date('Y.m.j') ?> <?php comment_time() ?></a> by <?php comment_author_link() ?><?php if ( $user_ID ) : ?> | <?php edit_comment_link('edit','',''); ?><?php endif; ?></p>
    </div>
<? } ?>
 
<?php endforeach; /* end for each comment */ ?>
</div>

(1)を適用した場合の表示
(1)を適用した場合の表示

入れ替える内容(2)

<h3 class="comments-head">Trackbacks</h3>
 
<div class="tarckbacktlist">
<?php if ($trackbacks = trackpings("", 'both')) {
foreach ($trackbacks as $trackback) : ?>
    <div id="comment-<?php echo($trackback->comment_ID); ?>" class="comment">
        <div class="comment-content">
<?php $tmp_content = ereg_replace("(<strong>.*</strong>)(.*)","<p>\\1</p><p>\\2</p>",$trackback->comment_content); echo($tmp_content); ?>
        </div>
        <p class="comment-footer">Tracked on <a href="#comment-<?php echo($trackback->comment_ID); ?>">
<?php echo(mysql2date('Y.m.j h:m A', $trackback->comment_date)); ?> 
</a> by 
<a href="<?php $tmp_url = esc_url($trackback->comment_author_url, array('http', 'https')); echo($tmp_url); ?>"><?php echo($trackback->comment_author); ?></a> 
<?php if ( $user_ID ) : ?> | <a class="comment-edit-link" href="<?php echo(admin_url('comment.php?action=editcomment&amp;c=')); ?><?php echo($trackback->comment_ID); ?>">edit</a>
<?php endif; ?></p>
    </div>
<?php endforeach;
} ?>
</div>
 
<h3 class="comments-head">Comments</h3>
 
<div class="commentlist">
<?php foreach ($comments as $comment) : ?>
 
<? if ($comment->comment_type != "trackback" && $comment->comment_type != "pingback" && !ereg("<pingback />", $comment->comment_content) && !ereg("<trackback />", $comment->comment_content)) { ?>
 
    <div id="comment-<?php comment_ID() ?>" class="comment">
        <?php if ($comment->comment_approved == '0') : ?>
            <em>Your comment is awaiting moderation.</em>
        <?php endif; ?>
        <div class="comment-content"><?php comment_text() ?></div>
        <p class="comment-footer">Posted at <a href="#comment-<?php comment_ID() ?>"><?php comment_date('Y.m.j') ?> <?php comment_time() ?></a> by <?php comment_author_link() ?><?php if ( $user_ID ) : ?> | <?php edit_comment_link('edit','',''); ?><?php endif; ?></p>
    </div>
<? } ?>
 
<?php endforeach; /* end for each comment */ ?>
</div>

(2)を適用した場合の表示
(2)を適用した場合の表示

4. comments.php

3.2項の作業が分からない場合、comments.php ファイルへのリンクをおきましたので、ファイルをダウンロードして、展開した中にある内容を「コメント」の内容と入れ替えてください。

5.プラグインを利用しない方法

ネットで調べていたら、以下のページでプラグインを利用せずにコメントとトラックバックを分けて表示するカスタマイズが紹介されていました。

AOINA.COM - WordPressのコメントとトラックバックを分けて表示させる
関連記事
zenback
人気エントリー
トラックバックURL


トラックバック

WordPress でトラックバックをうまく表示しよう!① from ドロップシッパーのWordpress
とタイトルある通りです。 WordPress はトラックバックもコメントも同一のものとして考えているので、 デフォルトではコメントと一緒に表示されます。 ... [続きを読む]

Tracked on May 27, 2010 10:54 AM
コメント

Aiseesoft トータル動画変換
1.ビデオを全ての流行っている動画形式に変換する2.専門な音声変換3.ほとんどのポータブルデバイスをサポートする4.様々なムービーと音楽を作成す5.プレビューとスナップショット
http://www.aiseesoft.jp/total-video-converter/

[1] Posted by aiseesoft : July 20, 2010 12:24 PM
コメントする
greeting

*必須

*必須(非表示)


ご質問のコメントの回答については、内容あるいは多忙の場合、1週間以上かかる場合があります。また、すべてのご質問にはお答えできない可能性があります。予めご了承ください。

太字イタリックアンダーラインハイパーリンク引用
[サインインしない場合はここにCAPTCHAを表示します]

コメント投稿後にScript Errorや500エラーが表示された場合は、すぐに再送信せず、ブラウザの「戻る」ボタンで一旦エントリーのページに戻り(プレビュー画面で投稿した場合は、投稿内容をマウスコピーしてからエントリーのページに戻り)、ブラウザをリロードして投稿コメントが反映されていることを確認してください。

コメント欄に(X)HTMLタグやMTタグを記述される場合、「<」は「&lt;」、「>」は「&gt;」と入力してください。例えば「<$MTBlogURL$>」は「&lt;$MTBlogURL$&gt;」となります(全て半角文字)