WooCommerce is a free eCommerce plugin that allows you to sell anything, beautifully. Built to integrate seamlessly with WordPress, WooCommerce is the world’s favorite eCommerce solution that gives both store owners and developers complete control.

With endless flexibility and access to hundreds of free and premium WordPress extensions, WooCommerce now powers 30% of all online stores — more than any other platform.

Sell anything, anywhere

With WooCommerce, you can sell both physical and digital goods in all shapes and sizes, offer product variations, multiple configurations, and instant downloads to shoppers, and even sell affiliate goods from online marketplaces.

With premium extensions, you can offer bookings, memberships, and recurring subscriptions. Perhaps you’d like to sell monthly subscriptions for physical goods, or offer your members a discount on digital downloads? It’s all possible.

Ship wherever you like

Offer free shipping, flat rate shipping, or make real-time calculations. Limit your shipments to specific countries, or open your store up to the world. Shipping is highly configurable, and WooCommerce even supports drop shipping.

Extensive payment options

WooCommerce comes bundled with the ability to accept major credit cards, PayPal, BACS (bank transfers), and cash on delivery. Need additional options? More than 140 region-specific gateways integrate with WooCommerce, including popular choices like Stripe, Authorize.Net, and Amazon Payments.

You control it all — forever

WooCommerce gives you complete control of your store, from taxes to stock levels to customer accounts. Add and remove extensions, change your design, and switch settings as you please. It’s all under your control.

One of the biggest risks of using a hosted eCommerce platform is what happens to your store if the provider closes up shop. With WooCommerce, you have complete control, so there’s never any reason to worry. Your data belongs to you — and it’s kept secure, thanks to regular audits by industry leaders.

Define your style with Storefront

Storefront is a free WordPress theme available to any WooCommerce store. Along with deep WooCommerce integration, Storefront prioritizes speed and uptime while eliminating theme and plugin conflicts during major updates.

Define your style even further by customizing Storefront to your liking or choosing from one of our several Storefront child themes. It’s all up to you, and all open source.

Built with developers in mind

Extendable, adaptable, and open source — WooCommerce was created with developers in mind. With its strong, robust framework, you can scale your client’s store all the way from basic to high-end (infinity and beyond).

Built with a REST API, WooCommerce can integrate with virtually any service. Your store’s data can be accessed anywhere, anytime, 100% securely. WooCommerce allows developers to easily create, modify, and grow a store that meets their specifications.

No matter the size of the store you want to build, WooCommerce will scale to meet your requirements. With a growing collection of more than 300 extensions, you can enhance each store’s features to meet your client’s unique needs — or even create your own solution.

If security is a concern, rest easy. WooCommerce is audited by a dedicated team of developers working around the clock to identify and patch any and all discovered bugs.

We also support WooCommerce and all its extensions with comprehensive, easily-accessible documentation. With our docs, you’ll learn how to create the exact site your client needs.

Extensions galore

WordPress.org is home to some amazing extensions for WooCommerce, including:

Keen to see them all? Search WordPress.org for ‘WooCommerce’ to dive in.

If you’re looking for something endorsed and maintained by the developers who built WooCommerce, there are a plethora of premium eCommerce extensions, the most popular of which include:

And there’s plenty more where they came from. Visit our extensions page to find out everything you’re capable of and all that’s possible with premium WooCommerce extensions.

Join our growing community

When you download WooCommerce, you join a community of more than a million store owners, developers, and WordPress enthusiasts. We’re one of the fastest-growing open source communities online, and no matter your skill level we’d love to have you!

If you’re interested in contributing to WooCommerce we’ve got more than 350 contributors, and there’s always room for more. Head over to the WooCommerce GitHub Repository to find out how you can pitch in.

Want to add a new language to WooCommerce? Swell! You can contribute via translate.wordpress.org.

And, finally, consider joining or spearheading a WooCommerce Meetup locally, more about those here.

