*** WooCommerce Mix and Match Products Changelog***
2025.12.06 - version 2.8.5
* Fix indent of child items on classic/non-block order received. Closes #590 and Print Invoices child item duplication.
2025.12.02 - version 2.8.4
* Fix: Incorrect calculation of min/max price strings for per-item-priced containers, introduced by 76182b865287063411d30a795cd253a43355f2c2.
* Fix: Add order=>include to get_terms() in Store API response to respect saved term order of child items.
* Tweak: Update Query Monitor compatibility module to use core QM functionality and styles.
* Tweak: Add styles for Twenty Twenty Five theme. Closes #586.
* Tweak: Give grid style to Variation
for child products. Closes #587.
2025.10.29 - version 2.8.3
* Fix: Undefined WP_MNM_Cache class when using Not Sold Separately mini-extension.
* Fix: Order of child categories in Store API response respects saved order.
* New: Query Monitor compatibility module to log database queries made by Mix and Match Products. Requires Query Monitor plugin to be active.
* Tweak: Update admin strings from WooCommerce Mix and Match Products to Mix and Match Products for WooCommerce.
2025.10.20 - version 2.8.2
* Fix: Hide price of child items in cart block if not priced per item.
* Tweak: Add theme button class to edit selections button in cart block.
* Tweak: Improve Flatsome theme compatibility for plus/minus buttons.
2025.10.08 - version 2.8.1
* New: Introduce minimalist cart display mode for cart block and side cart blocks. Enable via `add_filter( 'wc_mnm_enable_minimal_cart_display', '__return_true' );`
* Fix: Fatal error: Uncaught Exception stock validtation in trait-wc-mnm-container-validation.php.
* Fix: Revert wc()->is_store_api_request() usage. It's giving false postives.
* Fix: Incorrect block theme detection logic was hiding full-width layouts for non-block themes.
* Fix: Incorrect context sent to `wc_mnm_container_validation_context` filter was forcing add to cart stock checking on `woocommerce_check_cart_items`.
* Tweak: Add theme button classes to View Cart error notice.
2025.10.02 - version 2.8.0
* IMPORTANT: PHP 7.4 is required | WordPress 6.2.0 is required | WooCommerce 8.2.0.
* Update: Please update any mini-extensions to their latest versions.
* Update: Tested up to WooCommerce 10.2.0.
* Update: Strings updated, please check your translations.
* New: Use transients to store DB queries. Improves single page and cart block performance.
* New: Introduce `sanitize_configuration()`, `is_valid_configuration()`, and `validate_configuration()` methods to `WC_Product_Mix_and_Match` class. Use these instead of `WC_MNM_Cart` methods.
* New: Add support for adding Mix and Match products to existing subscriptions where supported.
* Fix: When no quantity restrictions, still check for changes between add to cart|cart config and allowed config. Closes #555.
* Breaking: `wc_mnm_child_item_quantity_name_prefix` filter is deprecated with no exact replacement though `wc_mnm_quantity_name_prefix` will be similar with different args.
* Tweak: Reduce order notes created when editing containers is admin. Use `add_filter( 'wc_mnm_log_container_config_changes_in_order_notes', '__return_false' );` to disable notes entirely. Closes #552.
* Tweak: Revert back to using wc_mnm_get_child_input_name() to generate input names. Child item class method `get_input_name()` is deprecated.
* Tweak: Update `single-product/mnm/grid/mnm-items-wrapper-open.php` and `single-product/mnm/grid/mnm-items-wrapper-close.php` template to use `woocommerce_product_loop_start()` and `woocommerce_product_loop_end()` respectively to open/close child item loops when those provide elements. Improves theme compatibility.
* Tweak: Default to removing .has-flex class from container grid. Use `add_filter( 'wc_mnm_grid_has_flex_layout', '__return_true' ); filter to re-enable. Should improve theme compatibility.
* Tweak: Remove layout override options from individual products unless currently in use. Can be restored with `add_filter( 'wc_mnm_show_layout_override_options', '__return_true' );`
* Tweak: Replace "Starting at $x" strings with core wc_get_price_html_from_text().
* Tweak: Stop showing discounts and sale ranges together by default, ~$5.00 – $9.00~ $10.00 – $20.00. Can restore with `add_filter( 'wc_mnm_container_show_discounted_range_price', '__return_true' );`
2025.06.16 - version 2.7.11
* Fix: wc_current_theme_is_fse_theme() is deprecated, use wp_is_block_theme() if it exists.
* Fix: Untranslatable Free! string.
* Fix: Prevent updating container configuration from admin or customer subscription if there's no actual configuration change.
* Tweak: Simplify order notes when editing container configuration from admin or customer subscription editing.
2025.04.02 - version 2.7.10
* Fix: Fatal error in compatibility with Force Sells when displaying force sells on a child item product.
* Fix: Incorrect add to cart error when mix and match container has unsynced force sells.
2025.03.17 - version 2.7.9
* Update: Tested up to WooCommerce 9.9.0.
* New: Force Sells for WooCommerce compatibility.
* Fix: Incorrect class instantiation in admin when product is not mix-and-match type.
* Fix: Escape any remaining translatable strings.
* Change: Move `woocommerce_after_cart_item_quantity_update` callback to earlier priority for Force Sells compatibility.
* Change: `wc-add-to-cart-mnm` script params use booleans instead of yes|no strings. Advanced script integrations should re-test.
* Tweak: Update sass files to use Dart Sass.
2025.01.17 - version 2.7.8
* Fix: Write error to WooCommerce>Status>Logs if child item cannot be saved to DB.
* Fix: Show an admin notice in product editor if child items cannot be saved.
* Fix: Show update notice in product metabox.
* Tweak: Harden foreign key checking on update.
2024.08.22 - version 2.7.7
* Update: Tested up to WooCommerce 9.2.0.
* Fix: Remove image link from thumbnail if theme does not support wc-product-gallery-lightbox.
* Fix: Set validation context to cart if $_GET['update-container'] is set. Fixes display of button text in mobile footer plugin when editing in cart.
* Fix: Change form validation context to edit when switching subscriptions.
2024.08.07 - version 2.7.6
* Fix: Cart validation error when adding multiples of pack with same configuration.
2024.08.05 - version 2.7.5
* Fix: Show parent thumbnail for variations without thumbnail.
2024.07.26 - version 2.7.4
* New: Introduce styling for Mix and Match products in Receipt Rendering engine.
* Fix: Resolved a fatal error triggered with WooCommerce 9.1, when tracking and legacy Order data storage were enabled.
* Fix: Harden validation of mix and match container that's already in cart.
* Fix: Show placeholder image if child product has no thumbnail.
* Tweak: Slight simplification to add to cart validation error strings( "You have selected too many items" and "You have selected too few items"). Double check your translations for to
2024.06.29 - version 2.7.3
* Fix: Incorrect quantity input value when editing a mix and match container in cart. #536.
* Fix: Remove permalinks from child items in the cart block.
* Tweak: As a last resort, attempt to get posted quantity from string inputs, ie: "mnm_quantity[99]" which commonly happens when themes attempt ajax add to cart.
* Tweak: Rename wp.hooks action `wc-mnm-initialize.${product_type}` to `wc.mnm.initialize.${product_type}`
* Tweak: Tell `wc-add-to-cart` script params to redirect to cart when editing a container in the cart.
2024.06.26 - version 2.7.2
* Fix: When creating duplicate product, limit duplicating child items to custom DB table if using products as contents source.
* Fix: Missing container contents list in checkout block on initial page load.
* Fix: Fix pay-for-order conflict with WooPayments.
2024.05.11 - version 2.7.1
* New: Introduce `wc_mnm_container_get_cart_edit_link` filter and add APFS subscription parameters to edit in cart link.
* Fix: Handle missed dynamic properties missed in 2.7.0 objects.
* Tweak: Update edit-container.php template.
* Tweak: Parameter for `wc.mnm.initialize.${type}` wp.hook is now an object.
2024.04.22 - version 2.7.0
* Important: Requires WordPress 5.0.
* New: Eliminated dynamic properties on objects. Resolves warning notices in PHP 8.2+. (Important! If using Not Sold Separately, you will need to upgrade to 2.4 of later: https://github.com/kathyisawesome/wc-not-sold-separately/releases/latest)
* New: Introduce wp.hooks actions `wc-mnm-initialize.${product_type}` and `wc.mnm.container.container-updated` and filter `wc.mnm.container.update_order_item_data` for compatibility with mini-extensions. NB: This replaces the experimental `wc_mnm_update_container_order_item_data` triggerHandler and the Javascript `wc-mnm-initialize.${product_type}` custom event in the order metabox scripts.
* Fix: Show child item availability/stock status if container has insufficient stock.
* Tweak: Add grayscale effect to out of stock child items.
* Tweak: Style compatibility tweak for quantity input alignment in Twenty TwentyFour theme.
2023.12.16 - version 2.6.1
* Fix: Adding/editing container contents in Order admin.
2023.12.16 - version 2.6.0
* New: Declare support for Cart and Checkout blocks.
* New: Initial support for Store API add container to cart. #474.
* New: Extend product data response for Store API. Consumed by mini-extensions.
* Fix: Child product modal gallerys due to core WooCommerce using the Script API strategy feature to defer front-end scripts in WordPress 6.3+.
* Tweak: CSS rules for notices in Twenty Twentyfour theme.
2023.12.09 - version 2.5.2
* Fix: Properly close markup after edit in cart link.
2023.12.01 - version 2.5.1
* Fix: Incorrect validation always preventing packs containing any sold individually child item from being added to cart. #516.
* Tweak: Use wc_mnm_is_product_container_type() in store API class for future extensibility.
* Tweak: Always add the validation context as data attribute on to the form.
2023.09.27 - version 2.5.0
* Update: Tested up to WooCommerce 8.2.0.
* Fix: Update all templates for safer string escaping.
* Fix: Update KIA Customizer Range Input package to better limit number of columns in Customizer input.
* Fix: Prevent overfilling of pack on pre-filled packes (pre-filled by URL param).
* Fix: Enqueue order editing scripts on Subscriptions page when using HPOS.
* Tweak: Use admin theme colors in product edit admin.
* Tweak: Slight change to when global mix and match product object is generated in edit screen.
2023.07.11 - version 2.4.10
* Fix: Format the container line total for per-item priced containers with correct decimal setting in the cart block.
* Fix: Order item editing script not loaded on HPOS new order page.
* Fix: Introduce WC_MNM_Core_Compatibility::get_post_or_object_meta() to better support older versions of WC.
* Fix: Suppress item removed popup notifications for child items in Cart Block when Container is removed. #505.
* Tweak: Important: The 'Form Location' option is no longer supported when using a block theme. Use the following snippet to force its use: 'add_filter( 'wc_mnm_has_legacy_product_template', '__return_true' );' #503.
* Tweak: Hide points and rewards message when container has a minimum of 0 points.
* Tweak: Rename css class for child items in documents generated by Print Invoices and Packing lists.
2023.07.03 - version 2.4.9
* Fix: Problem with plus/minus buttons not being able to reset back to 0.
* Fix: Default to using Astra's plus/minus buttons when active.
2023.06.28 - version 2.4.8
* Fix: Prevent double display of "Edit Selections" button that was introduced by WooCommerce 7.8.
2023.06.27 - version 2.4.7
* Fix: PHP Fatal error: Uncaught Error: Attempt to modify property "data" in REST API product response in PHP 8.1.
2023.06.13 - version 2.4.6
* Update: Tested up to WooCommerce 7.7.0.
* Fix: Use `registerCheckoutFilters` graduated filter in Blocks plugin.
* Fix: Use WC_MNM_Helpers:get_supported_product_types() to define excluded product types automatically in metabox product selector.
* Fix: Allow input quantity to decrease if the container is overfill for any reason.
* Fix: Update single-product/mnm/mnm-product-quantity.php template to remove errant markup.
* Fix: Legacy meta class fatal error when trying to read Pre-1.10 data.
* Fix: Hide child item's stock remaining when parent is out of stock. #499.
* Dev: Rename `wc_mnm_supported_products` filter to `wc_mnm_supported_product_types`
2023.04.24 - version 2.4.5
* Fix: Compatibility with Astra theme's quick view feature.
* Dev: Move conditional logic for customizer settings to their respective callback functions for broader compatibility.
2023.04.24 - version 2.4.4
* New: Add `wc_mnm_child_item_rest_response` filter to customize REST response of child items.
* Fix: Change front end script event listeners to catch pure Javascript events on the quantity inputs.
2023.03.02 - version 2.4.3
* Fix: Vertical alignment of quantity inputs in grid mode (for most themes).
* Fix: Tweak WoodMart theme module to support different column numbers.
2023.03.01 - version 2.4.2
* Fix: Previous quantity is not correctly calculated when it's 0. #495.
* Fix: Declare table display for table element.
2023.02.10 - version 2.4.1
* New: Add string to prompt users to change configuration when editing container.
* Fix: Switch admin notes check to a daily schedule.
2023.02.09 - version 2.4.0
* New: Optional mobile-optimized layout for small screens, see settings in Customizer.
* New: Optional plus/minus buttons, see settings in Customizer.
* New: Display category description when listing child products by category.
* Fix: Reapply discounts/coupons after editing a Mix and Match product in order admin.
* Dev: Move category title text to a template.
* Dev: Move template includes from after_setup_theme to template_redirect hook for better compat with Customzier.
* Dev: Refactor WC_Mix_and_Match_Stock_Manager and WC_MNM_Child_Item classes. Eliminate need to re-instantiate product objects and easier extensibility for validating in other contexts (such as weight). But extreme caution if you were using these classes for any custom purposes.
2023.01.19 - version 2.3.1
* Fix - Fixed double subscription discount on container cart prices when using per-item pricing. #434.
2023.01.16 - version 2.3.0
* IMPORTANT: PHP 7.2 is required.
* Update: Tested up to WooCommerce 7.3.0.
* New: Separate out "X in stock" remaining text and display in child item details, updated single-product/mnm/mnm-product-quantity.php template.
* Fix: Correctly parse hierarchical child category IDs. Closes #470.
* Fix: Add static className to item data for better blocks compat. Closes #468.
* Fix: Missing export data for layout override and weight calculation.
* Fix: Flatsome compatibility for equal-height product images.
* Fix: Disable per-product overrides when viewing customizer.
* Fix: Default value of customizer settings for show thumbnails/short-description.
* Fix: Fixed a fatal error that was triggered when using PHP v8 and using Cart/Checkout Blocks.
* Fix: Rename tabular layout 'product-name' header cell to 'product-details'.
* Tweak: Audit CSS styles to remove as much explicit padding/margin as possible.
* Tweak: Add a close icon to font family for use by mini-extensions.
* Tweak: Add woocommerce_product_loop_title_classes filter for parity with core.
* Tweak: Adjust front-end styles for mobile first.
* Tweak: Center align quantity inputs in Storefront theme.
* Tweak: container.child_items in script is now an ARRAY. Please check if doing very advanced custom Javascript modifications.
* Dev: Rename WC_MNM_Container.validation_context property to validation_mode.
* Dev: Re-key wc_mnm_child_item_data_attributes to not use 'data-' prefix. It will be auto-added.
* Dev: Introduce wc_mnm_center_align_quantity filter.
2022.11.07 - version 2.2.2
* Fix: Double-charging for child items when ordering again. #466.
* Fix: Front-end validation allow overfilled container to be reduced. #461.
* Fix: Child Category IDs are not imported. #467.
* Tweak: Make get_child_item_by_product_id() method public.
2022.10.24 - version 2.2.1
* Tweak: Use core cart functions for detecting parent/child relationships in cart item filters.
* Tweak: Add wrapping when doing wc_ajax_mnm_update_container_order_item. For compat with mini-extensions.
* Tweak: Admin edit orders, handle updates with no changes.
2022.10.24 - version 2.2.0
* Important: mnm-add-to-cart-wrap.php template is deprecated.
* Update: Tested up to WooCommerce 7.0.0.
* Update: Declare compatibility with High Performance Order Tables (HPOS).
* New: Convert container order item editing to use reuasable ajax callbacks and templates. Fixes display issues in admin and allows for extensibility.
* New: Add get_permalink() and get_title() methods/filters to WC_MNM_Child_Item class.
* New: 2nd parameter to WC_Product_MNM_Data_Store_CPT::query_child_items_by_container() to optionally change format of returned data.
* New: Add `wc_mnm_category_caption` hook for displaying info about the category titles when using category contents.
* Fix: Invalid array_key_exists() syntax in custom db 2.0 upgrade function.
* Fix: Flatsome theme grid classes.
* Fix: Stop saving duplicate meta keys. Upgrade routine to clean up duplicate data.
* Fix: Restore photoSwipe modal for themes that support it.
* Fix: Thumbnail and short description live previews in Customizer.
* Fix - Prevent child item stock from being reduced when editing Mix and Match products in configurable orders.
* Tweak: Change CoCart validation to use built-in validation methods. NB: This means the loss of CoCart specific-filters/error codes, please test accordingly.
* Tweak: Remove quantity inputs for child items in cart block (show per container quantity in title).
* Tweak: Change selections config to per-container quantity in checkout block.
* Tweak: Add styles to order edit modal.
* Dev: Modify $.wc_mnm_form() script to 1. not require passing objects to initialize, 2. define properties in intialize() method so they can be reattached. 3. return the current element for script chaining.
* Dev: Introduce `wc_mnm_product_container_types` filter for testing if product is Mix and Match type. For future extensibilty.
* Dev: Admin functions for generating enhanced searches and toggle fields.
* Dev: Admin Simplify relational hide/show fields in metabox via classnames.
* Dev: Introduce wc_mnm_form_classes filter for