如何限制用户每天和每个角色发布帖子?

时间:2012-04-23 作者:dev-jim

我想知道是否有任何方法/插件可以限制用户发布的帖子(在给定的时间跨度内)的角色?

像这样:

角色A->每天1个帖子,总共30个帖子角色B->每天10个帖子,总共100个帖子无限制我知道有一些插件具有这些功能,但它们只能控制每天的帖子数量或限制基本角色上的帖子数量,而且它们之间并不相互包容。

注意:这是为了防止不动产平台被垃圾邮件攻击(编者注)

有什么想法吗?

2 个回复
最合适的回答,由SO网友:Bainternet 整理而成

你可以使用我的插件Posts Creation Limits 它具有每个用户、每个角色、每个职位类型、每个职位状态限制系统,并与post_creation_limits_custom_checks 操作挂钩并检查用户当天是否已经创建了帖子-如果已经创建了,则显示“达到限制的消息”。例如:

add_action( \'post_creation_limits_custom_checks\', \'post_per_day_limit\' );

function post_per_day_limit( $type, $user_id ) {
    global $bapl,$wpdb;

    // safe check: Plugin installed?
    ! isset( $bapl ) AND _doing_it_wrong( __FUNCTION__, sprintf( \'You need to %sinstall the needed Plugin%s\', \'<a href="http://wordpress.org/extend/plugins/bainternet-posts-creation-limits/">\', \'</a>\' ), 0 );

    $time_in_days = 1; // 1 means in last day
    $count = $wpdb->get_var(
        $wpdb->prepare("
            SELECT COUNT(*) 
            FROM $wpdb->posts 
            WHERE post_status = \'publish\' 
            AND post_type = %s 
            AND post_author = %s
            AND post_date >= DATE_SUB(CURDATE(),INTERVAL %s DAY)",
            $type,
            $user_id,
            $time_in_days
        )
    );
    if ( 0 < $count ) 
        $count = number_format( $count );

    // here you can check since we have the $count ex: 
    // limit for 2 posts a day
    if ( 1 < $count ) {
        // return limit reached message using the plugin class
        exit( $bapl->bapl_not_allowed( \'you can not posts more them two posts a day\' ) );
    }
    // else do nothing
}

SO网友:Zackskeeter

你不需要依赖

//Limit posts per month
    $time_in_days = 1; // 1 means in last day
    $count = $wpdb->get_var(
        $wpdb->prepare("
            SELECT COUNT(*) 
            FROM $wpdb->posts 
            WHERE post_status = \'publish\' 
            AND post_type = %s 
            AND post_author = %s
            AND post_date >= DATE_SUB(CURDATE(),INTERVAL %s DAY)",
            \'post\',
            get_current_user_id(),
            $time_in_days
        )
    );
    if ( 0 < $count ) 
    $count = number_format( $count );

    // here you can check since we have the $count ex: 
    // limit for 2 posts a day
    if ( 1 < $count ) {
        // return limit reached message using the plugin class
         $errors[] = \'You have reached your monthly post limit\';
    }
我在哪里$errors 在这里,您可以回显消息,在我的情况下,我将插入WP用户前端。

如果希望按角色执行,则可以简单地添加另一条If语句,检查该用户在if ( 1 < $count ) {}, 然后它会回显您的代码或重定向到错误页。

结束

相关推荐

QUERY_POSTS、ORDERBY META_VALUE和打印“未来”帖子

我有一个自行车俱乐部用来安排骑行的自定义帖子类型。这些帖子有一个自定义字段,用户可以使用JQUI date&;选择“骑行日期”;时间选择器。此信息存储在Posteta中:07/26/2012 @ 12:00 am 我通过以下方式查询这些帖子:query_posts(array(\'posts_per_page\' => 3, \'post_type\' => \'rides\'); 但我们不想看到已经发生的游乐设施: //Format User entered