Maletgs dal visur

  • The WooCommerce settings panel.
  • WooCommerce products admin.
  • Product data panel.
  • WooCommerce sales reports.
  • A single product page.
  • A product archive (grid).


Minimum Requirements

  • PHP version 5.2.4 or greater (PHP 7.2 or greater is recommended)
  • MySQL version 5.0 or greater (MySQL 5.6 or greater is recommended)

Visit the WooCommerce server requirements documentation for a detailed list of server requirements.

Automatic installation

Automatic installation is the easiest option as WordPress handles the file transfers itself and you don’t need to leave your web browser. To do an automatic install of WooCommerce, log in to your WordPress dashboard, navigate to the Plugins menu and click Add New.

In the search field type “WooCommerce” and click Search Plugins. Once you’ve found our eCommerce plugin you can view details about it such as the point release, rating and description. Most importantly of course, you can install it by simply clicking “Install Now”.

Manual installation

The manual installation method involves downloading our eCommerce plugin and uploading it to your webserver via your favourite FTP application. The WordPress codex contains instructions on how to do this here.


Automatic updates should work like a charm; as always though, ensure you backup your site just in case.

If on the off-chance you do encounter issues with the shop/category pages after an update you simply need to flush the permalinks by going to WordPress > Settings > Permalinks and hitting ‚save‘. That should return things to normal.

Sample data

WooCommerce comes with some sample data you can use to see how products look; import sample_products.xml via the WordPress importer. You can also use the core CSV importer or our CSV Import Suite plugin to import sample_products.csv.


Where can I find WooCommerce documentation and user guides?

For help setting up and configuring WooCommerce please refer to our user guide

For extending or theming WooCommerce, see our codex.

Where can I get support or talk to other users?

If you get stuck, you can ask for help in the WooCommerce Plugin Forum.

For help with premium extensions from WooCommerce.com, use our helpdesk.

Will WooCommerce work with my theme?

Yes; WooCommerce will work with any theme, but may require some styling to make it match nicely. Please see our codex for help. If you’re looking for a theme with built in WooCommerce integration we recommend Storefront.

Where can I request new features, eCommerce themes and extensions?

You can vote on and request new features and extensions in our WooIdeas board

Where can I report bugs or contribute to the project?

Bugs can be reported either in our support forum or preferably on the WooCommerce GitHub repository.

Where can I find the REST API documentation?

You can find the documentation of our REST API on the WooCommerce REST API Docs.

WooCommerce is awesome! Can I contribute?

Yes you can! Join in on our GitHub repository 🙂


Read all 2'986 reviews

Contributors & Developers

“WooCommerce” is open source software. The following people have contributed to this plugin.


“WooCommerce” has been translated into 52 locales. Thank you to the translators for their contributions.

Translate “WooCommerce” into your language.

Interested in development?

Browse the code, check out the SVN repository, or subscribe to the development log by RSS.


3.4.7 – 2018-10-18

  • Fix – Simplify importer file path check to cause less issues. #21573
  • Fix – Better role checking for user editing capabilities. #21569 #21575

3.4.6 – 2018-10-11

  • Fix – Security issues
  • Fix – Allow percent coupons with sale restrictions to apply to carts with sale items in them. #21241
  • Fix – Prevent multiple slashing of variation’s SKU. #21019

3.4.5 – 2018-08-29

  • Fix – Tweak sanitization when resetting password cookie. #20901
  • Fix – Use + instead of array_merge when appending parent to tax class to fix issues with numeric tax class names. #20916
  • Fix – Correct translation for North Khorasan. #20972
  • Fix – Unify scroll-to notices for all browsers. #20992
  • Fix – Prevent multiple slashing of variation’s SKU. #21019
  • Fix – Variation image in fullscreen now shows correct caption for the respective image. #21022
  • Fix – Vertically center admin order action buttons. #21053
  • Fix – Correct context for shipping packages translation. #21065
  • Fix – Add permission checks for installing Jetpack on the setup wizard. #21072
  • Fix – Use refund currency instead of store default currency when displaying refund amount in the edit order screen. #21106
  • Fix – Fix a typo in REST API customer schema. #21171
  • Fix – Use entire sentence for checkout address_2 placeholder string. #21186
  • Fix – Only suppress comments number on unsupported theme shop page. #21191
  • Fix – Don’t allow users without manage_product_terms permissions to create categories using the product importer. #21192
  • Fix – Correct sale coupon restriction logic. #21219

