User Posts Limit

How to set post creation limit for authors?
In the plugin settings set ‘Author’ in role, ‘Posts’ in post type and the limit.

How to make rules that applied on certain post type to limit per website instead of per user role?
Update the post type:

add_filter( 'upl_query', 'upl_limit_total_posts' );
add_filter( 'upl_rule_limit_current_user_role_check', 'upl_convert_user_role', 10, 2 );

function upl_limit_total_posts( $args ) {
	$post_type = 'post';
	if ( $post_type === $args['post_type'] ) {
		unset( $args['author'] );
	}
	return $args;
}

function upl_convert_user_role( $check, $i ) {
	$post_type = 'post';
	return $post_type === get_option( 'upl_posts_type' )[ $i ] && ! is_user_logged_in() ? true : $check;
}

How to make rules that applied on certain post type to limit by posts in specific categories only?
Update the post type and the categories id (make sure users can’t migrate posts from/into unrestricted posts categories):

add_filter( 'upl_query', 'upl_specific_category' );
function upl_specific_category( $args ) {
	$post_type = 'post';
	$category_id = [ '4', '2' ];
	if ( $post_type === $args['post_type'] ) {
		$args['cat'] = $category_id;
	}
	return $args;
}

How to make rules that applied on certain post type to limit only specific post statuses?
Update the post type and the post statuses (make sure users can’t migrate posts from/into unrestricted post status):

add_filter( 'upl_query', 'upl_specific_post_status' );
function upl_specific_post_status( $args ) {
	$post_type = 'post';
	$post_status = [ 'any' ];
	if ( $post_type === $args['post_type'] ) {
		$args['post_status'] = $post_status;
	}
	return $args;
}

How to modify the cycle for rules that applied on certain post type?
Update the post type and the cycle:

add_filter( 'upl_query', 'upl_modify_cycle' );
function upl_modify_cycle( $args ) {
	$post_type = 'post';
	$cycle = '3 days ago';
	if ( $post_type === $args['post_type'] ) {
		$args['date_query']['after'] = $cycle;
	}
	return $args;
}

How to display to the users only the limits that applied on them based on the selected ‘Priority’ option?

add_filter( 'upl_display_prioritized_rules_enabled', '__return_true' );

How to prevent users to exceed the limits by opening multiple ‘new post’ windows?

add_filter( 'upl_skip_auto_draft_enabled', '__return_true' );

How to hide the ‘Add New’ button when posts limit exceeded?

add_filter( 'upl_hide_add_new_button_enabled', '__return_true' );

How to define limits for the total number of multiple post types?
Update the packages’ names and the post types they include:

add_action( 'init', 'upl_create_packages' );
add_action( 'admin_init', 'upl_add_author_support' );
add_filter( 'upl_rule_limit_current_post_type_check', 'upl_convert_post_types', 10, 3 );
add_filter( 'upl_query', 'upl_apply_packages', 10, 2 );

function upl_get_packages_types() {
	return [
		'Basic Package' => [ 'post', 'page' ],
		'Premium Package' => [ 'post', 'page', 'media' ]
	];
}

function upl_create_packages() {
	foreach ( array_keys( upl_get_packages_types() ) as $package ) {
		register_post_type( sanitize_key( $package ), [ 'labels' => [ 'name' => $package ] ] );
	}
}

function upl_add_author_support() {
	if ( current_user_can( get_option( 'upl_manage_cap' ) ) ) {
		$post_types = [];
		foreach ( upl_get_packages_types() as $package ) {
			$post_types = array_merge( $post_types, $package );
		}
		foreach ( $post_types as $post_type ) {
			add_post_type_support( $post_type, 'author' );
		}
	}
}

function upl_convert_post_types( $check, $i, $current_post_type ) {
	foreach ( upl_get_packages_types() as $package => $types ) {
		if ( sanitize_key( $package ) === get_option( 'upl_posts_type' )[ $i ] && in_array( $current_post_type, $types ) ) {
			return true;
		}
	}
	return $check;
}

function upl_apply_packages( $args, $i ) {
	foreach ( upl_get_packages_types() as $package => $types ) {
		if ( sanitize_key( $package ) === get_option( 'upl_posts_type' )[ $i ] ) {
			$args['post_type'] = $types;
			break;
		}
	}
	return $args;
}

How to lock the edit of posts for some user role when certain condition are met?
Update the post type, the role, and the condition:

add_filter( 'get_post_metadata', 'upl_lock_posts', 10, 5 );
function upl_lock_posts( $value, $object_id, $meta_key, $single, $meta_type ) {
	$post_type = 'post';
	$role = 'editor';
	$condition = 'active' !== get_user_meta( get_current_user_id(), 'membership_level', true );
	$admin_id = '1';
	return '_edit_lock' === $meta_key && $post_type === get_post_type( $object_id ) && in_array( $role, wp_get_current_user()->roles ) && $condition ? time() . ':' . $admin_id : $value;
}

