comments.php 何度も失敗を繰り返し…
自分の理想の形に仕上げるのに一番時間がかかったテンプレートです(^_^;)
Google検索では comments.php でヒットはするのですが
部分的なカスタマイズの記事が多かったです。
昨年から時間をかけてやっと形になった comments.php 作成のお話。

—— ここから続き

WP3.3ですとデフォルトテンプレートと言う物は「Twenty Eleven」か「Twenty Ten」になるのですかね。
各項目にコメントで説明文がついているのですが英語です!(ワカラナイ
Google検索で日本語で絞ってあちらこちらのサイトで説明を読む。
コメント一覧の入れ子・ツリー化?・トラックバックやピンバックと分ける
上記のような言葉で検索しまくりました。
おそらくコメント一覧とか力をいれてないサイトさんも多いかと思います。(うちもです
コメントがこない。記事内容が悪いからだとわかっています><
コメントがこなくても、コメントページに何故か拘ってしまう。
テーマを半自作で始めた以上は…とか、色んな考えも出て作ってみました。
話が長くなってしまいましたね(^_^;)

一番簡単なのは、single.php からのコメント呼び出しを <?php comments_template(); ?> とすれば良い話なんですけどね。
後は出力されるタグのクラス等に合わせてスタイルシートを付けるだけ。

comments.php 作成

注意 下記のテンプレートがきちんと動作するかはわかりません!
コメント一覧は確認できましたが、トラックバック・ピンバックは来てみないと(^_^;)

テキストエディタ新規作成します。
「comments.php」文字コードUTF-8でテーマフォルダ内に保存
長くなりますが…使用中の comments.php です
comments.php
<div id="commenttb">
<?php
if (isset($_SERVER['SCRIPT_FILENAME']) && 'comments.php' == basename($_SERVER['SCRIPT_FILENAME']))
	die ('このページを直接読み込まないでください。');	
if ( post_password_required() ) { ?>
	<p class="nocomments">このコメントはパスワードで保護されています。表示するには、パスワードを入力してください。</p> 
<?php return; } ?>

<div id="tb">
<?php if ( ! empty($comments_by_type['pings']) ) : ?>
<h3 id="comments" class="tb-title">トラックバック/ピンバック</h3>
<ol class="commentlist">
<?php wp_list_comments('type=pings&callback=mytheme_pings'); ?>
</ol>
<?php endif; ?>
<!-- / #td END --></div>

<div id="com">
<?php if ( ! empty($comments_by_type['comment']) ) : ?>
	<h3 id="comments">&#8220;<?php the_title(); ?>&#8221; への<?php comments_number('コメント(0)', 'コメント(1)', 'コメント(%)');?>件</h3>
	<ol class="commentlist">
	<?php wp_list_comments('type=comment&callback=mytheme_comment'); ?>
	</ol>
<?php else : ?>
	<?php if ( comments_open() ) : ?>
	<p class="nocomments">お気軽にコメント下さいね♪</p>
	<?php else : ?>
	<p class="nocomments">コメントを受け付けておりません。</p>
	<?php endif; ?>
<?php endif; ?>
<!-- / #com END --></div>

<?php if ( comments_open() ) : ?>
<div id="respond">
<h3 id="comments"><?php comment_form_title('コメントする', '%s にコメントする'); ?></h3>
	<div id="cancel-comment-reply"><small><?php cancel_comment_reply_link('(キャンセル)'); ?></small></div>
	<?php if ( get_option('comment_registration') && !is_user_logged_in() ) : ?>
	<p>コメントを投稿するには、 <a href="<?php echo get_option('siteurl'); ?>/wp-login.php?redirect_to=<?php the_permalink(); ?>">ログイン</a> する必要があります。</p>
	<?php else : ?>
	<form action="<?php echo get_option('siteurl'); ?>/wp-comments-post.php" method="post" id="commentform">
		<?php if ( is_user_logged_in() ) : ?>
		<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="ログアウト">ログアウト &raquo;</a></p>
		<?php else : ?>
		<fieldset id="user-details">
		<p><label for="author"><small>お名前 <span class="hissu"><?php if ($req) echo "(必須)"; ?></span></small></label><br />
		<input type="text" name="author" id="author" value="<?php echo esc_attr($comment_author); ?>" size="" tabindex="1" <?php if ($req) echo "aria-required='true'"; ?> /></p>
		<p><label for="email"><small>メール <span class="hissu"><?php if ($req) echo "(必須)"; ?></span>非公開</small></label><br />
		<input type="text" name="email" id="email" value="<?php echo esc_attr($comment_author_email); ?>" size="" tabindex="2" <?php if ($req) echo "aria-required='true'"; ?> /></p>
		<p><label for="url"><small>URL</small></label><br />
		<input type="text" name="url" id="url" value="<?php echo  esc_attr($comment_author_url); ?>" size="" tabindex="3" /></p>
		</fieldset><!--/user-details end -->
		<?php endif; ?>
	<fieldset id="user-message">
	<p><small><strong>XHTML:</strong> 次のタグが使えます: <code><?php echo allowed_tags(); ?></code></small></p>
	<label for="comment">comment</label><br />
	<p><textarea name="comment" id="comment" cols="0" rows="0" tabindex="4"></textarea></p>
	<p align=right>
	<input name="submit" type="submit" id="submit" tabindex="5" value="コメントを送信する" />
	<?php comment_id_fields(); ?>
	</p>
	<?php do_action('comment_form', $post->ID); ?>
	</fieldset><!-- /user-message end -->
	</form>
	<?php endif; ?>
<!-- / #respond END --></div>

<?php endif; ?>
<!-- / #commenttb END --></div>
大まかに内容を説明します
*7行目までは削除してはいけません。
*9-16行目
 トラックバックやピンバックが有る場合表示されます
 無い場合何も表示されません
*18-31行目
 コメントが有る場合コメントが表示されます
 コメントが無い場合「お気軽にコメント下さいね♪」と表示されます
 コメントを受け付けていない場合「コメントを受け付けておりません。」と表示されます
 20行目のコメント○件は、コメント数のみ表示しています
*33-65 コメントフォーム
 ログインしている場合としてない場合のフォームが違ったりします

コメント一覧とトラックバック/ピンバック一覧の表示

WPデフォルトでいいや~って方は
13行目を <?php wp_list_comments('type=pings'); ?>
22行目を <?php wp_list_comments('type=comment'); ?>
と変更すればOK

コメント一覧はデフォルトと変わりないのですが、トラックバック/ピンバック一覧で要らない物も入ってしまったので自分のテンプレートから呼び出す形にしました
要らない物とは…トラックバック/ピンバックで「編集」「返信」が付いていた。
呼び出し方が間違っていたのかもしれませんが(^_^;)

取り敢えず自分のテンプレートから呼び出す方法
13行目の呼び出しに答える部分 mytheme_pings
functions.php へ追加
function mytheme_pings($comment, $args, $depth) {
	$GLOBALS['comment'] = $comment; ?>
	<li <?php comment_class(); ?> id="li-comment-<?php comment_ID() ?>">
		<div id="comment-<?php comment_ID(); ?>" class="comment-body">
			<div class="comment-author vcard">
			<?php printf(__('<cite class="fn">%s</cite>'), get_comment_author_link()) ?>
			</div>
			<?php if ($comment->comment_approved == '0') : ?>
			<em>*このトラックバック/ピンバックは承認待ちになってます!</em><br />
			<?php endif; ?>
			<div class="comment-meta commentmetadata">
			</div>
			<?php comment_text() ?>
		</div>
<?php }
22行目の呼び出しに答える部分 mytheme_comment
functions.php へ追加
function mytheme_comment($comment, $args, $depth) {
	$GLOBALS['comment'] = $comment; ?>
	<li <?php comment_class(); ?> id="li-comment-<?php comment_ID() ?>">
		<div id="comment-<?php comment_ID(); ?>" class="comment-body">
			<div class="comment-author vcard">
			<?php echo get_avatar( $comment->comment_author_email, 50 ); ?>
			<?php printf(__('<cite class="fn">%s</cite> <span class="says">のコメント♪</span>'), get_comment_author_link()) ?>
			</div>
			<?php if ($comment->comment_approved == '0') : ?>
			<em>*このコメントは承認待ちになってます!</em><br />
			<?php endif; ?>
			<div class="comment-meta commentmetadata">
			<?php printf(__('%1$s'), get_comment_date()) ?><?php edit_comment_link(__('(Edit)'),'  ','') ?>
			</div>
			<?php comment_text() ?>
			<div class="reply">
			<?php comment_reply_link(array_merge( $args, array('depth' => $depth, 'max_depth' => $args['max_depth']))) ?>
			</div>
		</div>
<?php }

こんなでいいのかなぁ>< ワカリマセン

おまけ

index.php や single.php にその記事のコメント数を表示
<?php comments_popup_link('Comments(0)', 'Comments(1)', 'Comments(%)'); ?>
日本語にしたい場合
<?php comments_popup_link('コメント(0)', 'コメント(1)', 'コメント(%)'); ?>

トラックバックURLを表示
<label for="tbUrl">トラックバック URL</label><br /> <input type="text" value="<?php trackback_url() ?>” size=”30″ readonly=”readonly” onfocus=”this.select()” id=”trackbackUrl” />


以上です。
もっとスマートな方法があれば教えてください!
Ajaxも付けてみたい…返信を押すとそのコメントの直下へフォームが移動するとかとか…
まだまだ comments.php との戦いは続きます。
以上でした。

2012/01/19 Wordpress
2012/01/20 ,
Comments(1)
関連記事