comment_form and comments_template and wp_list_comments in WordPress

I invested a good deal of time today customizing a comment form in a BuddyPress child theme.  My goals were to:

  1. Add a new field called, “Organization”
  2. Remove the “URL” field
  3. Remove the “Comment” text that appears above the corresponding textarea

The biggest learning for me was figuring out how comment_form, comments_template, and wp_list_comments fit together.

I learned a lot from Otto’s article on the subject, but that article didn’t address everything I needed to accomplish.  The following is what I did to accomplish the aforementioned goals.

In functions.php, I have the following:

// Change "Website" to "Organization" on the comment form.
function add_organization_to_comments($fields) {
    // New fields
    $fields['organization'] = '

'; $fields['author'] = '

' . ' ' . ( $req ? '*' : '' ) . '

'; $fields['email'] = ''; // Remove unwanted default fields unset($fields['url']); return $fields; } // save extra fields in database add_action( 'comment_post', 'save_comment' ); function save_comment($comment_id) { add_comment_meta( $comment_id, 'organization', esc_attr($_POST['organization']), true ); }

That’s it!

Tomorrow I will share how I displayed the “organization” field in the “comments” panel of the WordPress admin screen.


Toby Cryns

Toby Cryns is a freelance CTO, expert WordPress consultant, and teacher.

He offers free advice to improve your freelance biz.

He also publishes small droppings every now and then to and

Follow Toby's contributions on Github and


  1. Otto on July 27, 2011 at 1:03 am

    Danger Will Robinson!

    This code leaves your site open to a XSS attack through the comments form. I highly recommend filtering the POSTed organization field.

  2. toby on August 8, 2011 at 3:42 am

    @Otto – Thanks for the heads-up there!

    All, I have incorporated Otto’s suggestion and added the esc_attr() function to the POSTs in the code above.