检查是否发生了评论泛滥。
原型
wp_check_comment_flood( bool $is_flood, string $ip, string $email, string $date, bool $avoid_die = false )
描述
如果当前用户可以管理选项,则不会运行,因此不会阻止管理员。
参数
$is_flood
(bool)
(Required)
是否有评论泛滥?
$ip
(string)
(Required)
评论作者的IP地址。
$email
(string)
(Required)
评论作者的电子邮件地址。
$date
(string)
(Required)
MySQL时间字符串。
$avoid_die
(bool)
(Optional)
如果为true,则不允许的注释将导致函数返回WP_Error对象,而不是执行wp_die()。
返回值
(bool)
是否发生了评论泛滥。
源文件
路径:wp-includes/comment.php
<?php
...
function wp_check_comment_flood( $is_flood, $ip, $email, $date, $avoid_die = false ) {
global $wpdb;
// Another callback has declared a flood. Trust it.
if ( true === $is_flood ) {
return $is_flood;
}
// don't throttle admins or moderators
if ( current_user_can( 'manage_options' ) || current_user_can( 'moderate_comments' ) ) {
return false;
}
$hour_ago = gmdate( 'Y-m-d H:i:s', time() - HOUR_IN_SECONDS );
if ( is_user_logged_in() ) {
$user = get_current_user_id();
$check_column = '`user_id`';
} else {
$user = $ip;
$check_column = '`comment_author_IP`';
}
$sql = $wpdb->prepare(
"SELECT `comment_date_gmt` FROM `$wpdb->comments` WHERE `comment_date_gmt` >= %s AND ( $check_column = %s OR `comment_author_email` = %s ) ORDER BY `comment_date_gmt` DESC LIMIT 1",
$hour_ago,
$user,
$email
);
$lasttime = $wpdb->get_var( $sql );
if ( $lasttime ) {
$time_lastcomment = mysql2date('U', $lasttime, false);
$time_newcomment = mysql2date('U', $date, false);
/**
* Filters the comment flood status.
*
* @since 2.1.0
*
* @param bool $bool Whether a comment flood is occurring. Default false.
* @param int $time_lastcomment Timestamp of when the last comment was posted.
* @param int $time_newcomment Timestamp of when the new comment was posted.
*/
$flood_die = apply_filters( 'comment_flood_filter', false, $time_lastcomment, $time_newcomment );
if ( $flood_die ) {
/**
* Fires before the comment flood message is triggered.
*
* @since 1.5.0
*
* @param int $time_lastcomment Timestamp of when the last comment was posted.
* @param int $time_newcomment Timestamp of when the new comment was posted.
*/
do_action( 'comment_flood_trigger', $time_lastcomment, $time_newcomment );
if ( true === $avoid_die ) {
return true;
} else {
if ( wp_doing_ajax() ) {
die( __('You are posting comments too quickly. Slow down.') );
}
wp_die( __( 'You are posting comments too quickly. Slow down.' ), 429 );
}
}
}
return false;
}
...
?>
其他
英文文档:https://developer.wordpress.org/reference/functions/wp_check_comment_flood/