wp_update_comment_count()WP 2.1.0

Обновляет количество комментариев у указанной записи (поста).

Работает на основе: wp_update_comment_count_now()

Хуков нет.

Возвращает

true|false|null. true, если удалось обновить число комментарий. false в противном случае.

Использование

wp_update_comment_count( $post_id, $do_deferred );
$post_id(число) (обязательный)
ID поста (записи).
$do_deferred(логический)

Это внутренний параметр, которым нужно управлять через функцию wp_defer_comment_counting(). Он нужен для ускорения импорта большого количества комментариев.

Указывает нужно ли запустить обновления количества комментириев поста, которые были отложены ранее.

Обновления не происходит, если комментарий находится на модерации.

Если параметр $do_deferred установлен в false (по умолчанию) и комментарий находится на модерации, ID поста ($post_id) будет добавлен в очередь для будущего обновления. Смотрите wp_defer_comment_counting().

По умолчанию: false

Примеры

0

#1 Простой пример использования

Например, мы удалили комментарии из БД у записи 3. Сделали мы это прямым запросом в БД.
Теперь нужно обновить число - кол-во комментариев записи:

$post_id = 3;
wp_update_comment_count( $post_id );
0

#2 Обновим кол-во комментариев поста

Например у нас есть своя функцию добавления комментария в БД. После того как она добавить комментарий, нужно запустить эту функцию, чтобы она обновила данные о количестве комментариев у поста к которому комментарий был добавлен нестандартно (не через функцию WP, например, wp_new_comment()).

/**
 * Update or insert a comment.
 *
 * @access public
 *
 * @param \WP_Comment $comment Comment object.
 */
function upsert_comment( $comment ) {
	global $wpdb;

	$comment = $comment->to_array();

	// Filter by fields on comment table.
	$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 );
	}

	// Remove comment from cache.
	clean_comment_cache( $comment['comment_ID'] );

	// Обновляем данные о колличестве комментариев у записи
	wp_update_comment_count( $comment['comment_post_ID'] );
}

Заметки

Список изменений

С версии 2.1.0 Введена.

Код wp_update_comment_count() WP 6.5.2

function wp_update_comment_count( $post_id, $do_deferred = false ) {
	static $_deferred = array();

	if ( empty( $post_id ) && ! $do_deferred ) {
		return false;
	}

	if ( $do_deferred ) {
		$_deferred = array_unique( $_deferred );
		foreach ( $_deferred as $i => $_post_id ) {
			wp_update_comment_count_now( $_post_id );
			unset( $_deferred[ $i ] );
			/** @todo Move this outside of the foreach and reset $_deferred to an array instead */
		}
	}

	if ( wp_defer_comment_counting() ) {
		$_deferred[] = $post_id;
		return true;
	} elseif ( $post_id ) {
		return wp_update_comment_count_now( $post_id );
	}
}