How to make rules that apply on certain post type to limit by the posts of the current user instead of the assigned owner (suitable for frontend forms that create the post as admin and are modified only afterwards)?
Update the post type:

add_filter( 'upl_query', 'upl_limit_current_user' );
function upl_limit_current_user( $args ) {
	$post_type = 'post';
	if ( $post_type === $args['post_type'] && ! is_admin() ) {
		$args['author'] = get_current_user_id();
	}
	return $args;
}

How to allow posts limit per user (will be displayed on the Edit User Screen)?

add_filter( 'upl_rule_num_limit', 'upl_user_num_limit', 10, 3 );
add_action( 'show_user_profile', 'upl_add_num_limit_user_data' );
add_action( 'edit_user_profile', 'upl_add_num_limit_user_data' );
add_action( 'personal_options_update', 'upl_save_num_limit_user_data' );
add_action( 'edit_user_profile_update', 'upl_save_num_limit_user_data' );
add_filter( 'manage_users_columns', 'upl_num_limit_user_table' );
add_filter( 'manage_users_custom_column', 'upl_num_limit_user_table_row', 10, 3 );

function upl_user_num_limit( $num_limit, $i, $user ) {
	$user_limit = get_user_meta( $user, "num_limit_$i", true );
	return '' !== $user_limit ? $user_limit : $num_limit;
}

function upl_add_num_limit_user_data( $user ) {
	if ( current_user_can( get_option( 'upl_manage_cap', 'manage_options' ) ) ) {
		?>
		<h3><?php esc_html_e( 'User Posts Limit', 'user-posts-limit' ); ?></h3>
		<table class="form-table">
		<?php for ( $i = 0; $i < get_option( 'upl_rules_count' ); $i++ ) { ?>
			<tr>
				<th><label for="num_limit_<?php echo $i; ?>"><?php esc_html_e( 'Rule', 'user-posts-limit' ); echo $i + 1 . ' '; esc_html_e( 'Limit', 'user-posts-limit' ); ?></label></th>
				<td>
					<input type="number" min="0" name="num_limit_<?php echo $i; ?>" value="<?php echo esc_attr( get_user_meta( $user->ID, "num_limit_$i", true ) ); ?>" class="regular-text" />
					<p class="description"><?php esc_html_e( 'It will override the configured limit for this user on rule', 'user-posts-limit' ); echo $i + 1; ?></p>
				</td>
			</tr>
		<?php } ?>
		</table>
		<br>
		<?php
	}
}

function upl_save_num_limit_user_data( $user_id ) {
	if ( current_user_can( get_option( 'upl_manage_cap', 'manage_options' ) ) ) {
		for ( $i = 0; $i < get_option( 'upl_rules_count' ); $i++ ) {
			update_user_meta( $user_id, "num_limit_$i", sanitize_text_field( $_POST["num_limit_$i"] ) );
		}
	}
}

function upl_num_limit_user_table( $columns ) {
	for ( $i = 0; $i < get_option( 'upl_rules_count' ); $i++ ) {
		$columns["num_limit_$i"] = __( 'Rule', 'user-posts-limit' ) . ( $i + 1 ) . ' ' . __( 'Limit', 'user-posts-limit' );
	}
	return $columns;
}

function upl_num_limit_user_table_row( $row_output, $column_id_attr, $user_id ) {
	for ( $i = 0; $i < get_option( 'upl_rules_count' ); $i++ ) {
		if ( "num_limit_$i" === $column_id_attr ) {
			return get_user_meta( $user_id, "num_limit_$i", true );
		}
	}
	return $row_output;
}

How to set different limit message per user role?
Update the user role and its message:

add_filter( 'upl_message', 'upl_message_per_role', 10, 2 );
function upl_message_per_role( $message, $postarr ) {
	$message_per_role = [ // Sort roles from strong to weak, first match will be applied
		'author'		=> 'message1',
		'editor'		=> 'message2',
	];
	foreach ( $message_per_role as $role => $role_message ) {
		if ( user_can( $postarr['post_author'], $role ) ) {
			return $role_message;
		}
	}
	return $message;
}