3.4.4 – 2018-07-25

  • Fix – Only wordwrap plain email content. #20723
  • Fix – Better escaping on product quick edit. #20740
  • Fix – Log file deletion. #20730
  • Fix – Search feature in Webhooks and REST API keys settings. #20706
  • Fix – Notices in REST API keys settings screen. #20706
  • Fix – add a check to prevent WC_Geolite_Integration::get_country_iso() from generating a PHP undefined index notice when unable to determine the country code for a given IP address. #20608
  • Fix – Variable product stock display if parent is stock managed and not the variation. #20661
  • Fix – Correctly hide cost for zero cost shipping methods after placing orders. #20663
  • Fix – Disabled autocomplete to prevent datepicker overlapping. #20687
  • Fix – Prevent a PHP notice in the setup wizard when store state is not selectable. #20695
  • Fix – Fix logic error in WC_Product_CSV_Exporter::get_column_value_stock. #20753
  • Fix – Fixed missing notice about no product variation matching. #20762
  • Fix – Correct PHPDocs in exporter class. #20861
  • Fix – Prevent Mailchimp redirection during the Setup Wizard. #20879
  • Fix – Don’t hide coupon form after coupon has been applied. #20889
  • Tweak – Remove (optional) text from Address line 2 field. #20622 #20639
  • Tweak – Removed 100% width for images on single product page using 2017 theme. #20818
  • Tweak – Add margin to best selling product title in the dashboard widget to avoid overlapping the sparkline. #20849
  • Tweak – Re-add woocommerce_order_details_after_customer_details_filter removed during WC 3.2. #20886
  • Dev – Added woocommerce_calculate_item_totals_taxes filter. #20586
  • Dev – Links to next and previous page sent out in HTTP header via REST API fixed for some endpoints. #20686
  • Dev – Better wc_format_phone_number cleaning. #20637

3.4.3 – 2018-06-20

  • Fix – Fix label for the price filter widget on RTL sites. #20417
  • Fix – Checkout: stopPropagation when payment method selected so description tips show on radio buttons. #20432
  • Fix – Shipping zone settings: fixed title for shipping methods without settings. #20441
  • Fix – Ensure custom Webhook topic selections are correctly saved in admin. #20406
  • Fix – Webhook bottom bulk actions. #20445
  • Fix – Fixes multisite orders dashboard widget to use order number rather than ID. #20457
  • Fix – Add check to ensure download log FK does not exist before adding it. Update routine will cleanup any duplicates. #20478
  • Fix – IPv6 support with HTTP_X_FORWARDED_FOR header. #20479
  • Fix – Avoid setting wrong prices when syncing grouped products with children. #20482
  • Fix – Separation of explode and end functions in two lines. End function should get a reference as parameter. #20500
  • Fix – Initialize payment gateways before running bulk actions so gateways can listen for events. #20502
  • Fix – Cast shipping total to a float so incl. tax shows only when needed. #20531
  • Fix – Fix automatic stock status updates based on stock level. #20573
  • Fix – Improved sanitize_special_column_name_regex trim to fix column matching when importing CSVs. #20486
  • Fix – Force importer log table to wrap long columns. #20534
  • Fix – Rest API: Prevent errors if variation parent is invalid and cannot be read. #20572
  • Fix – Rest API: Remove legacy API enabled check from auth endpoint. #20499
  • Fix – Display products on sub-subcategories when sorting parent category by price. #20579
  • Fix – Set order status to refunded when a PayPal transaction is refunded. #20574
  • Fix – fix undefined index in abstract-wc-widget. #20544
  • Fix – Round items for order total when recalculating order values to match cart. #20533
  • Fix – Removed mysql transactions when updating order status, tweaked caching, and improved version transient cleanup to prevent possible deadlocks on checkout. #20537
  • Tweak – Added a message to promote Wootenberg when running Gutenberg feature plugin. #20524
  • Tweak – Added a warning notice before removing personal data from orders in bulk. #20481
  • Dev – generate_select_html and generate_multiselect_html functions again support the usage of integer-keyed arrays as available values. #20569
  • Dev – Allow order billing fields to use a provided ‚value‘. #20424

