Обновление количества комментариев в WordPress
Функция WP_UPDATE_COMMENT_COUNT()
Функция wp_update_comment_count() позволяет обновить количество комментариев для определенного поста в WordPress.
Как это работает
При вызове функции, если параметр $do_deferred установлен в значение false (что происходит по умолчанию), и комментарии установлены как отложенные, идентификатор поста (post_id) добавляется в очередь для последующего обновления. Это значит, что обновление произойдет позже и только один раз для каждого идентификатора поста.
Если комментарии не настроены как отложенные, количество комментариев обновляется сразу. В случае, если вы хотите обновить сразу все посты, которые были отложены, установите $do_deferred в значение true.
Функция использует внутреннюю функцию wp_update_comment_count_now() для фактического обновления количества комментариев.
Возврат значения
Функция возвращает:
true– если обновление прошло успешно.false– если произошла ошибка или пост с указанным ID не существует.
Использование
Функция вызывается следующим образом:
wp_update_comment_count( $post_id, $do_deferred );
Параметры
-
$post_id (int|null) — обязательный параметр. Это идентификатор поста, количество комментариев которого нужно обновить.
-
$do_deferred (true|false) — нужно ли обновлять ранее отложенные посты? По умолчанию
false.
Примеры использования
Пример 1: Обновление количества комментариев
Предположим, мы удалили комментарии из базы данных для поста с ID 3. Теперь нам нужно обновить количество комментариев для этого поста:
$post_id = 3;
wp_update_comment_count( $post_id );
Пример 2: Использование в пользовательской функции
Если у вас есть своя функция для добавления комментариев в базу данных, вам нужно будет вызывать wp_update_comment_count() после добавления нового комментария, чтобы обновить общее количество комментариев. Вот пример такой функции:
/**
* Обновляет или добавляет комментарий.
*
* @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_now() может возвращаться false, если в ней что-то пойдет не так.
Изменения
Функция wp_update_comment_count() была введена в версии 2.1.0 и с тех пор продолжает использоваться в WordPress, обеспечивая эффективное обновление количества комментариев.
Эта статья предназначена для новичков, чтобы помочь понять, как работает обновление количества комментариев в WordPress и как правильно использовать соответствующую функцию.