wp_throttle_comment_flood()
Получает признак блокировки комментария и время двух комментариев, чтобы определить, нужно ли заблокировать новый комментарий из-за слишком быстрой отправки.
Функция используется как обработчик фильтра 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 времени нового комментария.
Примеры
#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 'Комментарий отправлен слишком быстро.';
} #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 'Комментарий можно отправить.';
} #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 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;
}