3.4.2 – 2018-06-05

  • Fix – Flexslider gallery fixes for RTL sites, and for variation image switching. #20328 #20321
  • Fix – Allow forms to be submitted when the password strength library fails to load. #20362
  • Fix – Personal data exporter: Do not export a customer data group containing no data. #20347
  • Fix – Fix navigation notification in settings when clicking save. #20335
  • Fix – Show discount amount for free shipping coupons. #20334
  • Fix – Fixed cache clearing for category children for sites running object caching. #20308
  • Fix – Use correct escaping on select2 placeholders. #20364
  • Fix – Order by price clauses when searching within terms. #20391
  • Fix – Clear needs_processing transient when adding a product to an order. #20390
  • Enhancement – Permission_id constraint checks on install. #20366
  • Dev – Added order to „woocommerce_order_is_vat_exempt“ filter arguments. #20365
  • Localization – Disable states for Bahrain. #20363
  • Localization – Disable states for Luxemberg. #20389

3.4.1 – 2018-05-29

  • Fix – Fix webhook admin filtering URLs. #20236
  • Fix – Add missing wp_unslash calls to product data meta box to prevent quote characters being escaped on save. #20235
  • Fix – Display price filter widget in LTR mode on RTL sites. #20221
  • Fix – Refactor WC_Coupon constructor to allow for passing in coupon objects. #20193
  • Fix – Path field in advanced CSV importer was broken due to an esc_url call. #20191
  • Fix – Prevent shipping method instances trying to save settings on non-instance screens. #20217
  • Fix – Wrapper function to get full mysql version string with mariadb handling. #20231
  • Fix – woocommerce_pagination had some extra white space. #20214
  • Fix – If a file size cannot be read, ignore range headers to prevent offsite downloads being 0kb. #20205
  • Fix – Allow HTML when using wc_attribute_label(). #20202
  • Fix – Update address-i18n.js to prevent appending multiple „(optional)“ labels. #20195
  • Fix – Check plugin properties exist when listening to auto_update_plugin hook. #20234
  • Fix – Add extra checks in get_canonical_package_rate_ids to prevent notices. #20237
  • Fix – Fix infinite loop with importing tax rates. #20253
  • Fix – Echo attribute label for „empty“ default option. #20256
  • Fix – Fix download sample tax rates URL format. #20272
  • Fix – Product properties should not be accessed directly PHP notice when calling wc_get_product_attachment_props. #20282
  • Fix – If flexslider is disabled, gallery images also need to trigger photoswipe on click. #20290
  • Fix – Product import file uploads on windows servers. #20273
  • Fix – Fix variation attribute selection via the cart page/query string. #20293
  • Fix – Add greater specificity to required styling in 2017 theme. #20296
  • Enhancement – Export legacy paypal meta data in personal data exporter. #20200
  • Enhancement – Improve performance of wc_update_340_states update routine to help prevent timeouts. #20241
  • Dev – Remove red styling for PHP notice if using > 5.6. #20294
  • Dev – Add an action hook after printing the cart item name. #20190
  • Localization – Use „payment tokens“ terminology in exports. #20197

