# wp_update_comment()

URL: https://chugunov.pro/api-wordpress/functions/wp_update_comment/
Проверено на WordPress 6.9, обновлено 06.08.2026.
Источник: независимый русскоязычный справочник chugunov.pro. Не является официальной документацией WordPress.

Тип: функция.
Появился в версии: 2.0.0.

## Сигнатура

```php
wp_update_comment( array $commentarr, bool $wp_error = false ): int|false|WP_Error
```

## Описание

Фильтрует комментарий и проверяет корректность некоторых полей перед обновлением.

## Параметры

- `$commentarr` `array` — обязательный. Содержит информацию о комментарии.
- `$wp_error` `bool` — необязательный, по умолчанию `false`. Возвращать ли WP_Error в случае сбоя.

## Возвращаемое значение

`int|false|WP_Error` — WP_Error

## Исходный код

Файл: `wp-includes/comment.php:2610`

```php
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( $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;
}
```

## История изменений

- 5.5.0 — The return values for an invalid comment or post ID were changed to false instead of 0.
- 4.9.0 — Add updating comment meta during comment update.
- 2.0.0 — Introduced.

## Связанные

Использует: [`user_can`](https://chugunov.pro/api-wordpress/functions/user_can/), [`get_gmt_from_date`](https://chugunov.pro/api-wordpress/functions/get_gmt_from_date/), [`wp_array_slice_assoc`](https://chugunov.pro/api-wordpress/functions/wp_array_slice_assoc/), [`has_filter`](https://chugunov.pro/api-wordpress/functions/has_filter/), `wpdb::update`, [`clean_comment_cache`](https://chugunov.pro/api-wordpress/functions/clean_comment_cache/), [`wp_update_comment_count`](https://chugunov.pro/api-wordpress/functions/wp_update_comment_count/), [`wp_filter_comment`](https://chugunov.pro/api-wordpress/functions/wp_filter_comment/), [`wp_transition_comment_status`](https://chugunov.pro/api-wordpress/functions/wp_transition_comment_status/), [`update_comment_meta`](https://chugunov.pro/api-wordpress/functions/update_comment_meta/), [`__`](https://chugunov.pro/api-wordpress/functions/__/), [`wp_slash`](https://chugunov.pro/api-wordpress/functions/wp_slash/), [`wp_unslash`](https://chugunov.pro/api-wordpress/functions/wp_unslash/), [`add_filter`](https://chugunov.pro/api-wordpress/functions/add_filter/), [`remove_filter`](https://chugunov.pro/api-wordpress/functions/remove_filter/), [`apply_filters`](https://chugunov.pro/api-wordpress/functions/apply_filters/), [`do_action`](https://chugunov.pro/api-wordpress/functions/do_action/), [`get_post`](https://chugunov.pro/api-wordpress/functions/get_post/), [`get_comment`](https://chugunov.pro/api-wordpress/functions/get_comment/), [`is_wp_error`](https://chugunov.pro/api-wordpress/functions/is_wp_error/), `WP_Error::__construct`.
Используется в: `WP_REST_Comments_Controller::update_item`, [`edit_comment`](https://chugunov.pro/api-wordpress/functions/edit_comment/), `wp_xmlrpc_server::wp_editComment`.

Оригинал в официальной документации: https://developer.wordpress.org/reference/functions/wp_update_comment/
