用户每天只能在一个页面上发布一条评论

时间:2014-05-30 作者:Toni Ojsteršek

此代码每天统计所有页面上的评论数。我想这将只计算在一页上的一天。我的情况是:在一个ID为1, 用户可以不受任何限制地发表评论,但在ID为的页面上2, 同一用户每天只能评论一次。

<?php 
global $wpdb,$current_user;
$limit = 5; //this is limit per day per user
$comment_count = $wpdb->get_var( $wpdb->prepare("
    SELECT count(*)
    FROM wp_comments 
    WHERE comment_author = \'%s\'
        AND comment_date >= DATE_SUB( NOW(), INTERVAL 1 DAY );",
        $current_user->user_login
) );

if ( $comment_count < $limit ) {
    comment_form();
}   
else {
    echo \'exceeded comments limit - \'.$limit;
}

1 个回复
SO网友:kaiser

限制每天和每个用户的评论已内置到当前查询中。唯一缺少的是检查帖子ID。这里有一个非常方便的函数/模板标记:

/**
 * @param int $limit 
 * @param int $time
 * @param int $ids 
 */
function is_user_limit_reached( $limit = 5, $time = 1, $ids = array() )
{
    global $wpdb;

    // Cast to array
    ! is_array( $limited ) AND $limited = array( $limited );

    // Generate SQL clause
    $ids = ! empty( $ids )
        ? sprintf( " and comment_post_ID in (%s)", join( ",", $ids ) )
        : "";

    // Rows: user_id, comment_date, comment_post_ID
    $count = $wpdb->query( $wpdb->prepare( 
        "select count(*)
        from {$wpdb->comments} 
        where user_id=%d 
            and comment_date >= date_sub( now(), interval %d day )
            %s",
        get_current_user_id(),
        $time,
        $ids
    ) );

    return $count >= $limit;
}
您可以这样使用它:

if ( is_user_limit_reached(
    10,                      // allowed comments per day
    7,                       // in the last 7 days
    array( 1, 35, 97, 1148 ) // array of post IDs which have a limit
    ) )
{
    echo \'Your limit is already reached. Come back tomorrow\';
}
else
{
    comment_form();
}
你也可以打开/关闭评论框模板标签,等等。天空是你的极限。

结束

相关推荐

Disable comments

我想知道是否有任何方法可以阻止用户留下评论,但仍然显示评论表单?因此,无论何时发布新评论,都应该自动将其丢弃,或者根本不应该添加。我的评论表单仅用于演示目的,它不应该接受任何评论,但应该显示出来。我已经找到了preprocess_comment 和comment_post hooks,但我不知道如何利用它来阻止评论。我在想这样的事情:function prefix_delete_comments( $comment_id ) { wp_delete_comment( $comment_id,