3.4.0 – 2018-05-23

  • Feature – GDPR: Tools to export WooCommerce data using the new export functionality in WordPress 4.9.6. #19330
  • Feature – GDPR: Tools to bulk anonymize order data in admin. #19330
  • Feature – GDPR: Tools to turn off company/address-2/phone checkout fields to avoid unnecessary data collection, and a toggle to choose how required fields are presented. This is available via the Customizer. #19637
  • Feature – GDPR: Tools in the Customizer to change the terms and conditions checkbox label on the checkout. #19637
  • Feature – GDPR: Tools to define a privacy policy for the account page and checkout page in „account privacy“ settings and within the Customizer. #19747
  • Feature – GDPR: Tools to automatically clean up and remove order personal data after a set time period. #19743
  • Feature – GDPR: Added privacy snippet which works with the new privacy page functionality in WordPress 4.9.6. #19749
  • Feature – Added a new order widget to the dashboard (on multisite) so you can see your orders across multiple stores on the same WordPress network. #17598
  • Feature – Added „display name“ input on the My Account page. #19078
  • Feature – Product search improvements including stopword support and support for searching for multiple products at the same time. #19096
  • Feature – Cash on Delivery gateway can be enabled/disabled for specific shipping methods instead of only method types. #19221
  • Feature – Add wildcard email support for coupons. #19331
  • Feature – Added support for the GeoLite2 library as a replacement for the deprecated MaxMind GeoIP library. #19419
  • Feature – Added tool for cleaning up download permissions table. #19922
  • Tweak – GDPR: Improved appearance of checkout field ‚descriptions‘ (if used) to make them more useful for privacy notices. #19637
  • Tweak – GDPR: Improved related data cleanup when deleting users/orders. #19330
  • Tweak – GDPR: Notice about HTTPS as a requirement in admin if missing. #19756
  • Tweak – GDPR: Improved the checkout (payments) settings screen, moved page options to a new „advanced“ section, and made an „Accounts and Privacy“ section. #19703
  • Tweak – GDPR: Hash customer email address in download URLs to protect privacy. #18957
  • Tweak – GDPR: Add highlight to T&C checkbox if not checked to show it needs to be checked. #19177
  • Tweak – GDPR: Automatically purge old logs after 30 days. #19920
  • Tweak – GDPR: Only log Webhook body if WP_DEBUG is enabled. #19914
  • Tweak – GDPR: Store less PII in PayPal standard. #19914
  • Tweak – Only show admin notices on WooCommerce screens/plugins/dashboard. #19772
  • Tweak – Standardize stock update messages in admin and correctly log who performed the action. When an order note is added after modifying stock manually, update order notes display via AJAX. #18080
  • Tweak – Rollback if payment complete or update status fails to prevent partial order updates on failure. #18175
  • Tweak – Made the system status tool which purges user carts also purge persistent carts. #18492
  • Tweak – Display whether or not external object cache is enabled in system status report. #18595
  • Tweak – Display zero value when using shipping classes. #18624
  • Tweak – Fixed settings table styling on mobile. #18655
  • Tweak – Updated Flexslider to version 2.7.0. #18779
  • Tweak – Enable screen options for list screens. #18817
  • Tweak – Don’t call WC_Install::install() on downgrades. #18818
  • Tweak – Remove user login from reset password link to protect personally identifying info. #18820
  • Tweak – Added a function to return a list of custom tables to aid with cleanup. #18831
  • Tweak – Enable going backwards in the setup wizard. #18921
  • Tweak – Make sure terms page exists and isn’t trashed before using it. #18993
  • Tweak – Toggle when clicking anywhere in toggle row during setup wizard. #19035
  • Tweak – Use read_product permissions instead of edit_product for ajax product search. #19087
  • Tweak – Add priceSpecification property with valueAddedTaxIncluded to product structured data. #19091
  • Tweak – Importer remembers mappings across imports. #19110
  • Tweak – Made coupon total displayed in cart more consistent. #19166
  • Tweak – Remove forced CSS line-heights to improve text input displays across different browsers. #19174
  • Tweak – When loading default attributes/variation, if there is no longer a match, reset the form and hide the notice #19190
  • Tweak – Removed admin product type column from core and made it into a free feature plugin. #19192
  • Tweak – Use woocommerce-no-js class to hide JavaScript-only forms and content. #19199
  • Tweak – Activate plugins during installation process even if directory doesn’t match slug. #19200
  • Tweak – Allow category and attribute ids in the products shortcode instead of only slugs. #19204
  • Tweak – Invalidate cart items when important props like product type are updated. #19255
  • Tweak – Don’t use mysql functions directly on system status page to prevent errors if they are disabled. #19281
  • Tweak – Replaces have_posts with woocommerce_product_loop which looks to see if there are products, or if the loop is going to be showing something else. #19288
  • Tweak – Delete widget options and order notes on uninstall. #19371
  • Tweak – Add unique names to all nonces in template fields and forms. #19387
  • Tweak – Enable using the tab key to select elements in selectWoo dropdowns. #19416
  • Tweak – Added autocomplete attributes to form elements for better autocomplete support. #19426
  • Tweak – Removed PayPal line item limit and ensured URLs are shorter than maximum length. #19493
  • Tweak – Disable Gutenberg editor on products posts. #19543
  • Tweak – Improvements around UI and wording of store setup step in setup wizard, a revamped extras step, and other improvements.
  • Tweak – Only push images to lightbox if an image is found. #19568
  • Tweak – Added and improved notices around old PHP versions and disabled geolocation on PHP 5.4 or lower. #19573
  • Tweak – The manage_stock field in the product API can return a mixed type instead of boolean for variations. #19598
  • Tweak – Link product import/export to WordPress import/export capabilities. #19602
  • Tweak – Use   to separate asterisks in required fields to prevent awkward line breaks. #19610
  • Tweak – Load meta box input values using CRUD and edit context. #19670
  • Tweak – Scroll to notices on cart/checkout for better mobile visibility. #19699
  • Tweak – Add filter to coupon URL on „Edit order“ screen. #19777
  • Tweak – Throw error if order can’t be loaded on checkout. #19802
  • Tweak – Remove deprecated freegeoip service from geolocation. #19841
  • Tweak – Allow arrays of query vars in wc_get_orders and wc_get_products. #19848
  • Tweak – Invalidate fragment cache on theme switch.
  • Tweak – Include select tags when saving payment details temporarily in checkout.js. #19854
  • Tweak – Update – Include pending products in export. #19928
  • Tweak – Deprecate woocommerce_ajax_added_order_items action in favor of more useful action. #19933
  • Tweak – Enable touch-to-zoom on touch devices to make photoswipe more easily accessible. #20002
  • Tweak – Wizard: List out all plugins to be installed upon proceeding to the next step, with a highlight on hover indicating relevant settings. #19952
  • Tweak – Hide/show password strength meter instead of removing/inserting password strength meter. #20006
  • Tweak – Added support for HTTP_RANGE requests (used by iOS devices) to Force download method. #19984
  • Tweak – Replaced protocol-relative URLs for thumbnails in the cart and mini-cart with protocol-specific URLs to prevent problems with URLs that include port section. #19934
  • Tweak – In CSV exports, wrap cell in ‚ rather than just prepending to escape values. #20041
  • Tweak – Add JS listeners for reloading/reinitializing order items in edit-order page. #20082
  • Fix – Properly set orderby and order when calling WC_Customer_Download_Data_Store::get_downloads(). #1862
  • Fix – Set maxlength for order item meta key to avoid values disappearing if too long. #18918
  • Fix – Remove hardcoded /wp-content check for downloads. #18961
  • Fix – Made get_on_sale_products respect the setting to hide outofstock products. #18984
  • Fix – Prevent shortcode [product_page] redirecting to the actual product’s page after add to cart. #19043
  • Fix – Make the „main term“ logic match for both the breadcrumb and product categories widget. #19044
  • Fix – Check parent status too when seeing if variation is purchasable. #19045
  • Fix – Fix uppercasing of accented characters. #19086
  • Fix – Do not allow updating parent ID from variations after created. #19097
  • Fix – Ensure coupon amount is not empty to prevent non-numeric value errors. #19098
  • Fix – Ensure shop archive works correctly when paged=1 is in the URL. #19104
  • Fix – Ensure orders created with woocommerce_adjust_non_base_location_prices filter active have the same cost on frontend and admin. #19109
  • Fix – Handling in the CLI to prevent Resource does not exist errors when using commands of a certain format. #19123
  • Fix – Use subtotal when calculating discounts in admin/orders to ensure prices are the same as on the frontend. #19159
  • Fix – Use kses to process download names to prevent escaped HTML displaying in emails.
  • Fix – Remove translation from Thailand state file to prevent PayPal errors around unsupported characters. #19219
  • Fix – Fix auto-select variation URLs with special characters in them. #19283
  • Fix – Introduced wc_round_discount and improved consistency of discount rounding. #19291
  • Fix – Only add schema for ratings to structured data when ratings are enabled. #19310
  • Fix – Prevent default state applying unless the country was also unset in JS state/country inputs. #19338
  • Fix – Escape quantity labels correctly to prevent broken html. #19375
  • Fix – Delete orphaned variations after product import. #19378
  • Fix – Ensure API credentials exist before defining PayPal refund support. #19380
  • Fix – Force word-wrapping in the log viewer to prevent layout-breaking long lines. #19503
  • Fix – Removes permission checks that were preventing webhooks from displaying properly when no post object existed. #19508
  • Fix – Empty cart after completing PayPal payment. #19509
  • Fix – Strip tags on aria-labels in Add to Cart template to prevent broken HTML. #19522
  • Fix – Update post_modified date when saving products and variations but no other product data. #19595
  • Fix – Clear comment count transient when cleaning product transients to prevent incorrect comment count displays. #19664
  • Fix – Load gateways before order is saved/email is triggered to ensure all information gets sent/processed. #19667
  • Fix – Clear shipping transient when saving shipping method on zones screen. #19668
  • Fix – Handle escape characters for fputcsv to work around PHP standards issues. #19678
  • Fix – Cast post IDs to integers in admin meta boxes. #19710
  • Fix – Fix CSV unescaping of negative numbers in download expiry/limit columns. #19732
  • Fix – Don’t load unsupported theme functionality if shop page ID is -1. #19822
  • Fix – Select and display „Downloadable“ option in product admin filter when selected. #19876
  • Fix – Add sort handle column when adding new tags. #19875
  • Fix – More thorough CSV importer cleanup. #19877
  • Fix – Fix gallery switching when image is the same #19878
  • Fix – Ensure coupon amount is always returns as a float value #19889
  • Fix – No update available message after activating subscription that has a valid update. #19831
  • Fix – Include scheduled products in CSV export. #19907
  • Fix – Generator tag actions should be filters. #19946
  • Fix – WC API should not try to create a product image when creating a product variation if an empty image is passed. #19971
  • Fix – Force settings API settings to autoload by default. #19998
  • Fix – Cart html5 validation events when using keyboard. #20001
  • Fix – Don’t show stock status fields in external product quick-edit. #20005
  • Fix – Prevent an infinite loop if 2 grouped products are linked. #20020
  • Fix – Switch stock_status when manage stock gets changed to prevent being out of stock if stock quantity is > 0. #20021
  • Fix – When duplicating variation, set the date to null. #20083
  • Fix – Fix rounding of line items for orders to match cart. #20086
  • Fix – Remove hardcoded border in email template. #20090
  • Fix – Prevent autofocus on checkout. #20123
  • Fix – Recalc taxes if address changes in API. #20137
  • Dev – Made wc_query_string_form_fields handle strings. #20162
  • Dev – Added refunded_payment prop to orders for determining if payment was refunded via API. #18196
  • Dev – Added extra params to woocommerce_order_get_downloadable_items. #18408
  • Dev – Store shipping method ID and instance ID in separate fields instead of both in one serialized field. #18483
  • Dev – Add woocommerce_rest_insert_system_status_tool hook that fires after executing a REST system status tool. #18505
  • Dev – Gallery meta box is now powered by CRUD. #18511
  • Dev – Refactor woocommerce_wp_select so it could be used for a multiselect. #18536
  • Dev – Added ability to declare sanitize_callback in settings API. #18554
  • Dev – Added support for additional HTML5 input types for settings/checkout forms. #18594
  • Dev – Made ‚woocommerce_email_downloads_column_‘ hook format aware. #18600
  • Dev – Add missing woocommerce_update_options__ actions for settings pages that override save method. #18609
  • Dev – Allow default value for single_select_country and multi_select_countries. #18754 #18756
  • Dev – Added grouped_form class to grouped product form element. #18786
  • Dev – Mini cart item link now respects value of $product_permalink. #18979
  • Dev – Added woocommerce_coupon_get_items_to_validate filter to enable excluding products from coupon validation. #19002
  • Dev – Added woocommerce_persistent_cart_enabled filter. #19027
  • Dev – Added woocommerce_admin_order_item_coupon_url filter. #19777
  • Dev – Replaced calls to exit with wp_die in the ajax methods to enable unit testing of those methods.
  • Dev – Introduce woocommerce_coupon_custom_discounts_array filter to allow post processing on custom coupons. #19148
  • Dev – Move jQuery UI styles into WooCommerce assets folder and load them from there. #19173
  • Dev – Added woocommerce_coupon_validate_expiry_date filter to enable modifying the coupon expiry date check. #19228
  • Dev – Added woocommerce_shipping_calculator_enable_state filter to enable disabling state section in shipping calculator. #19241
  • Dev – Added woocommerce_bacs_process_payment_order_status filter allowing plugins to change the order status to the BACS gateway. #19311
  • Dev – Added woocommerce_coupon_sort filter to allow plugins to override the default coupon apply order. #19339
  • Dev – Added woocommerce_before_output_product_categories and woocommerce_after_output_product_categories filters. #19363
  • Dev – Added general woocommerce_form_field filter to make it easier to filter all of the form fields. #19388
  • Dev – Added woocommerce_install_get_tables filter to enable plugins to register new, WooCommerce-specific tables. $19436
  • Dev – Use get_variation_price method in structured data to grab min/max so filters are ran. #19527
  • Dev – Added woocommerce_helper_suppress_connect_notice filter to enable suppressing the admin WordPress.com connection message. #19599
  • Dev – Moved all photoswipe styles to photoswipe.css to make it easy to dequeue all the photoswipe styles. #19673
  • Dev – Slash meta values before updating values in the data stores. #19675
  • Dev – New wc_selected method to handle array key conversion to int. #19705
  • Performance – Optimized saving of orders. Adds a transient for needs_processing, and only saves changes when saving order items. #18538
  • Performance – Refactored the SQL query for WC_Customer_Download_Data_Store::get_downloads() to fetch available downloads faster. #18559
  • Performance – Split the layered nav counts into multiple transient records by taxonomy and added a filter to allow bypassing caching. #19225
  • Performance – Removed duplicate SET SESSION SQL_BIG_SELECTS=1 queries. #19502
  • Performance – Avoid storing coupon _used_by data to prevent database bloat. #19669
  • Performance – Introduced new wc_get_product_class() and wc_product_class() functions. #19639
  • Performance – Series of tweaks aimed at reducing the number of queries performed #19918
  • Template – Update cart coupon button from input to button type. #19059
  • Template – Added woocommerce-form-register class to registration form. #19486
  • Template – Added escaping to publish date. #19530
  • Template – Added a template file for recent product reviews. #19711
  • Template – Made add to cart templates more consistent between product types. #19666
  • Localization – Switched Georgian Lari symbol to new UTF symbol. #19603
  • Localization – Use ISO county codes for Irish states. #19658
  • Localization – Use ISO county codes for BD states. #19744
  • Localization – LR-Liberia states. #19709
  • Localization – Update ZA tax rate. #19909
  • Localization – Various spelling, grammar fixes, and phrasing improvements.
  • Localization – Fix missing Bahrain country code. #20061

See changelog for all versions.