Tùy biến giao diện bình luận wordpress. Hôm nay mình sẽ chia sẽ cách làm
comments_template là function nó sẽ include file comments.php, do vậy anh chị muốn show phần comment ở đâu thì chỉ cần dùng code sau vào vị trí cần hiển thị
1 |
<?php comments_template(); ?> |
File comments.php la nơi xử lý lấy ra các list comment, phân trang comment và form comment
Chúng ta sẽ sử dụng function wp_list_comments để hiển thị list comment. Ví dụ
1 2 3 4 5 6 7 8 |
wp_list_comments( array( //các tùy biến sẽ được thực hiện qua lớp CDT_Walker_Comment 'walker' => new CDT_Walker_Comment(), 'avatar_size' => 120, 'style' => 'div', ) ); |
Chúng ta sẽ sử dụng function paginate_comments_links để làm việc này. Ví dụ
1 2 3 4 5 6 7 8 9 |
paginate_comments_links( array( 'echo' => false, 'end_size' => 0, 'mid_size' => 0, 'next_text' => __( 'Newer Comments', 'developtheme' ) . ' <span aria-hidden="true">→</span>', 'prev_text' => '<span aria-hidden="true">←</span> ' . __( 'Older Comments', 'developtheme' ), ) ); |
Chúng ta sẽ sử dụng function để hiển thị form comment. Ví dụ
1 2 3 4 5 6 7 8 9 10 |
comment_form( array( 'class_form' => 'section-inner thin max-percentage', 'title_reply_before' => '<h2 id="reply-title" class="comment-reply-title">', 'title_reply_after' => '</h2>', 'comment_notes_before' => '', 'submit_field' => '%1$s %2$s', 'name_submit' => 'Gửi bình luận' ) ); |
Để tùy biến thứ tự cũng như thêm bớt các trường của form comment wordpress chúng ta sử dụng hook filter là để làm comment_form_fields. Ví dụ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
//Sử dụng trong class add_filter( 'comment_form_fields', array($this,'comment_fields_custom_order') ); function comment_fields_custom_order( $fields ) { $comment_field = $fields['comment']; $author_field = $fields['author']; $email_field = $fields['email']; $url_field = $fields['url']; $cookies_field = $fields['cookies']; //Xóa các fields hiện có unset( $fields['comment'] ); unset( $fields['author'] ); unset( $fields['email'] ); unset( $fields['url'] ); unset( $fields['cookies'] ); //Tạo lại các fields cũng như thứ tự của nó $fields['author'] = '<p><input id="author" name="author" type="text" value="" size="30" maxlength="245" required="required" placeholder="Your Name">'; $fields['email'] = '<input id="email" name="email" type="email" value="" size="30" maxlength="100" aria-describedby="email-notes" required="required" placeholder="Email"></p>'; $fields['comment'] = '<p><textarea name="comment" id="comment" cols="30" rows="10" placeholder="Your Message"></textarea></p>'; return $fields; } |
Chúng ta sẽ tùy biến từng item comment qua lớp này. Ví dụ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
<?php if ( ! class_exists( 'CDT_Walker_Comment' ) ) { class CDT_Walker_Comment extends Walker_Comment { protected function html5_comment( $comment, $depth, $args ) { $tag = ( 'div' === $args['style'] ) ? 'div' : 'li'; ?> <<?php echo $tag; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- static output ?> id="comment-<?php comment_ID(); ?>" <?php comment_class( $this->has_children ? 'parent' : '', $comment ); ?>> <div class="single-comment-body"> <div class="comment-user-avater"> <?php $comment_author_url = get_comment_author_url( $comment ); $comment_author = get_comment_author( $comment ); $avatar = get_avatar( $comment, $args['avatar_size'] ); if ( 0 !== $args['avatar_size'] ) { if ( empty( $comment_author_url ) ) { //khử trùng html echo wp_kses_post( $avatar ); } else { printf( '<a href="%s" rel="external nofollow" class="url">', $comment_author_url ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped --Escaped in https://developer.wordpress.org/reference/functions/get_comment_author_url/ echo wp_kses_post( $avatar ); } } if ( ! empty( $comment_author_url ) ) { echo '</a>'; } $comment_reply_link = get_comment_reply_link( array_merge( $args, array( 'add_below' => 'div-comment', 'depth' => $depth, 'max_depth' => $args['max_depth'], 'before' => '<span class="comment-reply">', 'after' => '</span>', ) ) ); ?> </div> <div class="comment-text-body"> <h4><?php echo $comment_author; ?> <span class="comment-date"><?php echo get_comment_date( 'F d, Y', $comment ); ?></span> <?php $by_post_author = CDT_is_comment_by_post_author( $comment ); if ( $comment_reply_link || $by_post_author ) { ?> <?php if ( $comment_reply_link ) { echo $comment_reply_link; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Link is escaped in https://developer.wordpress.org/reference/functions/get_comment_reply_link/ } } ?> </h4> <?php comment_text(); if ( '0' === $comment->comment_approved ) { ?> <p class="comment-awaiting-moderation"><?php _e( 'Your comment is awaiting moderation.', 'CDT' ); ?></p> <?php } ?> </div> </div> <?php } } } |
Các làm là như thế, mình có đình kèm file zip để anh chị tham khảo, tải về anh chị tìm 3 file: single.php, comments.php và class-walker-comment.php trong thư mục classes
Mọi sự sao chép xin ghi rõ nguồn là fcwordpress.net
Chuyên trang về wordpress: hướng dẫn thiết kế theme, plugin, thủ thuật wordpress