WooCommerce Wishlists v2.4.0
2026.09.03 - version 2.4.0
* New: A new Add to Wishlist button. It shows whether the product is already saved - outlined icon when it is not, solid when it is - and keeps whatever wording you configured. Choose a heart, bookmark, star or gift icon, drawn in your theme's button colour. Screen readers hear "Saved" or "Saved to 3 lists"; the wording is a new "Saved State Text" setting.
* New: Saving stays on the page. The list picker opens as a dialog showing which of your lists already hold the product; tick to save, untick to remove, name a new list and save to it in one step. A confirmation appears with a link to the list.
* New: On a variable product the button and the picker follow the variation you have chosen, so two colours of the same product can be saved to one list and removed one at a time.
* New: "One-click first save" setting. When a shopper has no lists yet, the first save goes straight to a new list called "My List" instead of opening the picker. Off by default.
* New: The Add to Wishlist button appears in shop listings as well as on product pages, on classic and block themes. A new Product Listing Button section in the Wishlists settings switches it off, hides it on variable products, places it on the product image or above or below the add-to-cart button, and gives it its own text or none at all (icon only). 'woocommerce_wishlists_loop_position' and 'woocommerce_wishlists_render_in_loop' still override the settings, per product.
* New: The "Add to Wishlist" and "Wishlist" blocks can be styled in the editor - colour, spacing, typography and border - and pick up your theme.json. On block themes the listing button is a real block in your product template: see it in the Site Editor, move it, restyle it, or delete it.
* New: The list pages (View a List, Edit My List) are live. Change a quantity, remove an item, or add it to the cart without a page reload; Add to Cart shows a spinner while it works and a checkmark when it lands, with a confirmation linking to the cart. On block themes the Mini Cart count updates immediately. Everything still works with JavaScript off.
* New: Abandoned guest lists are cleaned up automatically. A temporary list older than 30 days with no item saved in 30 days is deleted, so bot-created lists stop piling up. Lists belonging to accounts are never touched. Change the lifetime with 'wc_wishlists_temporary_list_lifetime_days' (0 disables).
* New: A REST API, wc-wishlists/v1, for lists and items, with guest support and share keys. A price hidden by Catalog Visibility Options is hidden there too, and 'wc_wishlists_can_view_price' lets any plugin withhold one.
* New: The confirmation's position is configurable via the 'wc_wishlist_snackbar_position' option or 'woocommerce_wishlist_snackbar_position' filter (bottom-left by default; any corner or centre edge).
* New: 'woocommerce_wishlists_loop_template_priority' positions the listing button within its hook, and 'woocommerce_wishlist_icons' / 'woocommerce_wishlist_icon_svg' add your own icons.
* New: 'wc_wishlists_use_classic_add_to_cart' sends a list row to the cart through a page reload instead of the Store API. Off by default; used automatically for saved Gravity Forms entries on Gravity Forms Product Add-ons older than 3.8.4.
* Tweak: A saved item that still needs a choice - a variable product with no variation chosen, or add-on fields not filled in - offers "Choose options" linking to the product page instead of an Add to Cart that could not add it. An item saved with its options chosen keeps them and its Add to Cart.
* Tweak: The icon setting now applies to the button as well as the link. Stores that left it on "Present" will see a gift icon on the button; choose "None" to keep the button plain.
* Tweak: Loading a shopper's lists no longer slows down as a store accumulates wishlists. On a store with 27,500 lists the worst case went from 11.5 seconds to under 50 milliseconds.
* Tweak: The sort/filter row and bulk-action rows on the list pages wrap on narrow screens instead of overflowing, and the Privacy Settings and Email Notifications choices are proper fieldsets with the whole row clickable.
* Tweak: The List Items / Settings tabs on Edit My List are a real tab strip: arrow keys move between them, screen readers are told which is current, and with JavaScript off both panels show.
* Tweak: List quantity inputs are number inputs carrying the product's stock maximum, matching WooCommerce's own.
* Tweak: "Add All To Cart" reports its count in the singular or plural as appropriate (translators will see a new string).
* Tweak: Wishlist pages send no-cache headers so a shared list is never served stale by a page cache.
* Tweak: Stylesheets and scripts are versioned by file date, so browsers pick up the new files after an upgrade instead of serving ones cached from an earlier release.
* Tweak: Minimum WordPress version is now 6.8 and minimum WooCommerce 10.4.
* Fix: Gift-registry purchase tracking - the "previously ordered" column and the "Automatic Removal" setting - had not run on any 2.3.x release. Both now work: rows are removed once an order reaches the configured status, and the column populates.
* Fix: Creating an account while another shopper was signed in (single sign-on, membership or B2B flows that provision users; the wp/v2 users endpoint) reassigned that shopper's wishlists to the new account. Logins that establish the user before 'wp_login' fires now claim the guest's lists too.
* Fix: "Add All To Cart" on the View a List page always failed with "Action failed. Please refresh the page and retry."
* Fix: "Add All To Cart" adds exactly the items the list offers an Add to Cart for, tells the shopper which it skipped and why, no longer adds products with unfilled required add-on fields at base price, and reports the number it actually added.
* Fix: The quantity typed in the list grid is now the quantity added to the cart, and "Add All To Cart" on the Edit screen saves those quantities to the list as documented. The saved quantity was being used instead.
* Fix: The "Prompt for quantity when adding to cart" setting works again, still filterable per item via 'woocommerce_wishlist_use_add_to_cart_quantity_prompts'.
* Fix: Typing a quantity on a list you are only viewing no longer errors or sends a logged-out visitor to the login page.
* Fix: Adding an item to the cart from a list no longer carries the list's bookkeeping onto the cart line, which on a gift registry could split one item into two cart lines after another guest's checkout.
* Fix: List rows no longer offer Add to Cart for products that cannot be purchased, such as a product with no price.
* Fix: A product whose purchases Catalog Visibility Options has switched off could still be added to the cart through a list row's add-to-cart link, because that link never asked. Both add paths now refuse it with "Purchases are currently disabled", as the list itself already did by offering no button. Saving such a product to a list is unaffected.
* Fix: An external product's buy link is no longer hidden by the purchase filters or by Catalog Visibility Options - those govern this store's cart, and the link is the shopper's only route to the product.
* Fix: Purchase controls on both list screens now honour 'woocommerce_wishlist_purchases_enabled', both spellings of 'woocommerce_wishlist_user_can_purchase', and Catalog Visibility Options' per-product restrictions. Each screen previously honoured a different subset.
* Fix: On Edit My List, the second Actions dropdown below the grid did nothing without JavaScript, and pressing Apply Action with no action chosen reported "Invalid destination list".
* Fix: The List Items / Settings tabs on Edit My List rendered as two stacked rows in Storefront and themes derived from it.
* Fix: The "In Category:" label on View a List pointed at the Sort by dropdown.
* Fix: The Items box on a wishlist's wp-admin screen showed each product image at its full upload size. It asked for an image size WooCommerce no longer registers; it now uses the gallery thumbnail.
* Fix: The [wc_wishlists_add_link] shortcode linked to the retired add-to-wishlist URL, so clicking it reloaded the page and saved nothing. It now renders the same Add to Wishlist control as the product page, for the product it names, with 'title' as the button text.
* Fix: The 'woocommerce_wishlists_loop_template_location' filter could not be set from a theme's functions.php or a snippets plugin; it was read before the theme loaded.
* Fix: The "Add to Wishlist" block works inside a Product Collection or Product Template on a block theme, where it could render the wrong product's button or none at all.
* Fix: The ownership check on the Edit My List page compares a guest key against a user ID strictly rather than by loose equality.
* Remove: The legacy add-to-wishlist button, its templates (add-to-wishlist-link.php, add-to-wishlist-modal.php), the '?add-to-wishlist-itemid=' request handler, and the separate "This item is already in one of your wishlists" notice, which the button now conveys. A store with a customised copy of either template should move to the 'elementstark/add-to-wishlist-button' block, the [wc_wishlists_button] shortcode, or the 'woocommerce_wishlists_template_location' filter. The 'woocommerce_wishlist_already_in_list_text' filter no longer applies.
* Remove: Adding a grouped product to a wishlist as a group. Its children can still be saved from their own product pages.
* Remove: The unused wp/v2 wishlist REST routes.
* Dev: Theme CSS to update - '.wl-actions-table' is now '.wl-toolbar', '.wl-rad-table' is '.wl-fieldset', the picker is '.wl-add__dialog' (was '#wl-list-pop-wrap' / '.wl-list-pop') with '.wl-add__create-submit' and '.wl-add__close' controls in place of '.wl-add__confirm' / '.wl-add__cancel', and list row anchors no longer carry 'wishlist-add-to-cart-button' / 'wishlist-add-to-cart-button-view'. The confirmation's colours use the '--wl-snackbar-bg', '--wl-snackbar-color' and '--wl-snackbar-action-color' custom properties.
2026.08.29 - version 2.3.23
* Update: WordPress 6.5 is now the minimum supported version