With “Maximum Products per User for WooCommerce” plugin you can limit the number of items your WooCommerce customers can buy. Item limits for user can be set on lifetime basis or in selected date range (i.e. not per order). Limits can be set for all products at once, on per product basis, per product category or per product tag. You can choose if you want to limit product quantities, prices (i.e. sums) or weights.
Main Features
- Set maximum products number per user.
- Select plugin mode: product quantities, product orders, product prices (including or excluding taxes), product weights, or product volumes.
- Set date range (for example: lifetime, this month, this year, last 30 days, last 365 days or custom date range).
- Set on which order statuses product data should be updated.
- Set different maximum product limits for different user roles.
- Enable variable products variations usage.
- Customize customer message on frontend.
- Block checkout page on exceeded limits.
- Exclude products from plugin scope.
- Edit and export each user’s sales data.
- Choose which payment gateways should update product data.
- Display remaining amount, maximum limits, etc. to the users in cart, checkout, single product page, on “My account” page, or with a shortcode anywhere on your site.
- Identify guests by IP address or block guests from buying products in your shop.
- Hide products with exceeded limits for the current user.
- Enable multi-language support (WPML, Polylang).
- Set product limits per product category.
- Set product limits per product tag.
- Set product limits per individual product.
- Set product limits by formula, for example: per user ID, per membership plan, per payment method, etc.
- And more…
Options
Plugin settings are located in “WooCommerce > Settings > Maximum Products per User”.
- General Options
- Frontend Options
- Limits: All Products
- Limits: Per Product Taxonomy
- Limits: Per Product
- Limits by Formula
- Admin Options
- Tools
- Advanced Options
- Sales Data
- Shortcodes
General Options
General settings are located in “WooCommerce > Settings > Maximum Products per User > General”.
- Mode
- You will need to Recalculate sales data after changing the “Mode” option. Possible values: Product quantities; Product orders; Product prices (incl. tax); Product prices (excl. tax); Product weights; Product volumes.
- Default:
Product quantities
- Default:
- Date range
- Possible values: Lifetime; This hour; This day; This week; This month; This year; Last hour; Last 24 hours; Last 7 days; Last 30 days; Last 365 days; Custom.
- Default:
Lifetime
- Default:
- Custom date range
- Used when “Custom” option is selected in “Date range”.
- Default:
3600
- Default:
- Custom date range unit
- Used for the “Custom date range” option. Possible values: seconds; minutes; hours; days; weeks.
- Default:
seconds
- Default:
- Order statuses
- Choose order statuses when product data should be updated. If you select multiple order statuses, data is updated only once, on whichever status change occurs first. You will need to Recalculate sales data after changing the “Order statuses” option.
- Default:
Completed
- Default:
- Order statuses: Delete
- Choose order statuses when product data should be deleted. If you select multiple order statuses, data is deleted only once, on whichever status change occurs first.
- Default: None
- Payment gateways
- Choose payment gateways when product data should be updated. Leave empty to update data for all payment gateways. You will need to Recalculate sales data after changing “Payment gateways” option.
- Default: None
- Use variations
- Use variations in “All products” and “Per product” calculations. If “Limits > Per Product” section is enabled, you will be able to (optionally) override this option for each individual product.
- Default:
no
- Default:
- User roles
- Set different maximum product limits for different user roles.
- Default:
no
- Default:
- User roles: Enabled user roles
- Select user roles for which you want to set different limits. If empty, then all user roles will be added to the settings.
- Default: None
- Hide products
- Hides products with exceeded limits for the current user from the catalog and search results. Products will still be accessible via the direct links.
- Default:
no
- Default:
- Guests
- Sets how non-logged users (i.e. guests) should be handled by the plugin. Possible values: Do nothing; Block guests from buying products in your shop; Identify guests by IP address.
- Default:
Do nothing
- Default:
- Block guests: Message
- For the “Block guests from buying products in your shop” option. You can use HTML and/or shortcode here. E.g.:
[alg_wc_mppu_translate]
.- Default:
You need to register to buy products.
- Default:
- Multi-language
- Use the default language product/term ID instead of the translated one. You will need to Recalculate sales data after changing “Multi-language” option. Possible values: Disabled; WPML; Polylang.
- Default:
Disabled
- Default:
- Count by current payment method
- Count “user already bought” data for current (i.e. chosen) payment method only. You may also want to disable “Validate on add to cart” and “Block checkout page” options in the “Frontend” section, so your customer could change the payment method on exceeded limits.
- Default:
no
- Default:
Frontend Options
Frontend settings are located in “WooCommerce > Settings > Maximum Products per User > Frontend”.
Placeholders
You can use this placeholders in messages:
%limit%
,%bought%
,%remaining%
,%in_cart%
,%bought_plus_in_cart%
,%remaining_minus_in_cart%
,%adding%
,%in_cart_plus_adding%
,%bought_plus_in_cart_plus_adding%
,%remaining_minus_in_cart_minus_adding%
,%product_title%
,%term_name%
,%first_order_amount%
,%first_order_date%
,%first_order_date_exp%
,%first_order_date_exp_timeleft%
,%payment_method_title%
.
You can also use HTML and/or shortcodes in messages, e.g.: [alg_wc_mppu_translate]
for WPML/Polylang translations.
- Validate on add to cart
- Enable this if you want to check user limits right away, on add to cart button click, instead of notice on cart and checkout pages only.
- Default:
yes
- Default:
- Cart notice
- Shows notice on the cart page. Possible values: Disable; Enable; As text.
- Default:
Enable
- Default:
- Cart notice type
- Ignored unless “Cart notice” option is set to “Enable”. Possible values: Notice; Error; Success.
- Default:
Notice
- Default:
- Customer message
- Check the Placeholders section for available message placeholders.
- Default:
You can only buy maximum %limit% of %product_title% (you've already bought %bought%).
- Default:
- Multiple notices
- Choose if you want to display cart & checkout notices for each product, or only for the first product.
- Default:
yes
- Default:
- Block checkout page
- This will stop customer from accessing the checkout page on exceeded limits. Customer will be redirected to the cart page.
- Default:
no
- Default:
- Single product page
- Adds current product limit info to the single product pages. Possible values: Disable; Notice; Text in product summary; Text in product description.
- Default:
Disable
- Default:
- Single product page: Content
- Check the Placeholders section for available message placeholders.
- Default:
The remaining amount for %product_title% is %remaining% (you've already bought %bought% out of %limit%).
- Default:
- My Account
- Adds tab to the “My Account” page.
- Default:
no
- Default:
- My Account: Tab id
- Sets tab id (i.e. slug).
- Default:
product-limits
- Default:
- My Account: Tab title
- Sets tab title.
- Default:
Product limits
- Default:
- My Account: Tab icon
- You need to enter icon code here, e.g.
f2b9
. Icon codes are available on Font Awesome site. Will use the default icon if empty.- Default: None
- My Account: Tab content
- You can use HTML and/or shortcodes here. E.g.: [alg_wc_mppu_translate].
- Default:
[alg_wc_mppu_user_product_limits]
- Default:

All Products

- All products
- Enables “All products” section.
- Default:
no
- Default:
- Limit per user
- Maximum allowed each product’s limit per user.
- Default:
1
- Default:
Per Product Taxonomy
- Per product tag
- This will add new meta box to each product tag term’s edit page.
- Default:
no
- Default:
- Per product category
- This will add new meta box to each product category term’s edit page.
- Default:
no
- Default:
When section is enabled, you will see new “Limit per user” option in “Products > Categories > Your category > Edit” and/or “Products > Tags > Your tag > Edit”:

Per Product
- Per product
- Enables “Per product” section. This will add new meta box to each product’s edit page.
- Default:
no
- Default:
Per product meta box for variable product with “Use variations” option enabled:
Per product meta box for simple product or for variable product with “Use variations” option disabled:
Per product meta box with User roles option enabled:
Limits by Formula
This section introduces an alternative method for setting max limits.
- Enable
- Enables/disables “Limits by Formula” section.
- Default:
no
- Default:
- Formula
- One shortcode per line.
- Default: None
Notes
- You need to use
[alg_wc_mppu]
shortcode here. - One shortcode per line.
- Algorithm stops when first matching shortcode is found (from top to bottom).
- Available shortcode attributes:
user_id
,user_role
,membership_plan
,payment_method
,product_id
,term_id
,product_sku
,is_downloadable
,is_virtual
,limit
. limit
attribute is required.- You need to enable “Per Product” checkbox in “Limits” section to use
product_id
,product_sku
,is_downloadable
,is_virtual
attributes. - You need to enable “Per product category” and/or “Per product tag” checkbox in “Limits” section to use
term_id
attribute. - You need to enable “Count by current payment method” checkbox in “General” section to use
payment_method
attribute. You may also want to disable “Validate on add to cart” and “Block checkout page” options in the “Frontend” section, so your customer could change the payment method on exceeded limits. - You can not use
product_id
(orproduct_sku
/is_downloadable
/is_virtual
) andterm_id
simultaneously in one shortcode. - You can set shortcode effective date(s) with
start_date
,end_date
(andnot_date_limit
) attributes.
Formula Examples
Set maximum quantity to 18
for users 2
and 5
:
[alg_wc_mppu limit="18" user_id="2,5"]
Set maximum quantity to 18
for products 100
and 110
for users 2
and 5
:
[alg_wc_mppu limit="18" user_id="2,5" product_id="100,110"]
Limits by user’s membership plan (you need to use membership plan slug in shortcode):
[alg_wc_mppu limit="3" membership_plan="silver"] [alg_wc_mppu limit="36" membership_plan="gold"]
Limits by current payment gateway (you need to use payment gateway slug in shortcode):
[alg_wc_mppu limit="100" payment_method="cheque"] [alg_wc_mppu limit="200" payment_method="bacs,paypal"] [alg_wc_mppu limit="300" payment_method="cod"]
Admin Options
- Editable sales data - Enable
- You will be able to edit each user’s sales data on user’s edit page (in “Users”).
- Default:
no
- Default:
- Editable sales data - Add empty items
- Adds “Lifetime” column for products/terms with no sales data.
- Default:
no
- Default:
- Export
- Column separator for the export tools.
- Default:
,
- Default:
- Export: Merge user
- This will output all user’s data in a single line. Used in “Export sales data for all users” tool.
- Default:
no
- Default:
- Export: Merge user: Data separator
- Ignored unless “Merge user” option is enabled.
- Default:
;
- Default:
- Export: Merge user: Extra meta
- Set as comma separated values. Ignored unless “Merge user” option is enabled.
- Default: None
Tools
Check the box and save settings to run the tool. Please note that there is no undo for this action.
- Recalculate sales data
- Default:
no
- Default:
- Delete & recalculate sales data
- Default:
no
- Default:
- Delete sales data
- Default:
no
- Default:
Tools: Advanced Options
Advanced options for both recalculation tools. Leave the default values if not sure.
- Orders date range
- Possible values: All orders; Only orders in “General > Date range”.
- Default:
All orders
- Default:
- Query block size
- How many orders to process in a single query.
- Default:
1024
- Default:
- Time limit
- The maximum execution time, in seconds. If set to zero, no time limit is forced. If set to minus one, server time limit is used.
- Default:
-1
- Default:
- Loop function
- Possible values: WordPress standard (WP_Query); WooCommerce specific (wc_get_orders).
- Default:
WordPress standard (WP_Query)
- Default:
- Debug
- Default:
no
- Default:
Advanced Options
- Time function
- Possible values: Coordinated Universal Time (UTC); Local (WordPress) time.
- Default:
Local (WordPress) time
- Default:
- Exclude products
- You will need to “Recalculate sales data” for products to be excluded from sales data.
- Default: None
- Duplicate product
- Enable this if you want to copy plugin’s product meta data on product “Duplicate”.
- Default:
no
- Default:
- Lifetime from totals
- Ignored unless “Date range” is set to “Lifetime” in “General” section. Enabling this may make “user already bought” data calculations faster, however, it will also disable some functionality, like “Count by current payment method” option in “General” section.
- Default:
no
- Default:
Sales Data
You can check saved sales data for each product, by opening admin product’s edit page. For variable products you will see data for each variation as well. Similar “Sales Data” tables can be found on each category/tag edit pages:
Shortcodes
Available shortcodes:
- [alg_wc_mppu_current_product_limit]
- [alg_wc_mppu_user_product_limits]
- [alg_wc_mppu_term_limit]
- [alg_wc_mppu_translate]
- [alg_wc_mppu]
[alg_wc_mppu_current_product_limit]
Displays current product data for the current user, for example, maximum limit, amount already bought, remaining amount etc.
- product_id
- (optional) Product ID. If not set, will use current product ID.
- Default: None
- user_id
- (optional) User ID. If not set, will use current user ID.
- Default: None
- template
- (optional) Output template. If not set, will use “WooCommerce > Settings > Maximum Products per User > Frontend > Single product page” option value. Available placeholders:
%limit%
,%bought%
,%remaining%
,%product_title%
.- Default: None
Example
[alg_wc_mppu_current_product_limit template="The remaining amount for %product_title% is %remaining% (you've already bought %bought% out of %limit%)."]
[alg_wc_mppu_user_product_limits]
Displays all products data for the current user. Outputted as a table with “Product”, “Remaining”, “Bought” and “Max” columns.
- user_id
- (optional) User ID. If not set, will use current user ID.
- Default: None
Example
[alg_wc_mppu_user_product_limits]
[alg_wc_mppu_term_limit]
Displays amounts data for the term, i.e. product category or tag.
Example
[alg_wc_mppu_term_limit taxonomy="product_cat" term_slug="t-shirts"]
[alg_wc_mppu_term_limit taxonomy="product_cat" term_id="33"]
[alg_wc_mppu_translate]
Can be used in plugin options for WPML/Polylang translations.
Example
[alg_wc_mppu_translate lang="DE" lang_text="Message in German" not_lang_text="Message for all other languages"]
[alg_wc_mppu_translate lang="DE"]Message in German[/alg_wc_mppu_translate][alg_wc_mppu_translate not_lang="DE"]Message for all other languages[/alg_wc_mppu_translate]
[alg_wc_mppu]
Can be used only in “WooCommerce > Settings > Maximum Products per User > Formula” section.
Christian (verified owner) –
Unbelievable support! thanks a lot!!
WPFactory Plugins –
😉
Dipixel (verified owner) –
fast and effective
WPFactory Plugins –
Thanks 😉
Dani –
I have to say that support was top notch. And for some things that I was just too blind to see. Instead sending me to the documentation page to figure it out for myself or ignore the email altogether, they replied, told me how to do it directly.
When I couldn’t figure it out and seriously needed up, they were right there as well to go in and fix my site.
On top of the support the support, the plug-in is amazing. The amount of control you have of how, when, where, who can purchase and not purchase products is amazing.
Five stars across the board!
WPFactory Plugins –
😉
Jean-Francois Tellier (verified owner) –
I tested the free plugin, and I got an error, but the support has been fantastic! The offered me a patch that solved my problem. And they delivered a Pro version the day after with the patch included. Great works!
WPFactory Plugins –
Thanks 🙂
Philipp R. (verified owner) –
We’ve been using this plugin for more than two years now and it is doing a great job! And thumbs up for the really fast support crew!
WPFactory Plugins –
😉
Elaine Paxson (verified owner) –
This plugin does exactly what we need it to do. Support from Moshtafizur has been fantastic – helpful, detailed and friendly. Awesome.
WPFactory Plugins –
Thanks Elaine 🙂
Julian Stysis (verified owner) –
Great plugin, superb support!
Excellent plugin and does exactly what I need it to do.
The support has been phenomenal. They not only promptly fixed a couple of bugs I identified, but extended their product twice to include my feature requests. Will buy from them again and again!
WPFactory Plugins –
Thanks Julian 🙂
sawadeeamulet (verified owner) –
great and nice , 10/10
trust me guys, this the best plugin and best support that you all searching for.
i been tried for AxxxP , Wxxxx , Mxxxx plugin , none of these better than wpfactory.
WPFactory Plugins –
Thanks 🙂
veronica –
Should be able to Search Support Thread to help find already answered configuration questions.
Our store has 1000’s of free downloadable products and you cant limit the product allowed amount for all categories in the store.
Cant exclude a full category from the plugin also.
WPFactory Plugins –
Hi Veronica,
You can find already answered questions using the Support, FAQ and Developers tab. You can simply scroll the page or find any text with your browser.
You can assign all your products to a tag or category, and then you can limit the allowed amount for that tag.
It’s not possible to exclude a category for now. You can however use the same approach above we’ve suggested. Assign all products to a tag and then set the products that should have a different limit to another tag, and then set up only that tag.
Let me know if you need more help.
Anthony Mixides (verified owner) –
very simple plugin to setup and get working as we expected. thank you!
WPFactory Plugins –
😉
Diego (verified owner) –
Excellent, the support is the best. Super fast to solve problems or help you in whatever you need. Definitely a worthwhile subscription. They are always pending
Tommaso (verified owner) –
This plugin is fantastic, simple, light, compatible with all my other plugins (80 installed), and effective.
Perfect if you sell services and to limit problems related to order duplicaitons
Support Is brilliant and fast.
Strongly advised!
Tom Anbinder –
Thank you!
Ulf Tellstad (verified owner) –
Great plugin and very helpful support!
The plugin works, and when I wanted a feature that dident exist (different date ranges) the author worked it out.
Tom Anbinder –
Thank you!
han van (verified owner) –
a perfectly functioning plugin, but then we want something else, we always do 🙂 and Tom fixes it for you. amazing support!
Chuck Varabioff (verified owner) –
Amazing product, it is exactly what I was looking for. Very simple installation and configuration. Customer service is also lightning fast 🙂
Dino –
I always value a plugin not only by its features, but by its support. Tom has been fantastic at helping me get this plugin adapted to the specifics of my stores needs. I have tried another plugin prior and honestly their support is the worst. I will always pay more for a plugin/app/software if the reviews have killer support so I know Tom and this plugin deserved it. Not to mention the plugin itself is feature rich. Thanks Tom 🙂
Parm Gill (verified owner) –
Amazing support!
Badr (verified owner) –
Great product, great customer support.
gabriel_cc (verified owner) –
The plugin works great and the support is excellent, fast and comunicative.
Very happy with the purchase!
marco (verified owner) –
Excellent support from the team. Works as expected, and 1 on 1 support from the developer too. Thank you very much.
Adam –
Simply perfect!