Обновление количества комментариев в WordPress: функция `wp_update_comment_count()`

Обновление количества комментариев в 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 и как правильно использовать соответствующую функцию.

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *