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 або 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.0.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 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);
	}

}

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *