Chèn comment form trong wordpress – tùy biến comment form từ a-z

Quảng cáo
Ads_ngang
Website dinhthuanit.com có bài Chèn comment form trong wordpress – tùy biến comment form từ a-z

WordPress comments được thành lập ở file comments.php, file này coi là comment template. Form comment được đính ở cuối mỗi bài viết, chèn dòng sau đây vào cuối file single.php:

 comments_template  (    )    ;     //equal include('comments.php')   

Và kết quả bạn bạn nhận được là:
chèn comment form trong wordpress

Hiển thị comment form

Copy và chèn đoạn code này trong comments.php. Tất cả các chuỗi như reply, reply to, reply link, nút submit cũng đều có thể sửa ở biến $args .

   $args    =    array    (     'id_form'     =>      'commentform'    ,     'id_submit'     =>      'submit'    ,     'title_reply'     =>    __  (     'Leave a Reply'     )    ,     'title_reply_to'     =>    __  (     'Leave a Reply to %s'     )    ,     'cancel_reply_link'     =>    __  (     'Cancel Reply'     )    ,     'label_submit'     =>    __  (     'Post Comment'     )    ,       //display more comment fields with some defaults fields in which.     'fields'    =>     $fields    ,       //Text or HTML to be displayed after the set of comment fields (and before the submit button)     'comment_notes_after'    =>     ''    ,       //Text or HTML to be displayed before the set of comment form fields if the user is not logged in.     'comment_notes_before'    =>     ''    ,       //The textarea and the label of comment body. Sửa nội dung theo ý bạn.     'comment_field'    =>     ' 

. _x ( 'Comment' , 'noun' ) . '' ) ;   //this tag output complete comment form comment_form ( $args ) ;

Hiển comment form wordpress cung cấp hàm comment_form. Các thiết lập cài đặt hiển thị cho form như nhãn nút submit, tiêu đề reply, tiêu đề form..được truyền vào hàm. Tuy nhiên bạn thể tách riêng cho phép sửa từng giá trị thông qua sử dụng filters. Xem bài tùy biến nội dung comment form trong wordpress.

– Hiển thị 3 fields mặc định của form bình luận là ‘url’, ’email’, ‘author’

   $commenter     =   wp_get_current_commenter  (    )    ;     $req     =   get_option  (     'require_name_email'     )    ;     $aria_req     =     (     $req   ?   " aria-required='true'"     :     ''     )    ;     $fields     =     array    (       'author'     =>      ' 

. __ ( 'Name' , 'domainreference' ) . ' ' . ( $req ? ' * ' : '' ) . ' . esc_attr ( $commenter [ 'comment_author' ] ) . '" size="30"' . $aria_req . ' /> ' ,   'email' => '

. __ ( 'Email' , 'domainreference' ) . ' ' . ( $req ? ' * ' : '' ) . ' . esc_attr ( $commenter [ 'comment_author_email' ] ) . '" size="30"' . $aria_req . ' /> ' ,   'url' => '

. __ ( 'Website' , 'domainreference' ) . '' . ' . esc_attr ( $commenter [ 'comment_author_url' ] ) . '" size="30" /> ' , ) ;

Ngoài ra cũng đều có thể custom fields thêm 1 vài trường theo nhu cầu của bạn.

Hiển thị nội dung các comments

Hàm callback hiển thị danh sách comments. Đây là code mẫu của theme twentyten functions.php

   comment_type ) : case '' : ?>   <li    <?php comment_class  (    )    ;     ?>    > ">   
<?php comment_ID ( ) ; ?> ">
< ?php printf( __( '%s says:', 'twentyten' ), sprintf( ' %s ', get_comment_author_link() ) ); ?>
comment_approved == '0' ) : ?>
 
