Функция wp_update_comment_count()
обновляет количество комментариев для указанного поста или страницы в базе данных WordPress. Это может быть полезно, если количество комментариев стало некорректным из-за операций вне стандартных методов WordPress.
wp_update_comment_count( int|null $post_id, bool $do_deferred = false ): bool|void
Параметры
$post_id
(int|null): ID поста или страницы, для которого нужно обновить количество комментариев. Еслиnull
, обновление не будет выполнено.$do_deferred
(bool): Опциональный параметр, указывающий, нужно ли обработать ранее отложенные обновления количества комментариев. По умолчанию:false
.
Возвращаемое значение
true
: Если обновление количества комментариев прошло успешно.false
: Если обновление не удалось или пост с указанным ID не существует.null
: Если ID поста не указан.
Примечания
- Если параметр
$do_deferred
установлен вfalse
(по умолчанию) и для комментариев установлено отложенное обновление, ID поста будет добавлен в очередь и обновление произойдет позже. Один и тот же пост будет обновляться только один раз. - Если
$do_deferred
установлен вtrue
, будут обработаны все ранее отложенные ID постов вместе с текущим$post_id
.
Пример 1: Обновление количества комментариев после удаления их напрямую из базы данных
// ID поста, для которого нужно обновить количество комментариев
$post_id = 3;
// Обновляем количество комментариев для указанного поста
wp_update_comment_count( $post_id );
Пример 2: Обновление количества комментариев после добавления комментария вручную
/**
* Обновляет или вставляет комментарий.
*
* @param \WP_Comment $comment Объект комментария.
*/
function upsert_comment( $comment ) {
global $wpdb;
$comment = $comment->to_array();
// Фильтрация полей в таблице комментариев.
$comment_fields_whitelist = array(
'comment_ID',
'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',
);
foreach ( $comment as $key => $value ) {
if ( ! in_array( $key, $comment_fields_whitelist, true ) ) {
unset( $comment[ $key ] );
}
}
$exists = $wpdb->get_var(
$wpdb->prepare(
"SELECT EXISTS( SELECT 1 FROM $wpdb->comments WHERE comment_ID = %d )",
$comment['comment_ID']
)
);
if ( $exists ) {
$wpdb->update( $wpdb->comments, $comment, array( 'comment_ID' => $comment['comment_ID'] ) );
} else {
$wpdb->insert( $wpdb->comments, $comment );
}
// Очистка кэша комментария.
clean_comment_cache( $comment['comment_ID'] );
// Обновляем данные о количестве комментариев у записи
wp_update_comment_count( $comment['comment_post_ID'] );
}
Заключение
Функция wp_update_comment_count()
обновляет количество комментариев для заданного поста или страницы. Она поддерживает отложенное обновление, что позволяет эффективно обрабатывать большие объемы данных. Используйте эту функцию для корректировки количества комментариев после прямого изменения базы данных или при нестандартном добавлении комментариев.