WordPressコメント、新着にニューマークをつける
この記事は1年以上前(2018年7月6日)に書かれたもので、内容が古い可能性がありますのでご注意ください。
コーポレート系のCMSばかりつくっているのでコメント部分の改良に疎いんです。
コメントを承認したら何時間以内にニューマークをつけてなんて要望がきたのだがどうしたものかとなったわけです。
呼び出し
まず、single.php等にcomments_templateを関数をつかってコメント部分を呼び出します。
こんな感じで
<?php comments_template(‘/hoge_comment.php'); ?>
次はcomment.phpの中身です。
<?php
/*
* If the current post is protected by a password and the visitor has not yet
* entered the password we will return early without loading the comments.
*/
if ( post_password_required() )
return;
?>
<?php if (have_comments()) :?>
<div id="comment_list" class="comment_box">
<h2>レビュー一覧</h2>
<ul id="comments-list">
<?php wp_list_comments('type=comment&callback=mytheme_comment'); ?>
</ul>
</div>
<?php endif; ?>
<div id="comment_post" class="comment_box">
<h2>作品レビューを書く</h2>
<div id="comment_post_box">
<?php
$comments_args = array(
'fields' => array(
'author' => '<div class="comment_form_box"><p class="comment_label">名前</p>' . '<input id="author" name="author" type="text" value="' . esc_attr( $commenter['comment_author'] ) . '" /></div>',
'email' => '',
'url' => '',
),
'comment_field' => '<div class="comment_form_box"><p class="comment_label">コメント</p>' . '<textarea id="comment" name="comment" cols="45" rows="8" aria-required="true" placeholder=“"></textarea></div>',
'title_reply' => '',
'comment_notes_before' => '',
'comment_notes_after' => '',
'logged_in_as' => '<div class="comment_form_box"><p class="comment_label">名前</p>' . '<input id="author" name="author" type="text" value="' . esc_attr( $commenter['comment_author'] ) . '" /></div>',
'label_submit' => 'コメントを書き込む',
);
comment_form($comments_args);
?>
</div>
</div>
細かいカスタマイズは別参照していただいて割愛させていただきます。
ここら辺よくでてると思うので。
functions.phpに追記
コメント一覧部分wp_list_commentsのリストにそれぞれニューマークを付与したいのでこちらの関数の中身をfunctions.phpで関数を定義しコールバック。中身は以下。
/*
Functions CommentList Custmize
---------------------------------------------------------------*/
function mytheme_comment($comment, $args, $depth) {
$GLOBALS['comment'] = $comment;
extract($args, EXTR_SKIP);
if ( 'div' == $args['style'] ) {
$tag = 'div';
$add_below = 'comment';
} else {
$tag = 'li';
$add_below = 'div-comment';
}
?>
<<?php echo $tag ?> <?php comment_class( empty( $args['has_children'] ) ? '' : 'parent' ) ?> id="comment-<?php comment_ID() ?>">
<?php if ( 'div' != $args['style'] ) : ?>
<div id="div-comment-<?php comment_ID() ?>" class="comment-body">
<?php endif; ?>
<footer class="comment-meta">
<?php
$hours = 10;
$today = date_i18n('U');
$entry = get_comment_time('U');
$kiji = date('U',($today - $entry)) / 3600 ;?>
<?php if( $hours > $kiji): ?>
<aside class="new_flag"><img src="<?php bloginfo('template_directory'); ?>/images/common/parts/icon07.png" alt="NEW"></aside>
<?php else: endif; ?>
<div class="comment-author vcard">
<?php if ( $args['avatar_size'] != 0 ) echo get_avatar( $comment, $args['avatar_size'] ); ?>
<?php printf( __( '<cite class="fn">%s</cite> <span class="says">says:</span>' ), get_comment_author_link() ); ?>
</div>
<?php if ( $comment->comment_approved == '0' ) : ?>
<em class="comment-awaiting-moderation"><?php _e( 'Your comment is awaiting moderation.' ); ?></em>
<br />
<?php endif; ?>
<div class="comment-meta commentmetadata"><a href="<?php echo htmlspecialchars( get_comment_link( $comment->comment_ID ) ); ?>">
<?php
$hours = 1000;
$today = date_i18n('U');
$entry = get_comment_time('U');
$kiji = date('U',($today - $entry)) / 3600 ;?>
<?php if( $hours > $kiji): ?>
<aside class="new_flag">NEW</aside>
<?php else: endif; ?>
<?php
/* translators: 1: date, 2: time */
printf( __('%1$s at %2$s'), get_comment_date(), get_comment_time() ); ?></a><?php edit_comment_link( __( '(Edit)' ), ' ', '' );
?>
</div>
</footer>
<?php comment_text(); ?>
<div class="reply">
<?php comment_reply_link( array_merge( $args, array( 'add_below' => $add_below, 'depth' => $depth, 'max_depth' => $args['max_depth'] ) ) ); ?>
</div>
<?php if ( 'div' != $args['style'] ) : ?>
</div>
<?php endif; ?>
<?php
}
以下が今回のキモ。コードはこちらを参考にさせていただきました。
WordPressでNew!を表示するパターン別4つの方法
こちらのケースだと記事(get_the_time)に対しですが今回はコメント。4行目のget_comment_timeで時間を取得してくる感じです。
<?php
$hours = 10;
$today = date_i18n('U');
$entry = get_comment_time('U');
$kiji = date('U',($today - $entry)) / 3600 ;?>