Một thành phần không thể tách rời và góp phần tạo nên sức mạnh của WordPress đó là comment. Tính năng này ngoài việc tạo ra một khung trao đổi gữa tác giả bài viết và người đọc còn là một công cụ khá hữu ích giúp người dùng thường xuyên quay lại để tham khảo các góp ý của người dùng khác cũng như nhận những phản hồi đa chiều.
Trong phần 7, chúng ta đã nói về content, phần này cũng thuộc về content nhưng mình muốn tách riêng ra để chúng ta dễ dàng quan sát hơn.
Phụ mục
Xây dựng comments.php
Trước tiên, bạn cần tạo một file comments.php có nội dung như sau:
[php] <?php // Do not delete these linesif (‘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
?>
<h2><?php _e(‘Password Protected’); ?></h2>
<p><?php _e(‘Enter the password to view comments.’); ?></p>
<?php return;
}
}
/* This variable is for alternating comment background */
$oddcomment = ‘alt’;
?>
<!– You can start editing here. –>
<?php if ($comments) : ?>
<h3 id="comments"><?php comments_number(‘No Responses’, ‘One Response’, ‘% Responses’ );?> to “<?php the_title(); ?>”</h3>
<ol class="commentlist">
<?php foreach ($comments as $comment) : ?>
<li class="<?php echo $oddcomment; ?>" id="comment-<?php comment_ID() ?>">
<div class="commentmetadata">
<strong><?php comment_author_link() ?></strong>, <?php _e(‘on’); ?> <a href="#comment-<?php comment_ID() ?>" title=""><?php comment_date(‘F jS, Y’) ?> <?php _e(‘at’);?> <?php comment_time() ?></a> <?php _e(‘Said:’); ?> <?php edit_comment_link(‘Edit Comment’,”,”); ?>
<?php if ($comment->comment_approved == ‘0’) : ?>
<em><?php _e(‘Your comment is awaiting moderation.’); ?></em>
<?php endif; ?>
</div>
<?php comment_text() ?>
</li>
<?php /* Changes every other comment to a different class */
if (‘alt’ == $oddcomment) $oddcomment = ”;
else $oddcomment = ‘alt’;
?>
<?php endforeach; /* end for each comment */ ?>
</ol>
<?php else : // this is displayed if there are no comments so far ?>
<?php if (‘open’ == $post->comment_status) : ?>
<!– If comments are open, but there are no comments. –>
<?php else : // comments are closed ?>
<!– If comments are closed. –>
<p class="nocomments">Comments are closed.</p>
<?php endif; ?>
<?php endif; ?>
<?php if (‘open’ == $post->comment_status) : ?>
<h3 id="respond">Leave a Reply</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" id="commentform">
<?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><input type="text" name="author" id="author" value="<?php echo $comment_author; ?>" size="40" tabindex="1" />
<label for="author"><small>Name <?php if ($req) echo "(required)"; ?></small></label></p>
<p><input type="text" name="email" id="email" value="<?php echo $comment_author_email; ?>" size="40" tabindex="2" />
<label for="email"><small>Mail (will not be published) <?php if ($req) echo "(required)"; ?></small></label></p>
<p><input type="text" name="url" id="url" value="<?php echo $comment_author_url; ?>" size="40" tabindex="3" />
<label for="url"><small>Website</small></label></p>
<?php endif; ?>
<!–<p><small><strong>XHTML:</strong> <?php _e(‘You can use these tags:’); ?> <?php echo allowed_tags(); ?></small></p>–>
<p><textarea name="comment" id="comment" cols="60" rows="10" tabindex="4"></textarea></p>
<p><input name="submit" type="submit" id="submit" tabindex="5" value="Submit Comment" />
<input type="hidden" name="comment_post_ID" value="<?php echo $id; ?>" />
</p>
<?php do_action(‘comment_form’, $post->ID); ?>
</form>
<?php endif; // If registration required and not logged in ?>
<?php endif; // if you delete this the sky will fall on your head ?>
[/php]
Trong nội dung file này, mình đã có sẵn những thứ các bạn cần cho một hệ thống comment của wordpress. Bạn thiết kế thêm một chút CSS nữa cho comment và cho chúng vào style.css để nó đẹp đẽ hơn nhé :)
Đưa comment vào nội dung
Công việc tiếp theo của chúng ta là đưa comments.php đã thiết kế vào trong trang single.php (là nơi comment sẽ xuất hiện). Bạn bổ sung vào phía dưới the_content() nội dung sau:
[code lang=”html”] <div class=”comments-template”><?php comments_template(); ?>
</div>
[/code]
Nhiệm vụ của đoạn code này là gọi hàm comments_template(), hàm đó như thế nào ?
Hàm này là hàm được xây dựng sẵn bởi hệ thống WordPress, và nếu bạn click vào liên kết mình đã đính kèm vào hàm bạn sẽ thấy hàm này có tác dụng gọi file comments.php mà chúng ta đã thiết kế ở trên.
Trong đoạn code đầu tiên mình đã đưa lên, chúng ta có một số hàm mới mà mình chưa có dịp giới thiệu. Hôm nay có khác hơn những nội dung đã viết ở các bài trước 1 xíu là các bạn tự copy vào codex.wordpress.com để tìm hiểu các hàm nha. Mình nghĩ để các bạn vận động tay chân 1 chút sẽ tốt hơn :D
Một số điểm đáng lưu ý
Trong đoạn code đầu tiên chúng ta có thể dễ dàng tìm thấy các comment được sắp xếp thông qua một Ordered List (OL) chứ không phải Unordered(UL). Bạn có thể thay thế bằng thẻ div nếu muốn nhưng cũng nhớ thay đổi nội dung bên trong luôn cho nó thích hợp vì thẻ li sẽ đi kèm với ol hoặc ul thôi.
Trong đoạn code trên chúng ta cũng thiếu 1 số thứ, ví dụ như đối với các bài viết yêu cầu phải có mật khẩu mới có thể comment. Chúng ta sẽ làm điều đó như sau:
Chúng ta có thể sử dụng hàm wp_list_comments() để tạo ra một danh sách comment. Hàm này được xây dựng sẵn bởi WordPress nhưng nếu sử dụng nó đồng nghĩa với việc tùy biến nội dung (như cách trên) của chúng ta sẽ bị hạn chế lại. Một cách khác để tùy biến hàm wp_list_comments() đó là gọi gàm callback để override lại mặc định của wp_list_comments() như sau:
[php] <ul class="commentlist"><?php wp_list_comments(‘type=comment&callback=mytheme_comment’); ?>
</ul>
[/php] Tuy nhiên phần này mình sẽ không nói tới ở đây. Bạn có thể tự nghiên cứu hoặc xem thêm trong codex. Phần này là tùy biến nâng cao khá hay :)
TruongThanh says
Cái căn bản nhất của người sử dụng PHP là phải để rõ bản quyền. Website này dùng wordpress mà ko để dòng bản quyền nào hết, xoá hết đến là chán.
microsofttech says
Mấy bài viết về WP hay quá!
Hy vọng sẽ còn có nhiều bài hữu ích như vậy.
Thanks so much! :)
Dammesodotcom says
Trang nay haynhi.Minh dang tim site de voc cho minh cai them thi thay no hay qua.
Thanks rat nhieu
(Xin loi minh dang o quan net–khong viet duoc co dau)
ps: Ban co bai nao huong dan chinh cho theme hien thi tot tren ie6 khong.
Thanks :P
Nguyễn Duy Nhân says
Cái này hên xui ;):x
Bạn có thể download phần mềm IE Tester về để kiểm tra. Tìm hiểu thêm ở bộ toolkit này: http://nhanweb.com/2011/04/bo-kit-can-thiet-cho-nhung-nguoi-su-dung-wordpress.html
Nguyen Thanh Quang says
Nhân giúp mình cái form comment với,mình muốn làm giống bạn mà không biết sao hết,hiện mình đang sài Genesis.thanks,nếu được bạn gửi mail cho mình nha.
Nguyễn Duy Nhân says
Giống là giống làm sao ?
HocPham says
Tại sao em làm 1 cái theme wordpress. khi em mở bài viết A thì phần comment bên dưới nó lại hiện comment của bài viết B nhỉ? mở bài viết B nó hiện comment bài viết A. hic hic anh giúp em với? >:D<
Nguyễn Duy Nhân says
Mình chưa gặp trường hợp này bao giờ :|
Liệu có phải sự ảnh hưởng bắt nguồn từ việc bạn modify các hàm của WordPress dẫn đến ID của bài viết có sự khác biệt so với ID lúc đầu ?
HocPham says
Em tìm ra nguyên nhân rùi. đó là do em chèn thêm đoạn code bài viết liên quan vào file single.php :D bỏ nó đi thì comment lại trở lại đúng bài. nhưng em cũng ko hiểu là tại sao đoạn code đó lại xung đột với phần comments >:D<
HocPham says
Anh Nhân ơi anh viết một bài hướng dẫn cách chèn các dòng lệnh comments của wordpress vào một file comment html đi. Thanks
Bài trên của anh đọc khó tưởng tượng quá.
VD: em có một file html như ảnh: http://cC1.upanh.com/27.719.34994220.cMK0/comment.jpg
Bây giờ các câu lệnh của wordpress thế nào để cho khung comment đó thành động ;):x
bùi văn nguyện says
bài viết rất có ích, thanks anh nhiều, hi vọng sẽ có nhiều bài về wordpess từ anh
Quản lý Nhân sự says
mình xem nhưng khó hình dung quá, vì cũng mới tập tành làm WP thôi, bạn nào hiểu chưa ah. anh có bài nào dễ hiểu hơn hông anh.
cảm ơn chia sẻ :D
Tên vi phạm says
Cảm ơn anh em đã tự làm đc 1 theme cho riêng mình rồi.Hy vọng anh còn hỗ trợ nhiều cho cộng đồng Bloger Việt Nam.
Chúc anh luôn mạnh khỏe
Nguyễn Duy Nhân says
Chúc mừng bạn :)
cohacone says
Chào Anh Nhân, em đang làm phần comment, nhưng Anh Nhân có thể hướng dẫn em sử dụng Ajax được không, vì khi chọn phân trang của comment phải load lại trang
Nguyễn Duy Nhân says
Chào bạn! Nếu muốn sử dụng Ajax thì chúng ta sẽ phải viết lại comments.php và thay đổi nút submit. Vấn đề sử dụng Ajax trên wordpress sẽ trình bày ở một bài khác nhé.
HOang Vinh says
Hi anh!
Anh cho e hỏi có cách nào chuyển link ở phần comment thành do-follow đc không nhỉ?