How to limit user to publish post per day and per role?

You can use my plugin Posts Creation Limits which has a per user, per role, per post type, per post status limiting system and combined with its post_creation_limits_custom_checks action hook and check if the user has created a post that day already – if so: show the the “limit reached message”. For example:

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
}

Leave a Comment