<?php echo esc_url ( get_comment_link ( $comment -> comment_ID ) ) ; ?> ">
 
 
$depth, 'max_depth' => $args['max_depth'] ) ) ); ?>
 
  • Using hooks

    Comment form có 3 fields mặc định là name, email, website URL. Nếu user đã login thì sẽ không nhìn thấy những fields này và chỉ hiện duy nhất textarea để nhập nội dung comment. Tại sao vậy? vì những fields kia được lấy từ tin tức của user không cho người sửa tin tức đó. Đoạn code dưới đây, mình tạo lại fields mặc định bằng phương pháp khái niệm lại giá trị field trong mảng $fields và thêm trường phone. Thêm hoặc xóa comments field bởi filter comment_form_default_fields chèn đoạn code sau vào functions.php

     add_filter  (    'comment_form_default_fields'    ,     'custom_fields'    )    ;     function   custom_fields  (    $fields    )     {       $commenter     =   wp_get_current_commenter  (    )    ;     $req     =   get_option  (     'require_name_email'     )    ;     $aria_req     =     (     $req   ?   " aria-required='true'"     :     ''     )    ;       $fields    [     'author'     ]     =     ' 

    '

    . ' . __ ( 'Name' ) . '' . ( $req ? ' * ' : '' ) . ' . esc_attr ( $commenter [ 'comment_author' ] ) . '" size="30" tabindex="1"' . $aria_req . ' /> ' ;   $fields [ 'email' ] = '

    '

    . ' . __ ( 'Email' ) . '' . ( $req ? ' * ' : '' ) . ' . esc_attr ( $commenter [ 'comment_author_email' ] ) . '" size="30" tabindex="2"' . $aria_req . ' /> ' ;   $fields [ 'url' ] = '

    '

    . ' . __ ( 'Website' ) . '' . ' . esc_attr ( $commenter [ 'comment_author_url' ] ) . '" size="30" tabindex="3" /> ' ;   $fields [ 'phone' ] = '

    '

    . ' . __ ( 'Phone' ) . '' . ' ' ;   return $fields ; }

    Chú ý : việc khái niệm lại fields mặc định nếu bạn thấy cần phải có sửa lại HTML vì các trường này đã được định nghĩa rồi, bạn cũng đều có thể bỏ qua.

    Bước tiếp theo, Chúng ta sẽ thêm danh sách radio để đánh giá bài viết. Đây không phải là fields mặc định do vậy khi user logined thì fields này vẫn sẽ hiển thị. Để thực hiện được điều đó ta kết hợp dùng 2 action
    comment_form_logged_in_after ” : không kích hoạt nếu user chưa hiện diện phiên làm việc (not logged).
    và “ comment_form_after_fields ” : hiển thị những fields cho khách truy cập.

       // Add fields after default fields above the comment box, always visible     add_action  (     'comment_form_logged_in_after'    ,     'additional_fields'     )    ;   add_action  (     'comment_form_after_fields'    ,     'additional_fields'     )    ;       function   additional_fields   (    )     {     echo     ' 

    '

    . ' . __ ( 'Comment Title' ) . '' . ' ' ;   echo '

    '

    . ' . __ ( 'Rating' ) . ' * ' ;   //Current rating scale is 1 to 5. If you want the scale to be 1 to 10, then set the value of $i to 10. for ( $i = 1 ; $i < = 5 ; $i ++ ) echo ' . $i . '"/> ' . $i . ' ' ;   echo '' ;   }

    Lưu thông tin custom fields vào nội dung comment, bằng phương pháp thêm hook comment_post . Note: các fields này không tự động lưu và trường không được để trống thì mới nên lưu vào database,
    Đây là cú pháp của hàm add_comment_meta :

     add_comment_meta  (    $comment_id    ,     $meta_key    ,     $meta_value    ,     $unique     =     false    )   

    Trong đó:

    • $comment_id : comment ID lấy từ tham số cung cấp bởi WordPress.
    • $meta_key : tính chất “name” của input fields đã thiết lập trước đó. Trong ví dụ này là phone, tiêu đề comment và rating.

    Chèn vào code dưới đây:

       // Save the comment meta data along with comment     add_action  (     'comment_post'    ,     'save_comment_meta_data'     )    ;     function   save_comment_meta_data  (     $comment_id     )     {     if     (     (     isset    (     $_POST    [    'phone'    ]     )     )     &&     (     $_POST    [    'phone'    ]     !=     ''    )     )     //loại bỏ html tag trong nội dung POST     $phone     =   wp_filter_nohtml_kses  (    $_POST    [    'phone'    ]    )    ;   add_comment_meta  (     $comment_id    ,     'phone'    ,     $phone     )    ;       if     (     (     isset    (     $_POST    [    'title'    ]     )     )     &&     (     $_POST    [    'title'    ]     !=     ''    )     )     $title     =   wp_filter_nohtml_kses  (    $_POST    [    'title'    ]    )    ;   add_comment_meta  (     $comment_id    ,     'title'    ,     $title     )    ;       if     (     (     isset    (     $_POST    [    'rating'    ]     )     )     &&     (     $_POST    [    'rating'    ]     !=     ''    )     )     $rating     =   wp_filter_nohtml_kses  (    $_POST    [    'rating'    ]    )    ;   add_comment_meta  (     $comment_id    ,     'rating'    ,     $rating     )    ;     }   

    Đánh dấu * cho trường rating tức trường này không được bỏ trống. Chúng ta có filter kiểm tra dữ liệu trước lúc lưu comment của người sử dụng preprocess_comment .

       // Add the filter to check whether the comment meta data has been filled     add_filter  (     'preprocess_comment'    ,     'verify_comment_meta_data'     )    ;     function   verify_comment_meta_data  (     $commentdata     )     {     if     (     !     isset    (     $_POST    [    'rating'    ]     )     )   wp_die  (   __  (     'Error: You did not add a rating. Hit the Back button on your Web browser and resubmit your comment with a rating.'     )     )    ;     return     $commentdata    ;     }   

    Sửa đổi hiển thị nội dung các comment, chúng ta sử dụng filter comment_text . Để phân biệt, Code này bạn để vào comments.php thay vì thường đặt vào functions.php nếu bạn làm việc với theme.
    Hàm get_comment_meta để lấy meta fields của comment hiện tại. Ở đây ta lấy tiêu đề comment title nếu có hoặc lấy rating.

       // Add the comment meta (saved earlier) to the comment text     // You can also output the comment meta values directly to the comments template      add_filter  (     'comment_text'    ,     'modify_comment'    )    ;     function   modify_comment  (     $text     )    {       $plugin_url_path     =   WP_PLUGIN_URL  ;       if    (     $commenttitle     =   get_comment_meta  (   get_comment_ID  (    )    ,     'title'    ,     true     )     )     {     $commenttitle     =     '  '       .   esc_attr  (     $commenttitle     )     .     ' 
    '
    ; $text = $commenttitle . $text ; }   if ( $commentrating = get_comment_meta ( get_comment_ID ( ) , 'rating' , true ) ) { $commentrating = '

    .

    $plugin_url_path . '/ExtendComment/images/' . $commentrating . 'star.gif"/>
    Rating: '
    . $commentrating . ' / 5' ; $text = $text . $commentrating ; return $text ; } else { return $text ; } }

    Về phần backend wordpress admin, các meta fields mới vừa tạo phía trên là rating cần được quản lý. Cũng giống như quản lý bài viết của custom post type, chúng ta có hàm thêm form fields.

     add_meta_box  (     $id    ,     $title    ,     $callback    ,     $post_type    ,     $context    ,     $priority    ,     $callback_args     )    ;   

    – Sử dụng hàm kiểm tra bảo mật wp_nonce_field cho việc thêm/sửa comment ở phần quản trị.

       comment_ID, 'phone', true ); $title = get_comment_meta( $comment-> comment_ID, 'title', true ); $rating = get_comment_meta( $comment-> comment_ID, 'rating', true ); wp_nonce_field( 'extend_comment_update', 'extend_comment_update', false ); ?>   

    <input type="text" name="phone" value=" <?php echo esc_attr ( $phone ) ; ? /> " st0"> " />

    <label for=" title "> '. $i .' '; } ?>  

    Như phần trước đã đề cập, chúng ta có code lưu comment ở form người sử dụng truy cập vào website (frontend). Ở backend cũng sử lý giống như vậy, chúng ta sử dụng hook edit_comment . Chú ý: hàm wp_verify_nonce để xác nhận chuỗi bảo mật được ra đời ở form fields vừa tạo ở trên.

       // Update comment meta data from comment editing screen      add_action  (     'edit_comment'    ,     'extend_comment_edit_metafields'     )    ;       function   extend_comment_edit_metafields  (     $comment_id     )     {     if    (     !     isset    (     $_POST    [    'extend_comment_update'    ]     )     ||     !   wp_verify_nonce  (     $_POST    [    'extend_comment_update'    ]    ,     'extend_comment_update'     )     )     return    ;       if     (     (     isset    (     $_POST    [    'phone'    ]     )     )     &&     (     $_POST    [    'phone'    ]     !=     ''    )     )     :     $phone     =   wp_filter_nohtml_kses  (    $_POST    [    'phone'    ]    )    ;   update_comment_meta  (     $comment_id    ,     'phone'    ,     $phone     )    ;     else     :   delete_comment_meta  (     $comment_id    ,     'phone'    )    ;     endif    ;       if     (     (     isset    (     $_POST    [    'title'    ]     )     )     &&     (     $_POST    [    'title'    ]     !=     ''    )     )    :     $title     =   wp_filter_nohtml_kses  (    $_POST    [    'title'    ]    )    ;   update_comment_meta  (     $comment_id    ,     'title'    ,     $title     )    ;     else     :   delete_comment_meta  (     $comment_id    ,     'title'    )    ;     endif    ;       if     (     (     isset    (     $_POST    [    'rating'    ]     )     )     &&     (     $_POST    [    'rating'    ]     !=     ''    )     )    :     $rating     =   wp_filter_nohtml_kses  (    $_POST    [    'rating'    ]    )    ;   update_comment_meta  (     $comment_id    ,     'rating'    ,     $rating     )    ;     else     :   delete_comment_meta  (     $comment_id    ,     'rating'    )    ;     endif    ;       }   

    Chúc bạn thành công.

    Bài viết Chèn comment form trong wordpress – tùy biến comment form từ a-z được tổng hợp và biên tập bởi: dinhthuanit.com. Mọi ý kiến đóng góp và phản hồi vui lòng gửi Liên Hệ cho dinhthuanit.com để điều chỉnh. dinhthuanit.com xin cảm ơn.

    Bài Viết Liên Quan


    Bài Viết Khác


    Quảng cáo
    Ads_ngang