111 responses to “User Posts Limit”

  1. Chris Avatar
    Chris

    This is in debug.log.
    [19-Mar-2023 19:08:02 UTC] No bad record cleanup needed: 0.7.2

    1. Chris Avatar
      Chris

      Hello, any thoughts about what is causing this critical error message?

  2. Chris Avatar
    Chris

    Hello,

    I added this code snippet, and I see a field to set a maximum number of posts within the PM Pro level setup. The post type that I want to limit is a custom post type. How would I set which post type that should be limited for the membership level?

    Thank you.

    1. Chris Avatar
      Chris

      Hello,
      Is there some way to set the limit for a PM Pro membership level to limit a custom post type?

      Thank you.

    2. Condless Avatar

      The rule should be created via the ‘User Posts Limit’ plugin settings (you can select your CPT and set any limit), then the limit which configured via PMPro will override that limit based on the user membership level.

    3. Chris Avatar
      Chris

      Hello, I am unable to get this to work.

      In the User Posts Limit Settings, I select the Role = PMP Membership Role; Type = Custom Post Type; Limit = post limit (1); Cycle = None.

      In Paid Membership Pro, I went to the setup for the same membership level and enter the User Posts Limit, Limit = 1.

      I am able to submit more than 1 post of the Custom Post Type from a user that has this Membership Role. I have entered 3 posts (versus limit of 1) with no message.

      What am I missing?

    4. Condless Avatar

      Hi,
      Please contact us by Email.

  3. audai Avatar

    How to prevent users (Editor) to exceed the limits by opening multiple ‘edit post’ windows?

    1. Condless Avatar

      Hi Audai,
      Add to your theme’s functions.php file the line under ‘How to prevent users to exceed the limits by opening multiple ‘new post’ windows?’.

  4. Fahad Khalid Avatar
    Fahad Khalid

    Hi, it’s not showing any notification or notice to user when user try to post after the limit is exceeded.
    please help
    i’m using it for buddyboss forum’s replies, discussion, and new forums

    please help
    Thanks

    1. Condless Avatar

      Hi Fahad,
      In the plugin settings, try ’embed’ in the Notifications option.

  5. Godwin Avatar
    Godwin

    Good day.

    I tried this plugin and it is restricting new posts for the role in general, instead of for the users having that role.

    For example, if I set the subscriber role to 5 posts, it means that if there is a total of 5 posts by the subscribers, a new subscriber will not the able to publish any more posts.

    I want each user within that subscriber role to be able to publish 5 posts each. So if there are 10 subscribers, the total posts should be 50 and not just 5 for the entire role.

    Is it possible to achieve this with this plugin?

    1. Condless Avatar

      Hi,
      “I want each user within that subscriber role to be able to publish 5 posts each”
      This is the default Behavior of the plugin, did you add some code snippet (such as the first code from this docs)?

    2. Godwin Avatar
      Godwin

      No, I did not add any of the code snippet. I only installed the plugin, made the necessary settings and realized it was limiting posts creation for the entire role, instead of the users within that role.

    3. Condless Avatar

      Hi,
      Which numbers do you see in the ‘Posts Limit’ column in the users screen (Dashboard => Users => All users)?
      It may be a conflict with some other plugin, please contact by Email.

  6. Dejan Kletečki Avatar

    Hello,

    is it possible with [upl_limits] to show limits one per one? So at the moment, shortcodes show all the limits together but I would like to separate them for each post type if that is possible.

    Best Regards

    1. Condless Avatar

      Hi Dejan,
      You can use (replace “page” with your post type):
      [upl_limits type="page"]

  7. Brian Avatar
    Brian

    I tried to create an advertising listing. There are Free and Starter options, which can publish 1 and 3 posts.

    Free: 1 post
    Starter: 3 posts

    The submission in Admin backend was successful on every role.

    But when I make the submission using Frontend Form (Bricks Builder), it shows error.
    The reason is that it counts the number of posts together when I use Starter to submit one post. I can no longer submit in the Free plan.

    Screenshot: https://prnt.sc/bqOlEqigvMS4

    How can this be solved?

    1. Condless Avatar

      Hi Brian,
      Do you have dev environment which I can check this issue?
      Please reply via Email.

  8. Roney Avatar
    Roney

    which code snippet i have to use for pmpro integration?
    i want the pmpro level users to limit the post creation level 1- 50 post, level 2 & 3 – unlimited posts.
    so please tell me how to integrate it with pmpro

  9. Roney Avatar
    Roney

    so i have successfully got the code snippet to integrate with pmpro and i am using jetengine form in front end to create posts which worked fine after the limit it shows that post limit exceeded.

    I have three cpts and i wanted a total post limit of 50 so i found a code from the comment which is :

    add_filter( ‘upl_query’, ‘upl_multiple_post_types’ );
    function upl_multiple_post_types( $args ) {
    $args[‘post_type’] = [ ‘CPT1’, ‘CPT2’, ‘CPT3’ ];
    return $args;
    }

    which worked fine 🙂

    THE MAIN PROBLEM:

    now i have a level in pmpro and i wanted that the post limit will reset after he renews/re buy his membership but i think for the level and the user post limit is set as the plugin name says UPL it is specific to users so it will not refresh but i want it to be refreshed.

    if i use the cycle option which is in the UPL settings its says only month but i think this uses the monthly date and time of the wordpress site but not the pmpro members as if a member purchases subscription on the 25th of this month and my cycle is set to monthly and it will refresh at the start of month but them my customer will have extra post as cycle will refresh on the starting month and he can have 100 posts then.

    HINT : i am selling membership with woocommerce so my membership product id is 6359. maybe you can try to help by checking he purchased this product in this month or etc and then refresh the post limit

    1. Roney Avatar
      Roney

      Plugin also making my website a little slower 🙁

Leave a Reply

Your email address will not be published. Required fields are marked *