wp_insert_comment()WP 2.0.0

Inserts/adds a comment into the database.

IMPORTANT! This function is expecting escaped data to be passed to it! It means that if we pass custom data (data not from the $_POST request), we need to sanitize the data with wp_slash() before passing it to this function.

Consider using wp_new_comment(), which automatically sanitizes and validates the comment data before calling this function to insert the comment into the database.

Hooks from the function

Return

Int|false. The new comment's ID on success, false on failure.

Usage

wp_insert_comment( $commentdata );
$commentdata(array) (required)

Array of arguments for inserting a new comment.

  • comment_agent(string)
    The HTTP user agent of the $comment_author when the comment was submitted.
    Default: ''

  • comment_approved(int|string)
    Whether the comment has been approved.
    Default: 1

  • comment_author(string)
    The name of the author of the comment.
    Default: ''

  • comment_author_email(string)
    The email address of the $comment_author.
    Default: ''

  • comment_author_IP(string)
    The IP address of the $comment_author.
    Default: ''

  • comment_author_url(string)
    The URL address of the $comment_author.
    Default: ''

  • comment_content(string)
    The content of the comment.
    Default: ''

  • comment_date(string)
    The date the comment was submitted. To set the date manually, $comment_date_gmt must also be specified.
    Default: current time

  • comment_date_gmt(string)
    The date the comment was submitted in the GMT timezone.
    Default: $comment_date in the site's GMT timezone

  • comment_karma(int)
    The karma of the comment.

  • comment_parent(int)
    ID of this comment's parent, if any.

  • comment_post_ID(int)
    ID of the post that relates to the comment, if any.

  • comment_type(string)
    Comment type.
    Default: 'comment'

  • comment_meta(array)
    Optional. Array of key/value pairs to be stored in commentmeta for the new comment.

  • user_id(int)
    ID of the user who submitted the comment.

Examples

0

#1 Add new custom comment

$data = [
	'comment_post_ID'      => 1,
	'comment_author'       => 'admin',
	'comment_author_email' => '[email protected]',
	'comment_author_url'   => 'http://',
	'comment_content'      => 'content here',
	'comment_type'         => '',
	'comment_parent'       => 0,
	'user_id'              => 1,
	'comment_author_IP'    => '127.0.0.1',
	'comment_agent'        => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)',
	'comment_date'         => null, // current_time('mysql')
	'comment_approved'     => 1,
];

wp_insert_comment( wp_slash($data) );

Notes

  • Global. wpdb. $wpdb WordPress database abstraction object.

Changelog

Since 2.0.0 Introduced.
Since 4.4.0 Introduced the $comment_meta argument.
Since 5.5.0 Default value for $comment_type argument changed to comment.

wp_insert_comment() code WP 6.4.3

function wp_insert_comment( $commentdata ) {
	global $wpdb;

	$data = wp_unslash( $commentdata );

	$comment_author       = ! isset( $data['comment_author'] ) ? '' : $data['comment_author'];
	$comment_author_email = ! isset( $data['comment_author_email'] ) ? '' : $data['comment_author_email'];
	$comment_author_url   = ! isset( $data['comment_author_url'] ) ? '' : $data['comment_author_url'];
	$comment_author_ip    = ! isset( $data['comment_author_IP'] ) ? '' : $data['comment_author_IP'];

	$comment_date     = ! isset( $data['comment_date'] ) ? current_time( 'mysql' ) : $data['comment_date'];
	$comment_date_gmt = ! isset( $data['comment_date_gmt'] ) ? get_gmt_from_date( $comment_date ) : $data['comment_date_gmt'];

	$comment_post_id  = ! isset( $data['comment_post_ID'] ) ? 0 : $data['comment_post_ID'];
	$comment_content  = ! isset( $data['comment_content'] ) ? '' : $data['comment_content'];
	$comment_karma    = ! isset( $data['comment_karma'] ) ? 0 : $data['comment_karma'];
	$comment_approved = ! isset( $data['comment_approved'] ) ? 1 : $data['comment_approved'];
	$comment_agent    = ! isset( $data['comment_agent'] ) ? '' : $data['comment_agent'];
	$comment_type     = empty( $data['comment_type'] ) ? 'comment' : $data['comment_type'];
	$comment_parent   = ! isset( $data['comment_parent'] ) ? 0 : $data['comment_parent'];

	$user_id = ! isset( $data['user_id'] ) ? 0 : $data['user_id'];

	$compacted = array(
		'comment_post_ID'   => $comment_post_id,
		'comment_author_IP' => $comment_author_ip,
	);

	$compacted += compact(
		'comment_author',
		'comment_author_email',
		'comment_author_url',
		'comment_date',
		'comment_date_gmt',
		'comment_content',
		'comment_karma',
		'comment_approved',
		'comment_agent',
		'comment_type',
		'comment_parent',
		'user_id'
	);

	if ( ! $wpdb->insert( $wpdb->comments, $compacted ) ) {
		return false;
	}

	$id = (int) $wpdb->insert_id;

	if ( 1 == $comment_approved ) {
		wp_update_comment_count( $comment_post_id );

		$data = array();
		foreach ( array( 'server', 'gmt', 'blog' ) as $timezone ) {
			$data[] = "lastcommentmodified:$timezone";
		}
		wp_cache_delete_multiple( $data, 'timeinfo' );
	}

	clean_comment_cache( $id );

	$comment = get_comment( $id );

	// If metadata is provided, store it.
	if ( isset( $commentdata['comment_meta'] ) && is_array( $commentdata['comment_meta'] ) ) {
		foreach ( $commentdata['comment_meta'] as $meta_key => $meta_value ) {
			add_comment_meta( $comment->comment_ID, $meta_key, $meta_value, true );
		}
	}

	/**
	 * Fires immediately after a comment is inserted into the database.
	 *
	 * @since 2.8.0
	 *
	 * @param int        $id      The comment ID.
	 * @param WP_Comment $comment Comment object.
	 */
	do_action( 'wp_insert_comment', $id, $comment );

	return $id;
}