{"id":320769,"date":"2026-06-01T13:01:46","date_gmt":"2026-06-01T13:01:46","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/lindymoq-moq-settings-for-products-in-surecart\/"},"modified":"2026-06-03T07:47:40","modified_gmt":"2026-06-03T07:47:40","slug":"lindymoq","status":"publish","type":"plugin","link":"https:\/\/th.wordpress.org\/plugins\/lindymoq\/","author":17741788,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.2.0","stable_tag":"1.2.0","tested":"7.0","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"LindyMOQ: MOQ Settings for Products in SureCart","header_author":"aurefau","header_description":"Set a minimum order quantity per SureCart product or variant. Enforces it on the product page, blocks checkout server-side, and disables purchasing when stock falls below the MOQ (unless SureCart's \"continue selling when out of stock\" is on).","assets_banners_color":"","last_updated":"2026-06-03 07:47:40","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/wordpress.org\/plugins\/lindymoq\/","header_author_uri":"https:\/\/profiles.wordpress.org\/aurefau\/","rating":5,"author_block_rating":0,"active_installs":0,"downloads":53,"num_ratings":1,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.2.0":{"tag":"1.2.0","author":"aurefau","date":"2026-06-03 07:47:40"}},"upgrade_notice":[],"ratings":{"1":0,"2":0,"3":0,"4":0,"5":1},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3556766,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3556766,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.2.0"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[282,265585,177616,265335,218637],"plugin_category":[45],"plugin_contributors":[264509],"plugin_business_model":[],"class_list":["post-320769","plugin","type-plugin","status-publish","hentry","plugin_tags-ecommerce","plugin_tags-increments","plugin_tags-minimum-order-quantity","plugin_tags-moq","plugin_tags-surecart","plugin_category-ecommerce","plugin_contributors-aurefau","plugin_committers-aurefau"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/lindymoq\/assets\/icon-128x128.png?rev=3556766","icon_2x":"https:\/\/ps.w.org\/lindymoq\/assets\/icon-256x256.png?rev=3556766","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p><strong>LindyMOQ<\/strong> lets you set a minimum order quantity (MOQ) per SureCart product or per variant, and\/or sell only in fixed multiples \u2014 for example in packs of 10, so customers can order 10, 20, 30, 40 \u2026 but nothing in between. Customers can order the minimum or more \u2014 but checkout is blocked if they try to go below it or off the pack size.<\/p>\n\n<p>Both settings are managed from a dedicated settings page in WordPress admin (Settings \u2192 LindyMOQ), independent of SureCart's product editor.<\/p>\n\n<h4>Features<\/h4>\n\n<ul>\n<li>Set a minimum order quantity per product, or per individual variant<\/li>\n<li>Sell in fixed multiples (increments) per product or variant \u2014 e.g. packs of 10 \u2192 10, 20, 30, 40 \u2026<\/li>\n<li>Combine both: a minimum of 20 with multiples of 10 yields 20, 30, 40 \u2026; set only the multiple and it also becomes the minimum<\/li>\n<li>Product-page quantity selector is locked to the minimum and the + \/ \u2212 buttons jump by the pack size \u2014 no flicker, no client-side bypass<\/li>\n<li>Checkout is blocked server-side when the quantity is below the minimum or not a valid multiple<\/li>\n<li>Clear error message shown at checkout when the minimum or pack size is not met<\/li>\n<li>Quantities are aggregated across all line items before comparing to the minimum<\/li>\n<li>Stock-aware: current stock is shown next to each MOQ in the settings page, with a red \"below MOQ\" flag when stock is insufficient<\/li>\n<li>Strict stock gate on the product page: when stock is below the MOQ, the buy button is disabled and an \"understocked \u2014 please check back soon\" message is shown<\/li>\n<li>Honours SureCart's \"continue selling when out of stock\" setting \u2014 when enabled, the stock gate is bypassed so backorders go through normally<\/li>\n<li>Simple settings page \u2014 no complicated configuration<\/li>\n<\/ul>\n\n<h4>Requirements<\/h4>\n\n<p><a href=\"https:\/\/wordpress.org\/plugins\/surecart\/\">SureCart<\/a> must be installed, active, and connected to the SureCart API.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>lindymoq<\/code> folder to <code>\/wp-content\/plugins\/<\/code><\/li>\n<li>Activate the plugin in <strong>WordPress \u2192 Plugins<\/strong><\/li>\n<li>Go to <strong>Settings \u2192 LindyMOQ<\/strong><\/li>\n<li>Enter the minimum quantity and\/or the \"sell in multiples of\" value for each product, then click <strong>Save settings<\/strong><\/li>\n<\/ol>\n\n<p>SureCart must be installed, active, and connected before the settings page can list your products.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20work%20with%20surecart%20product%20variants%3F\"><h3>Does this work with SureCart product variants?<\/h3><\/dt>\n<dd><p>Yes. Products with variants show one minimum input and one \"sell in multiples of\" input per variant. Each setting applies to that specific variant's quantity.<\/p><\/dd>\n<dt id=\"can%20i%20sell%20products%20in%20fixed%20packs%20%28e.g.%20only%20in%20multiples%20of%2010%29%3F\"><h3>Can I sell products in fixed packs (e.g. only in multiples of 10)?<\/h3><\/dt>\n<dd><p>Yes. Set the \"Sell in multiples of\" field to <code>10<\/code> and customers can only order 10, 20, 30, 40 \u2026 On the product page the + \/ \u2212 buttons jump by the pack size, and any other quantity is corrected. If you leave the minimum blank, the pack size also becomes the minimum.<\/p><\/dd>\n<dt id=\"how%20do%20the%20minimum%20and%20the%20multiple%20work%20together%3F\"><h3>How do the minimum and the multiple work together?<\/h3><\/dt>\n<dd><p>They are independent. If you set a minimum of 20 and a multiple of 10, valid quantities are 20, 30, 40 \u2026 (the minimum is rounded up onto the nearest valid multiple). Set only the minimum for a plain MOQ, only the multiple for fixed packs, or both.<\/p><\/dd>\n<dt id=\"what%20happens%20when%20a%20customer%20orders%20below%20the%20minimum%20or%20off%20the%20pack%20size%3F\"><h3>What happens when a customer orders below the minimum or off the pack size?<\/h3><\/dt>\n<dd><p>The product-page quantity selector starts at the minimum, cannot go below it, and only moves in valid steps. If a customer somehow reaches checkout with an invalid quantity, checkout is blocked server-side and they see a clear error message.<\/p><\/dd>\n<dt id=\"does%20this%20apply%20across%20multiple%20line%20items%3F\"><h3>Does this apply across multiple line items?<\/h3><\/dt>\n<dd><p>Yes. Quantities are summed per product (and per variant) across all line items before comparing to the minimum and the pack size.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20i%20have%20less%20stock%20than%20the%20moq%3F\"><h3>What happens if I have less stock than the MOQ?<\/h3><\/dt>\n<dd><p>By default, the buy button is disabled on the product page and a short \"minimum order is X units, currently understocked\" message is shown, so customers can't add an order you can't fulfil. In the settings page, the affected MOQ row shows a red \"below MOQ\" flag next to the stock count so you can spot the conflict.<\/p>\n\n<p>If SureCart's \"continue selling when out of stock\" is enabled for the product, the stock gate is bypassed entirely \u2014 the customer can still buy and you handle the backorder.<\/p><\/dd>\n<dt id=\"my%20product%20list%20is%20empty%20%E2%80%94%20why%3F\"><h3>My product list is empty \u2014 why?<\/h3><\/dt>\n<dd><p>Make sure SureCart is active and connected to its API. The settings page fetches products via SureCart's PHP SDK, which requires an active API connection.<\/p><\/dd>\n<dt id=\"what%20is%20the%20maximum%20number%20of%20products%20supported%3F\"><h3>What is the maximum number of products supported?<\/h3><\/dt>\n<dd><p>The settings page fetches all non-archived products in a single request. If you have a very large catalog and products are missing, contact the plugin author.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>New: \"Sell in multiples of\" setting per product or variant \u2014 sell only in fixed packs (e.g. multiples of 10 \u2192 10, 20, 30 \u2026)<\/li>\n<li>New: minimum and multiple can be combined (e.g. min 20 + multiples of 10 \u2192 20, 30, 40 \u2026); set only the multiple and it also becomes the minimum<\/li>\n<li>New: product-page + \/ \u2212 buttons jump by the pack size, and off-pack quantities are corrected automatically<\/li>\n<li>New: checkout validation rejects quantities that are not a valid multiple of the pack size<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>New: stock-aware admin display \u2014 current stock shown next to each MOQ, flagged red when below MOQ<\/li>\n<li>New: product-page buy button is disabled with a clear \"understocked\" message when stock is below the MOQ<\/li>\n<li>New: respects SureCart's \"continue selling when out of stock\" setting (gate is bypassed when on)<\/li>\n<li>Fix: quantity input value-trap is now re-applied on every render cycle, so the Interactivity API can no longer swap in an un-trapped input<\/li>\n<li>Fix: value-trap no longer attaches to non-input web components (avoids an \"Illegal invocation\" landmine)<\/li>\n<li>Fix: plugin action link no longer depends on the folder being named <code>lindymoq<\/code><\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<\/ul>","raw_excerpt":"Set a minimum order quantity, and\/or sell in fixed multiples (packs of 10), per SureCart product or variant. Enforced on the product page and at check &hellip;","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/th.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/320769","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/th.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/th.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/th.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=320769"}],"author":[{"embeddable":true,"href":"https:\/\/th.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/aurefau"}],"wp:attachment":[{"href":"https:\/\/th.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=320769"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/th.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=320769"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/th.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=320769"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/th.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=320769"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/th.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=320769"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/th.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=320769"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}