# WP_UPDATE_COMMENT() │ WP 2.0.0
Функция wp_update_comment() обновляет существующий комментарий в базе данных WordPress. Эта функция проверяет правильность полей и применяет фильтры перед обновлением комментария.
## Возврат Значений
Функция возвращает:
- **1**, если комментарий был успешно обновлён.
- **0**, если комментарий не был обновлён.
- **false** или объект **WP_Error** в случае ошибки.
## Использование
Чтобы обновить комментарий, используйте следующий синтаксис:
```php
wp_update_comment( $commentarr, $wp_error );
Параметры
- $commentarr (array) (обязательный) — Массив с информацией о комментарии.
- $wp_error (bool) — Указывает, следует ли возвращать объект WP_Error в случае неудачи. По умолчанию: false.
Пример
Обновление текста комментария с ID 37:
// данные комментария
$commentarr = [
'comment_ID' => 37,
'comment_content' => 'Вот новый текст комментария',
];
// обновление данных в базе данных
wp_update_comment( $commentarr );
Поля, которые можно обновить:
Вы можете обновить следующие поля:
[comment_post_ID]- ID поста[comment_author]- Имя автора комментария[comment_author_email]- Эл. почта автора[comment_author_url]- URL автора[comment_author_IP]- IP-адрес автора[comment_date]- Дата комментария[comment_date_gmt]- Дата комментария в GMT[comment_content]- Содержимое комментария[comment_karma]- Карма комментария[comment_approved]- Статус комментария (одобрен/не одобрен)[comment_agent]- Агент пользователя (браузер)[comment_type]- Тип комментария[comment_parent]- ID родительского комментария[user_id]- ID пользователя
Примечания
- Глобальная переменная:
$wpdb— Объект абстракции базы данных WordPress.
Изменения
Функция была представлена в версии 2.0.0. В версии 4.9.0 добавлена возможность обновления метаданных комментариев. В версии 5.5.0 был добавлен параметр $wp_error, а также изменены значения, возвращаемые для невалидных ID комментариев или постов.
Код Функции
Вот как выглядит функция wp_update_comment() в файле wp-includes/comment.php:
function wp_update_comment( $commentarr, $wp_error = false ) {
global $wpdb;
// Получаем все оригинальные поля комментария.
$comment = get_comment( $commentarr['comment_ID'], ARRAY_A );
if ( empty( $comment ) ) {
if ( $wp_error ) {
return new WP_Error( 'invalid_comment_id', __( 'Некорректный ID комментария.' ) );
} else {
return false;
}
}
// Проверяем, валиден ли указанный ID поста.
if ( ! empty( $commentarr['comment_post_ID'] ) && ! get_post( $commentarr['comment_post_ID'] ) ) {
if ( $wp_error ) {
return new WP_Error( 'invalid_post_id', __( 'Некорректный 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' );
}
// Экранируем данные, полученные из базы.
$comment = wp_slash( $comment );
$old_status = $comment['comment_approved'];
// Объединяем старые и новые поля, при этом новые поля п��резаписывают старые.
$commentarr = array_merge( $comment, $commentarr );
$commentarr = wp_filter_comment( $commentarr );
if ( $filter_comment ) {
remove_filter( 'pre_comment_content', 'wp_filter_kses' );
}
// Извлекаем объединённый массив.
$data = wp_unslash( $commentarr );
$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'];
$data = apply_filters( 'wp_update_comment_data', $data, $comment, $commentarr );
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', __( 'Не удалось обновить комментарий в базе данных.' ), $wpdb->last_error );
} else {
return false;
}
}
// Если предоставлены метаданные, сохраняем их.
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 );
do_action( 'edit_comment', $comment_id, $data );
$comment = get_comment( $comment_id );
wp_transition_comment_status( $comment->comment_approved, $old_status, $comment );
return $result;
}
Связанные Функции
Также существуют и другие функции, связанные с комментариями, такие как:
cancel_comment_reply_link()get_comment()wp_insert_comment()wp_delete_comment()
Эти функции помогут вам более гибко управлять комментариями в WordPress.