wp_update_comment() │ WP 2.0.0
Updates an existing comment in the Database.
Before updating, the function checks the correct filling of each comment field. If any fields were not specified, they will be supplemented from the existing field in the DB.
The function expects escaped data. That is, the passed data is processed by wp_unslash() by the function itself, so there is no need to remove slashes from the received value of $_POST request in advance...
Returns
Int|false|WP_Error.
1 - on successful update.
false or WP_Error - on failure (depends on the $wp_error parameter).
Usage
<?php wp_update_comment( $commentarr, $wp_error ) ?>
$commentarr(array) (required)
Array containing information about the comment that needs to be updated. The array keys are the fields of the table that will be updated. The comment_ID field must be specified.
$wp_error(true/false) (WP 5.5)
Whether to return a WP_Error object on failure.
Default: false
Examples
#1 Example of how you can update the text of a comment 37:
// comment data
$commentarr = [
'comment_ID' => 37,
'comment_content' => 'Here is the new comment text',
];
// update data in the database
wp_update_comment( $commentarr );
The fields that can be updated are as follows:
[comment_post_ID] => 356
[comment_author] => shin
[comment_author_email] => [email protected]
[comment_author_url] =>
[comment_author_IP] => 94.181.201.110
[comment_date] => 2011-08-16 00:45:37
[comment_date_gmt] => 2011-08-15 20:45:37
[comment_content] => thank you very much!
[comment_karma] => 0
[comment_approved] => 1
[comment_agent] => Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 ...
[comment_type] =>
[comment_parent] => 2036
[user_id] => 0
Add Your Own Example
Notes
Global. wpdb. $wpdb WordPress database abstraction object.
Changelog
Since 2.0.0
Introduced.
Since 4.9.0
Add updating comment meta during comment update.
Since 5.5.0
The $wp_error parameter was added.
Since 5.5.0
The return values for an invalid comment or post ID were changed to false instead of 0.
wp_update_comment() wp update comment code
WP 6.9
function wp_update_comment( $commentarr, $wp_error = false ) {
global $wpdb;
// First, get all of the original fields.
$comment = get_comment( $commentarr['comment_ID'], ARRAY_A );
if ( empty( $comment ) ) {
if ( $wp_error ) {
return new WP_Error( 'invalid_comment_id', __( 'Invalid comment ID.' ) );
} else {
return false;
}
}
// Make sure that the comment post ID is valid (if specified).
if ( ! empty( $commentarr['comment_post_ID'] ) && ! get_post( $commentarr['comment_post_ID'] ) ) {
if ( $wp_error ) {
return new WP_Error( 'invalid_post_id', __( 'Invalid post ID.' ) );
} else {
return false;
}
}
$filter_comment = false;
if ( ! has_filter( 'pre_comment_content', 'wp_filter_kses' ) ) {
$filter_comment = ! user_can( isset( $comment['user_id'] ) ? $comment['user_id'] : 0, 'unfiltered_html' );
}
if ( $filter_comment ) {
add_filter( 'pre_comment_content', 'wp_filter_kses' );
}
// Escape data pulled from DB.
$comment = wp_slash( $comment );
$old_status = $comment['comment_approved'];
// Merge old and new fields with new fields overwriting old ones.
$commentarr = array_merge( $comment, $commentarr );
$commentarr = wp_filter_comment( $commentarr );
if ( $filter_comment ) {
remove_filter( 'pre_comment_content', 'wp_filter_kses' );
}
// Now extract the merged array.
$data = wp_unslash( $commentarr );
/**
* Filters the comment content before it is updated in the database.
*
* @since 1.5.0
*
* @param string $comment_content The comment data.
*/
$data['comment_content'] = apply_filters( 'comment_save_pre', $data['comment_content'] );
$data['comment_date_gmt'] = get_gmt_from_date( $data['comment_date'] );
if ( ! isset( $data['comment_approved'] ) ) {
$data['comment_approved'] = 1;
} elseif ( 'hold' === $data['comment_approved'] ) {
$data['comment_approved'] = 0;
} elseif ( 'approve' === $data['comment_approved'] ) {
$data['comment_approved'] = 1;
}
$comment_id = $data['comment_ID'];
$comment_post_id = $data['comment_post_ID'];
/**
* Filters the comment data immediately before it is updated in the database.
*
* Note: data being passed to the filter is already unslashed.
*
* @since 4.7.0
* @since 5.5.0 Returning a WP_Error value from the filter will short-circuit comment update
* and allow skipping further processing.
*
* @param array|WP_Error $data The new, processed comment data, or WP_Error.
* @param array $comment The old, unslashed comment data.
* @param array $commentarr The new, raw comment data.
*/
$data = apply_filters( 'wp_update_comment_data', $data, $comment, $commentarr );
// Do not carry on on failure.
if ( is_wp_error( $data ) ) {
if ( $wp_error ) {
return $data;
} else {
return false;
}
}
$keys = array(
'comment_post_ID',
'comment_author',
'comment_author_email',
'comment_author_url',
'comment_author_IP',
'comment_date',
'comment_date_gmt',
'comment_content',
'comment_karma',
'comment_approved',
'comment_agent',
'comment_type',
'comment_parent',
'user_id',
);
$data = wp_array_slice_assoc( $data, $keys );
$result = $wpdb->update( $wpdb->comments, $data, array( 'comment_ID' => $comment_id ) );
if ( false === $result ) {
if ( $wp_error ) {
return new WP_Error( 'db_update_error', __( 'Could not update comment in the database.' ), $wpdb->last_error );
} else {
return false;
}
}
// If metadata is provided, store it.
if ( isset( $commentarr['comment_meta'] ) && is_array( $commentarr['comment_meta'] ) ) {
foreach ( $commentarr['comment_meta'] as $meta_key => $meta_value ) {
update_comment_meta( $comment_id, $meta_key, $meta_value );
}
}
clean_comment_cache( $comment_id );
wp_update_comment_count( $comment_post_id );
/**
* Fires immediately after a comment is updated in the database.
*
* The hook also fires immediately before comment status transition hooks are fired.
*
* @since 1.2.0
* @since 4.6.0 Added the `$data` parameter.
*
* @param int $comment_id The comment ID.
* @param array $data Comment data.
*/
do_action( 'edit_comment', $comment_id, $data );
$comment = get_comment( $comment_id );
wp_transition_comment_status( $comment->comment_approved, $old_status, $comment );
return $result;
}
Related Functions