wp_throttle_comment_flood()WP 2.1.0

Получает признак блокировки комментария и время двух комментариев, чтобы определить, нужно ли заблокировать новый комментарий из-за слишком быстрой отправки.

Функция используется как обработчик фильтра comment_flood_filter.

Если комментарий уже был заблокирован другим обработчиком, функция оставляет это решение без изменений. Если между последним и новым комментарием прошло меньше 15 секунд, комментарий считается флудом.

Обычно эту функцию не вызывают напрямую. Она нужна как стандартный callback для проверки частой отправки комментариев.

Интервал в 15 секунд жестко задан внутри функции. Чтобы изменить его, нужно заменить обработчик фильтра comment_flood_filter своим callback.

Смотрите также:

Хуков нет.

Возвращает

true|false.

  • true — комментарий нужно заблокировать.
  • false — комментарий не нужно блокировать.

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

wp_throttle_comment_flood( $block, $time_lastcomment, $time_newcomment );
$block(bool) (обязательный)
Указывает, был ли комментарий уже заблокирован другим обработчиком. Если передано true, функция сразу вернет true и не будет проверять время комментариев.
$time_lastcomment(int) (обязательный)
Unix timestamp времени последнего комментария.
$time_newcomment(int) (обязательный)
Unix timestamp времени нового комментария.

Примеры

0

#1 Проверка комментария на флуд

Проверим, будет ли новый комментарий заблокирован, если он отправлен через 10 секунд после предыдущего.

$time_lastcomment = time();
$time_newcomment  = $time_lastcomment + 10;

$is_blocked = wp_throttle_comment_flood( false, $time_lastcomment, $time_newcomment );

if ( $is_blocked ) {
	echo 'Комментарий отправлен слишком быстро.';
}
0

#2 Комментарий не блокируется, если прошло 15 секунд или больше

Функция вернет false, если разница между комментариями составляет 15 секунд или больше.

$time_lastcomment = time();
$time_newcomment  = $time_lastcomment + 15;

$is_blocked = wp_throttle_comment_flood( false, $time_lastcomment, $time_newcomment );

if ( ! $is_blocked ) {
	echo 'Комментарий можно отправить.';
}
0

#3 Замена стандартного лимита на 30 секунд

Удалим стандартную проверку и добавим свою, где комментарии блокируются, если между ними прошло меньше 30 секунд.

add_action( 'plugins_loaded', 'wpdocs_replace_comment_flood_check' );

function wpdocs_replace_comment_flood_check() {
	remove_filter( 'comment_flood_filter', 'wp_throttle_comment_flood', 10 );

	add_filter( 'comment_flood_filter', 'wpdocs_throttle_comment_flood_30_seconds', 10, 3 );
}

function wpdocs_throttle_comment_flood_30_seconds( $block, $time_lastcomment, $time_newcomment ) {
	if ( $block ) {
		return $block;
	}

	return ( $time_newcomment - $time_lastcomment ) < 30;
}

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

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

Код wp_throttle_comment_flood() WP 7.0.2

function wp_throttle_comment_flood( $block, $time_lastcomment, $time_newcomment ) {
	if ( $block ) { // A plugin has already blocked... we'll let that decision stand.
		return $block;
	}
	if ( ( $time_newcomment - $time_lastcomment ) < 15 ) {
		return true;
	}
	return false;
}