wordpressでコメントの表示、非表示を設定する方法

双方向性をホームページに持たせるためには、コメントを投稿する機能は、必須です。

カスタマイズすることでQ&Aのページを作ったり、投稿されたコメントを表示、非表示を切り替えたり、
コメント投稿の表示をカスタマイズする方法をご紹介します。

表示するプログラム

<?php $comments = get_comments(
array('post_id' => $post->ID, 'status' => 'approve', 'order' => 'ASC')); ?>
<?php if ( $comments ) : ?>
<h5 id="comments">
コメント(<?php comments_number('','','%件'); ?>)</h5>
<?php foreach ($comments as $comment): ?>
<?php if(get_comment_type() == 'comment'):?>
<div class="compost">
<?php comment_text();?>
<p class="cominfo">
<?php comment_date(); ?><?php comment_time(); ?>&nbsp;|&nbsp;
<?php comment_author(); ?></p>
</div><!--compost-->
<?php endif; endforeach;?>
<?php endif; ?>

get_comments

<?php $comments = get_comments(
array('post_id' => $post->ID, 'status' => 'approve', 'order' => 'ASC')); ?>

まずは、get_comementsで表示したいコメントを読み込みます。

プロパティ

‘post_id’ => 投稿IDで投稿IDのページのコメントを読み込みます。
$post->IDで現在のページの投稿IDを読み込んでいるので、single.phpで表示させれば、そのページの投稿。
指定しなければ、ブログ全体のコメントを表示することができます。

‘status’ => ‘コメントの状態’
たとえば、approveは承認されたコメント、holdは承認待ちのコメント、spamはスパムコメント、trashはゴミ箱に入ってるコメントが読み込まれます。

‘number’ => 件数 読み込む件数を指定できます。

‘offset‘ => 件数 指定した件数のコメントをスキップして読み込みます。

‘order’ => ASC or DESC ASC:投稿した順 DESC:投稿が新しい順に表示されます。

if($comments)

<?php if ( $comments ) : ?>

if($comments)で表示するコメントがあるかどうかを確認しています。
コメントがある時に何か表示する、させないを分けることができます。



たとえば、コメントが無い状態でも『コメント募集中』という表示をしたい場合は

<?php $comments = get_comments(array('post_id' => $post->ID, 'status' => 'approve')); ?>
<h5 id="
comments">コメント(<?php comments_number('まだありません','1件','%件'); ?>)</h5>
<?php if ( $comments ) : ?>
<?php foreach ($comments as $comment): ?>
<?php if(get_comment_type() == 'comment'): ?>
<div class="compost">
<?php comment_text();?>
<p class="cominfo">
<?php comment_date(); ?><?php comment_time(); ?>&nbsp;|&nbsp;<?php comment_author(); ?></p>
</div><!--compost-->
<?php endif; endforeach;?>
<?php else: ?>
<p class="cominfo">コメント募集中</p>
<?php endif; ?>

comments_number

<?php comments_number('まだありません','1件','%件'); ?>

comments_number()はコメントの件数を表示してくれます。
何もカッコ内に指定しない時は、『?件のコメント』と表示されます。
comments_number(‘0件の時’,’1件の時’,’2件以上の時’)の表示になります。

<?php foreach ($comments as $comment) : ?>

foreachを使ってcomentのデータを読み込みループさせます。

get_comment_tyoe

<?php if(get_comment_type() == 'comment'):?>

geto_comment_type() == ‘comment’でコメントタイプを設定ます。
すでにget_commentsでtypeをして指定して、コメントしか読み込んでいないのですが、
すべてのtypeを読み込んでいたときには

<?php if(get_comment_type() == 'comment'):?>
コメントのときの表示方法
<?php else : ?>
それ以外のときの表示方法
<?php endif; ?>

別のコメントのタイプとの表示方法を変えたりすることができます。
typeは’trackback’の時がトラックバック
‘pingback’のときがピンバックになります。

comment_?

読み込んだコメントを表示させる関数です。
comment_dateでコメントの投稿日時、comment_timeでコメントの投稿時間
comment_authorでコメントを投稿した人
comment_text()でコメント投稿した文章を表示させています。

コメント投稿フォームの作成

外部ファイル化すると管理しやすいので別にテーマフォルダの中にcomments.phpとして下記を保存します。

<div id="com">
<?php if ( !empty($post->post_password) &
& $_COOKIE['wp-postpass_' . COOKIEHASH] != $post->post_password) : ?>
<p><?php _e('Enter your password to view comments.'); ?></p>
<?php return; endif; ?>
<?php $comments = get_comments(array('post_id' => $post->ID, 
'status' => 'approve', 'order' => 'ASC')); ?>
<?php if ( $comments): ?>
<h5 id="comments">コメント</h5>
<?php foreach($comments as $comment):?>
<?php if(get_comment_type() == 'comment'):?>
<div class="compost">
<?php comment_text(); ?>
<p class="cominfo"><?php comment_date(); ?>
<?php comment_time(); ?>&nbsp;|&nbsp;<?php comment_author(); ?></p>
</div><!--compost-->
<?php elseif(get_comment_type() == 'trackback'): ?>
<h5 id="comments">トラックバック</h5>
<div class="compost">
<?php comment_text();?>
<p class="cominfo"><?php comment_date(); ?>
<?php comment_time(); ?>&nbsp;|&nbsp;<?php comment_author(); ?></p>
</div><!--compost-->
<?php endif; endforeach;?>
<?php endif; ?>><?php if ( comments_open() ) : ?>
<h5>コメントする</h5>
<?php if ( get_option('comment_registration') && !$user_ID ) : ?>
<p>
<?php printf(__('You must be <a href="%s">logged in</a> to post a comment.'), 
get_option('siteurl')."/wp-login.php?redirect_to=".urlencode(get_permalink()));?></p>
<?php else : ?>
<form action="<?php echo get_option('siteurl'); ?>/wp-comments-post.php" method="post" id="commentform">
<?php if ( $user_ID ) : ?>
<p><?php printf(__('Logged in as %s.'),
 '<a href="'.get_option('siteurl').'/wp-admin/profile.php">'.$user_identity.'</a>'); ?>
<a href="<?php echo get_option('siteurl'); ?>/wp-login.php?action=logout" 
title="<?php _e('Log out of this account') ?>"><?php _e('Log out &raquo;'); ?></a></p>
<?php else : ?>
<p><input type="text" name="author" id="author" 
value="<?php echo $comment_author; ?>" size="22" tabindex="1" />
<label for="author"><small><?php _e('Name'); ?> <?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" />
<label for="email"><small><?php _e('Mail (will not be published)');?> 
<?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><?php _e('Website'); ?></small></label></p>
<?php endif; ?>
<p><textarea name="comment" id="comment" cols="100%" rows="6" tabindex="4"></textarea></p>
<p><input name="submit" type="submit" id="submit" 
tabindex="5" value="<?php echo attribute_escape(__('Submit Comment')); ?>" />
<input type="hidden" name="comment_post_ID" value="<?php echo $id; ?>" />
</p>
<?php do_action('comment_form', $post->ID); ?>
</form>
<?php endif; ?>
<?php else : ?>
<p><?php _e('Sorry, the comment form is closed at this time.'); ?></p>
<?php endif; ?>
</div><!--com-->

後は、自分がコメントのフォームをつけたいところに下記のタグを入れるだけで投稿フォームが表示されます。

<?php comments_template(); ?>

コメントする