Limit number of items your WooCommerce customers can buy (lifetime or in selected date range).
“Great plugin: 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 duplications
Support Is brilliant and fast. Strongly advised!” – ⭐⭐⭐⭐⭐ tommaso78
Pro Version | Support | Documentation & How to | Demo
Have you ever wanted to restrict the products your customer can purchase? Either in lifetime or in specific period?
While this might not be the case for everyone (since we all want to sell as much as we can), in many cases you want to maintain your inventory and guarantee fairness across your customers (specially when running massive promotions), and here comes a handy plugin to restrict the amount, quantities, or orders that each customer can place on your store.
In a nutshell, here is what you can do with this plugin:
And much more.
As basic as it sounds, the plugin allows you to restrict what your customers can purchase, restrictions/limits can be based on:
This method allows you to restrict the maximum number (quantity) of products a customer can purchase, restricting it by 10 for example will allow your customers to buy 10 of a single product, or 2 products with quantity of 5 each.
Use cases:
Limited Edition Items: You have a limited edition product, and you want to ensure that each customer can purchase only a maximum of 2 units to provide a fair opportunity for more customers to access the product.
Bulk Purchase Limit: To prevent abuse of discounts, you set a restriction of 10 units per order for a specific product, ensuring that customers cannot exploit bulk purchase discounts excessively.
This limits the number or orders a customer can place (lifetime or specified time range) on your store, useful when you want to restrict 1 order per month for example.
The plugin allows you to specify what order status(es) should be treated as a full order, like considering order in plugin restrictions when order status is “Completed” or “Processing” for example.
Use cases:
Subscription Services: Your store offers a subscription-based service, and you want to limit customers to one subscription order per month to align with your monthly billing cycle.
Pharmaceutical Prescriptions: In compliance with some pharmaceutical regulations, you can restrict customers to one order per month for prescription medications to ensure controlled and periodic dispensing.
This allows you to control maximum price (per product) customers can purchase, for example, you can restrict specific user roles from buying expensive products if they are new to your store and afraid of fraud or high returns.
Use cases:
New Customer Trial Period: For new customers, you want to limit the purchase of high-value items during the first month to minimize the risk of fraud or returns, setting a maximum purchase price for specific user roles.
Membership Tiers: Different user roles have varying purchase limits based on their membership tiers. Premium members, for instance, can buy higher-priced items compared to standard members.
If you need to restrict orders based on product weight or volume, the plugin helps in accomplishing that. This type of restrictions can be very useful in shipping constraints, when packages are set to specific dimensions (volume) or maximum weight per order.
Use cases:
Shipping Constraints: To comply with shipping regulations, you set restrictions on the maximum weight and volume per order. This ensures that customers cannot place orders that exceed the shipping constraints of your chosen carriers.
Fragile Items: Products with specific weight or volume constraints, such as fragile or bulky items, are restricted to ensure safe and cost-effective shipping, preventing customers from overloading orders with delicate items.
Set different restrictions & limitations for what your customers can purchase (order, quantity, prices, etc) based on user role, whether standard WordPress/WooCommerce roles, or custom ones you have.
Use cases:
Wholesale Customers: You have wholesale customers who buy in large quantities. Using the plugin, you can set higher product quantity limits for users with the “Wholesale” role, allowing them to place bulk orders while maintaining control over the order size.
VIP or Premium Members: You offer a VIP or premium membership program. Members with this special role enjoy the privilege of higher order limits and can purchase products at a higher price point, providing exclusive benefits to your loyal and high-value customers
New Customer Trial Period: To encourage new customers to explore your products, you set relaxed restrictions for users with the “New Customer” role during their first month. This allows them to experience a variety of offerings without immediate constraints on quantity or prices.
When you limit the maximum products a customer can buy, you need to define the period in which this restriction will be applied, i.e. is it a lifetime, in a week, in a month, and so on.
You can specify to reset the count for every customer for any specific period (in seconds, minutes, hours, days, or weeks), where the customers will start a new purchase limit when that specified period passes.
The plugin allows you to go further and control what restrictions to apply to guest users (non logged-in) in case you’re allowing guest checkout on your WooCommerce store.
You can select from multiple options to apply restrictions in these cases:
You can personalize the messages appearing to your customers on different locations, informing them about their quantities and limits.
Select to validate product quantities when they add items to their cart, so customers are aware of limits before reaching the cart.
On cart, you can also configure the plugin to show notifications either as notice, error, or success with custom messages using shortcodes available.
If customers have multiple items with wrong limits, you can also show multiple notices (one for each product).
You can prevent customers from accessing the checkout page on exceeded limits, and they will be redirected to the cart page in this case.
In addition, you can use more validation actions, like woocommerce_review_order_before_submit to validate the limits on checkout update.
Don’t leave your customers lost between error messages when trying to add to cart, show product limit information either as a notice, in product summary, or product description.
Customize the message by showing the remaining amount allowed for that product, and you can also include what the customer has already bought, using this format:
“The remaining amount for %product_title% is %remaining% (you’ve already bought %bought% out of %limit%).”
Add a separate tab on “My Account” where customers can see the purchased, remaining, and maximum amounts they can buy from each product.
The tab is customizable by name, id, and icon (from FontAwesome), and further customization can be applied to its text content as well.
The plugin isn’t only about restricting what customers can buy, it comes with variety of options that help admins better manage customers sales and see where they should/can enforce some limitations.
Admins can see and edit each user’s sales data in their profile pages, so admins can have general overview of calculated sales data (periodic or lifetime) for each customer.
Admins can also have the option of exporting all users sales data to CSV files, with custom column separator.
You can also select to export users sales data in a single row (for further analysis) and customize data separator and any extra metas you need in the report.
Even if you installed the plugin just today, you can run a tool to recalculate all previous data for your customers, and include outputs in plugin restriction settings you want to apply.
You can also start in a clean slate at any moment, delete all saved sales data for your customers (from plugin calculations, not actual data) and start implementing limitations after that.
“Great plugin & support: This plugin does exactly what it says it does. The creator Tom offers amazing support, and was very willing to help make sure everything was working perfectly. I definitely recommend this plugin and Tom’s support.” – ⭐⭐⭐⭐⭐ jburkhart24
“perfect service!: unbelievably good service. WPFactory quickly and accurately customized the plugin for us. This is how a plugin manufacturer must be. Thank you very much Pablo!” – ⭐⭐⭐⭐⭐ rawagmbh
All what’s listed above (and more) is available in the free version, but for those who would like to go further and beyond, we have a premium version of Maximum Products per User for WooCommerce Pro plugin.
The plugin by default deals with products quantities, the Pro feature allows you to add limits (all limits mentioned above) based on category & tag.
This option adds a new meta key in products categories & tags where you can specify the maximum limit you want to be enforced.
Want to specify a maximum amount by product and not quantity? You can configure the maximum amount/quantity of any particular product using this option, by having a new key in each product page to set the limit you need.
The default limiting options aren’t enough for you? Those who love math equations & formulas can use advanced methods to calculate limits for users, based on various shortcodes like:
user_role, payment_method, product_id, term_id, product_sku.
And much more.
In the Pro version, you can select to prevent guest customers from buying anything on your store, or allow regular guest checkout but prevent exceeding plugin limits.
Multiple options are also available to customize the error/notice messages to show to guest users.
You can even change “Add to cart” button text/label for guest users to something like “Login to purchase”, furthermore, you can hide products blocked from guest users from shop/category & search pages.
If you just want error messages to become notices, you can allow users to place orders with exceeding limits without preventing them from checkout.
The plugin works seamlessly with most plugins in their standard functionalities, but we’ve added several advanced compatibility options with Point of Sale for WooCommerce (by Actuality Extensions) & WPC Composite Products for WooCommerce (by WPClever) to provide more integration with these plugins.
WPFactory has a diverse range of plugins tailored to enhance your experience, some of our top-selling plugins are:
Min Max Step Quantity: Set minimum, maximum, step, and default product quantities, including dropdowns and decimal options on WooCommerce (Free version)
Cost of Goods for WooCommerce: Enhance profit maximization and financial management by accurately calculating your WooCommerce store’s COGS (Free version)
Maximum Products per User: Impose personalized purchase limits based on user roles and date ranges to manage customer buying behavior (Free version)
Order Minimum/Maximum Amount: Customize order limits by amount, quantity, weight, or volume, including user role, category, and more (Free version)
EU/UK VAT Manager for WooCommerce: Automate VAT compliance for your WooCommerce store, including settings and VIES validation for a seamless experience (Free version)
Email Verification for WooCommerce: Boost security and credibility by verifying customer emails, reducing spam, and improving email marketing (Free version)
Free Shipping Over Amount for WooCommerce: Encourage higher spending by offering free shipping based on amount, with a progress bar for customers (Free version)
Dynamic Pricing & Bulk Quantity Discounts: Advanced dynamic pricing and discount rules for WooCommerce, encouraging bulk purchases and driving more sales (Free version)
Follow these simplified steps to get your plugin up and running:
From the WordPress Admin Panel:
1. Navigate to “Plugins” > “Add New”.
2. Use the search bar and find the plugin using the exact name.
3. Click “Install Now” for the desired plugin.
4. Once the installation is finished, and click “Activate”.
Manual Installation Using FTP:
1. Download the desired plugin from WordPress.org.
2. Using your preferred FTP client, upload the entire plugin folder to the /wp-content/plugins/ directory of your WordPress installation.
3. Go to “Plugins” > “Installed Plugins” in your dashboard and click “Activate”.
Manual download & upload from the WordPress Admin Panel:
1. Download the desired plugin in a ZIP format.
2. On your site, navigate to “Plugins” > “Add New” and click the “Upload Plugin” button.
3. Choose the downloaded plugin file and click “Install Now.”
4. After the installation is complete, click “Activate”.
Post-Activation:
Once activated, access the plugin’s settings by navigating to “WooCommerce > Settings” and look for the relevant tab.
Yes, it’s possible, but it’s a bit of a workaround. You’ll need to assign all your products to some category or tag. After that you need to enable “Limits > Per product category” (or “Limits > Per product tag“), and then set “Limit per user” option for that category (or tag) in “Products > Categories > Your category > Edit“.
[alg_wc_mppu_user_terms_limits]
and [alg_wc_mppu_user_product_limits]
shortcodes.alg_wc_mppu_datetime_to_compare
.wc_get_orders()
to avoid problems with HPOS.Alg_WC_MPPU_Core
.Alg_WC_MPPU_Core::$multilanguage
in Alg_WC_MPPU_Core
“.[alg_wc_mppu_user_bought]
doesn’t work if the formula option is not enabled.is_product
from alg_wc_mppu_user_bought
is not consistent.Alg_WC_MPPU_Shortcodes
.show_restrictions_col
param for the [alg_wc_mppu_user_product_limits] shortcode. Default value is “true”.Alg_WC_MPPU_Core::get_max_qty_for_product()
.Fix – error with [user_product_limits_shortcode] condition.
is_user_logged_in()
in some circumstances.is_user_logged_in()
in some circumstances.identify guests by checkout billing email address
.product_limit_meta
.show_unbought
parameter as false
.[alg_wc_mppu_user_product_limits]
.alg_wc_mppu_order_data_saved
.user_id
from [alg_wc_mppu_current_product_limit]
shortcode is not working.class-alg-wc-mppu-pro.php
.is_downloadable
and is_virtual
checks.[alg_wc_mppu_current_product_limit]
possibly triggers error on admin.[alg_wc_mppu_current_product_limit]
triggers error on admin.show_unbought
parameter performance from [alg_wc_mppu_user_product_limits]
shortcode when used as false
.limit_type
attribute to [alg_wc_mppu]
shortcode. Allowed values: grouped
, individual
. Default: individual
. It has to be used with multiple term ids or product ids. Example: [alg_wc_mppu limit="5" limit_type="grouped" term_id="77,96"]
.alg_wc_mppu_date_to_check
filter.[alg_wc_mppu_user_product_limits]
won’t show “remain” and “bought” columns.swpm_membership_id
param to [alg_wc_mppu]
shortcode, adding compatibility to the WordPress Membership Plugin.bought_value
parameter to [alg_wc_mppu_user_product_limits]
shortcode. Possible values: smart
, per_product
. Default value set as smart
.show_unbought
parameter to [alg_wc_mppu_user_product_limits]
shortcode. Default is true
.show_unbought
parameter to [alg_wc_mppu_user_terms_limits]
shortcode. Default is true
.alg_wc_mppu_user_product_limits_item_validation
filter to [alg_wc_mppu_user_product_limits]
shortcode.alg_wc_mppu_user_terms_limits_item_validation
filter to [alg_wc_mppu_user_terms_limits]
shortcode.[alg_wc_mppu_current_product_limit]
shortcode param from ‘template’ to ‘msg_template’.condition
to alg_wc_mppu_current_product_limit
shortcode. Default is empty. Example: %remaining% == 0
.sumo_membership_plan
param to [alg_wc_mppu]
shortcode.memberpress_plan_id
param to [alg_wc_mppu]
shortcode.delete_meta_data()
function.is_product
boolean param from [alg_wc_mppu_user_bought]
shortcode.return
param to [alg_wc_mppu_user_bought]
shortcode. Possible values: amount_bought
, boolean
.Y-m-d
date on date_range
parameter from [alg_wc_mppu_user_bought]
shortcode.Alg_WC_MPPU_Core::get_date_to_check()
to check for a fixed Y-m-d
date.alg_wc_mppu_validate_on_add_to_cart_quantity_do_add
filter.alg_wc_mppu_totals_data_increase_qty
filter.alg_wc_mppu_totals_data_decrease_qty
filter.alg_wc_mppu_totals_data
filter.alg_wc_mppu_orders_data_increase_qty
filter.woocommerce_before_checkout_form
.alg_wc_mppu_output_notices_args
filter.max_qty_by_formula()
function.hide_products_by_id
param for the [alg_wc_mppu_user_product_limits]
shortcode allowing to hide the products from the list.alg_wc_mppu_user_terms_limits
shortcode with taxonomy
parameter that can be set as product_cat
or product_tag
.is_plugin_active()
function.%first_order_date_exp_timeleft%
is not returning the correct time left for expiring.output_template
param to alg_wc_mppu_current_product_limit
shortcode having <span class="alg-wc-mppu-current-product-limit">{output_msg}</span>
as default value.is_product_blocked_for_guests()
function.[alg_wc_mppu_customer_msg]
shortcode with bought_msg
, not_bought_msg
, and bought_msg_min
params.[alg_wc_mppu_customer_msg]
shortcode and allow its use there.alg_wc_mppu_is_product_blocked_for_guests
hook.%payment_method_title%
placeholder added.payment_method
shortcode attribute added.no
). This changes the previous behaviour in plugin, where lifetime data was always retrieved from totals.alg_wc_mppu_data_product_or_term_id
filter added.alg_wc_mppu_get_cart_item_amount_by_term
filter added.alg_wc_mppu_get_cart_item_amount_by_parent
filter added.alg_wc_mppu_cart_item_amount
filter added.alg_wc_mppu_user_already_bought_do_count_order
filter added.alg_wc_mppu_user_already_bought
filter added.alg_wc_mppu_get_max_qty
– Filter applied to empty (i.e. zero) result as well now.product_sku
attribute – Product variable is now correctly reset for each new product check.checkbox
to radio
).checkbox
to select
).alg_wc_mppu_get_notice_placeholders
filter added.load_plugin_textdomain
moved to the init
hook.[alg_wc_mppu_user_product_limits]
– Negative values replaced with zero in “Remaining” and “Max” columns.-1
) in all limits settings now.[alg_wc_mppu_user_bought]
shortcode added.[alg_wc_mppu_current_product_limit]
shortcode) – Placeholders added: %in_cart%
, %bought_plus_in_cart%
, %remaining_minus_in_cart%
; also (for consistency): %adding%
, %in_cart_plus_adding%
, %bought_plus_in_cart_plus_adding%
, %remaining_minus_in_cart_minus_adding%
.alg_wc_mppu_get_first_order_date_exp
filter added.product_sku
attribute added to the [alg_wc_mppu]
shortcode.[alg_wc_mppu_placeholder]
shortcode added.%first_order_date_exp%
, %first_order_date%
– Getting date and time format from WordPress settings now (i.e. instead of hard-coded Y-m-d H:i:s
).[alg_wc_mppu_current_product_limit]
, [alg_wc_mppu_term_limit]
shortcodes) – %first_order_date%
, %first_order_amount%
, %first_order_date_exp%
, %first_order_date_exp_timeleft%
placeholders added.[alg_wc_mppu]
– Getting time for start_date
and end_date
shortcode attributes according to “Advanced > Time function” option now.%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%
, %term_name%
placeholders added.is_downloadable
, is_virtual
attributes added to the [alg_wc_mppu]
shortcode.start_date
, end_date
, not_date_limit
attributes added to the [alg_wc_mppu]
shortcode.[alg_wc_mppu_term_limit]
shortcode added.alg_wc_mppu_date_to_check
filter – product_or_term_id
, current_user_id
and is_product
params added.limit
attribute vs deprecated max_qty
attribute) fixed.pcs.
removed; placeholders changed (%max_qty%
to %limit
, %qty_already_bought%
to %bought%
, %remaining_qty%
to %remaining%
)).product-limits
).Product limits
).[alg_wc_mppu_max_qty]
to [alg_wc_mppu]
); max_qty
attribute renamed to limit
.[alg_wc_mppu_user_product_quantities]
shortcode renamed to [alg_wc_mppu_user_product_limits]
.[alg_wc_mppu_current_product_quantity]
shortcode renamed to [alg_wc_mppu_current_product_limit]
.no
).Alg_WC_MPPU_Core::check_quantities()
).[alg_wc_mppu_current_product_quantity]
shortcode added.get_user_already_bought_qty()
– Making sure that the returned value is always numeric (i.e. returning zero instead of empty).alg_wc_mppu_check_quantities_for_product
filter – Now applying filter to false
results also.[alg_wc_mppu_user_product_quantities]
shortcode added.3600
(was 1
).alg_wc_mppu_save_quantities
filter added.alg_wc_mppu_calculate_data_wc_get_orders_args
filter added.alg_wc_mppu_check_quantities_for_product
filter added.membership_plan
shortcode attribute added.alg_wc_mppu_get_cart_item_quantities
filter added.alg_wc_mppu_validate_on_add_to_cart_quantity
filter added.alg_wc_mppu_save_quantities_item_qty
filter added.alg_wc_mppu_get_max_qty
filter added.alg_wc_mppu_date_range
filter added.alg_wc_mppu_date_to_check
filter added.[alg_wc_mppu_translate]
shortcode added (for “Customer message”).