Bainternet Posts Creation Limits


this plugin helps you to limit the number of posts/pages/custom post types each user can create on your site. say you have a multiple author blog and you want to limit the number of posts each author can post.

very simple and light wieght plugin that runs only when user tries to crate a new post of any kind (post,page,attachment,or any custom post type) and check if he has reached his limit.

Main Feature:

  • Limit number of any post type creation.
  • Select Post Status to count. (NEW)
  • Limit number of any post type creation by user Role. (NEW)
  • Limit number of any post type creation by user ID. (NEW)
  • New Limit Rule System (faster and stable).
  • Custom blocked message For each Rule. (NEW)
  • MultiSite Support. (Fixed and works better then before)
  • ADD NEW Links are removed when limit is reached (NEW)
  • 0 Now means ZERO so Its actually blocks the user from creating at all.
  • Shortcode to limit front end post creation (NEW).

!! Do Not Try with admin user beacuse he is never limited unless you are on a multisite install and then the super admin is never limited.

any Feedback is Welcome.

check out our other plugins


  • Simple admin panel LIMITS and rules

  • add/edit limit rule panel

  • user blocked for reaching his limits when trying to create a new post.


I have Found a Bug, Now what?

Simply use the Support Forum and thanks a head for doing that.

It’s Not Working…?

Make sure you are not loged in as admin user or user with role that can manage options or on a multisite installation make sure you are not the super admin or a user with role that can manage network.

How To Use in MultiSite

Extract the zip file and just drop the contents in the wp-content/mu-plugins/ directory of your WordPress installation. (This is not created by default. You must create it in the wp-content folder.) The “mu” does not stand for multi-user like it did for WPMU, it stands for “must-use” as any code placed in that folder will run without needing to be activated.
After you define you settings in the main site it will apply to all sub sites, you can also have a site specific settings by entering that sites dashboard >> post creation limits panel and save the site specific rules.

How To Use On FrontEnd Forms?

Just for that you can use the built in Shortcode. simply wrap your form with [IN_LIMIT] tags ex:
[IN_LIMIT] form code here … [/IN_LIMIT]

You can even use nested shortcodes ex:
[IN_LIMIT] [form shortcode here] [/IN_LIMIT]

What are the Parameters of the Shortcode?

‘message’ => to overwrite rule message,
‘m’ => when a user is not logged in,
‘use_m’ => wheter to overwrite or not,
‘type’ => the post type that needs to be checked.

[IN_LIMIT use_m=”true” message=”no more pages for you”, m=”only looged in users can post here” type=”page”] [form shortcode here] [/IN_LIMIT]

Any Filter Hooks?

Yes, many 🙂

'bapl_shortcode_not_logged_in' -> log in message
'bapl_shortcode_network_admin' -> network admin on multisite
'bapl_shortcode_admin' -> admin on none multisite
'bapl_shortcode_limited' -> when a user is limited message
'bapl_shortcode_ok' -> when a user is ok to see the form
'post_creation_limits_limited_message_class' -> error class on backend when limited`

that’s it so far.


It works with User ID but it doesn´t work with Author Role with WP 4.7.2


Hi, nice work! I create a rule with User Role Author, Post Type ANY, LIMIT 1, POST STATUS any and Time Span FOREVER and dont work. I use the same setting but I change in User Role Author by USER ID and plugin work like a charm!. I need work with user rule Author, Could you check this?. THX. Note: I have edited with user role editor the permissions of the Author role and dont chek manage_options but i have changed the capacity of upload_file to true and it has the permissions to edit, create and delete post only.

multi role support


had to make this change to your plugin to do the job for me, alright plugin over all. i'd appreciate if you consider this change to the next version so i'd gladly get back to using the original plugin

			//check limit by role
			global $wp_roles;
			$roles = $this->balp_get_current_user_role();
			foreach($roles as $role):
				$current_role = isset($wp_roles->role_names[$role]) ? translate_user_role($wp_roles->role_names[$role] ) : false;
				$rules_BY_roles = $this->get_sub_array($options['rules'],'role',$current_role);
				if ($rules_BY_roles){
					foreach((array)$rules_BY_roles as $ke => $arr){
						if ($arr['post_type'] == $type || $arr['post_type'] == "any"){
							//$count_posts = get_posts(array('author'=>$user_id,'post_type' => $type,'post_status' => $arr['status'],'fields' => 'ids'));
							$ptype = ($arr['post_type'] == 'any')? "IN ('".implode("', '",get_post_types('', 'names')). "')" : " = '".$arr['post_type']."'";
							$time = (isset($arr['time_span']) && $arr['time_span'] != "FOREVER" ) ? " AND TIMEDIFF(NOW(), post_date) < '".$arr['time_span']."'" : "";
							$pstatus = ($arr['status'] == 'any') ? "IN ('publish', 'pending', 'draft', 'future', 'private', 'trash')": " = '".$arr['status']."'";
							$count = $wpdb->get_var("SELECT COUNT(ID) FROM $wpdb->posts WHERE post_status ". $pstatus ." AND post_author = $user_id AND post_type $ptype".$time);
							$count = apply_filters('bapl_Count_filter', $count,$arr, $user_id);
							if($count >= $arr['limit']){
								if ($use_m)
									$this->current_message = $arr['message'];
								return true;

		//get user role
		public function balp_get_current_user_role() {
			$current_user = wp_get_current_user();
			return $roles = $current_user->roles;

Read all 13 reviews


Fixed locking access to press this.
added a new action hook before the limited message is shown post_creation_limits_before_limited_message

3.1 fixed typo
replace jquery live() with on().

3.0 Fixed undefined variable notice props to Austin Passy.
Moved all hooks to a central function outside of the consructor.
Moved all shortcodes to a central function outside of the consructor.
Added plugin row meta.

2.9 Added Filters bapl_Count_filter for count to allow you to filter based on your own rules (other then what is set in the plugin).
Fixed role change on rule edit.

2.8 Fixed post type “any” limitation bug.

2.7 Fixed Missing argument 2 for bapl::limit_xml_rpc() issue.

2.6 trash is now check in any status as well.

2.5 Added time span.

2.4 Added Any to post type rules.

2.3 Fixed HTML message issues.
Added bapl_limited_message_Filter filter hook for message.

2.2.2 Globalized class var.
added action hook for custom check.

2.2.1 Added casting to avoid errors on foreach calls

2.2 added filter shortcode for front end forms
added filter hooks.

2.1 Fixed Multisite support.
Added site specific (in a multisite) settings option.
custom limit block message.
select post status to count.

2.0 Hide add new whe limit is reached.
auto migration from old limits to new rule system.
0(Zero) no longer means unlimited so its actually a sure block.

1.9 Admin UI remake.
New Rule System.

1.8 added block by user id.

1.7 Re Coded in OOP.

1.6 none public update

1.5 none public update

1.4 none public update

1.3 none public update

1.2 none public update

1.1 quick bug fix

1.0 Major update, added custom blocked message feature.
new limit by role feature.
added multisite support.

0.6 Changed post Count function to speed it up.

0.5 added custom post type support and recoded most of it.

0.4 added options panel.

0.3 quick bug fix.

0.2 admin is now never limited.

0.1 inital release.

Contributors & Developers

This is open source software. The following people have contributed to this plugin.


Browse the code