* 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
* 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
* 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 - Added `woocommerce_output_product_categories` to replace `woocommerce_product_subcategories` function to prevent outdated theme template files from outputting categories on the shop and category pages in err.
* Fix - Prevented columns from being set to anything lower than 1.
* Fix - Added extra error checking in Webhooks API to prevent notices when deleting Webhooks.
* Fix - Prevented list table classes being loaded multiple times. This also fixes compatibility with Smart Coupons extension.
* Fix - Removed stray debug string from order email template and fixed some typos.
* Fix - Set up the loop when calling wc_get_loop_prop. Fixes compatibility with some themes.
* Fix - Remove multiple application of filter 'woocommerce_order_item_product'.
* Fix - Protect against theme support being defined too late. Fixes some issues with custom themes defining WooCommerce support incorrectly.
* Fix - Add fallback for themes that just get the pagination template.
* Fix - Made the on-the-fly image regen also regenerate missing sizes.
* Fix - Fixed missing user_id in webhook migration script.
* Fix - Allow uncategorized category to be sorted like the others.
* Fix - If theme support changes, we may need to flush permalinks since some are changed based on this flag.
* Fix - Fire hooks for pagination etc only when pagination is enabled.
* Fix - Default HTML in end wrapper template.
* Fix - Prevent regular pagination showing on archives for unsupported themes.
* Fix - Fix shop when shown as homepage in unsupported themes.
* Fix - Fix SKU mapping for placeholders during CSV import.
* Fix - Use CRUD search helper in admin products table so partial SKU search works.
* Fix - Fix bulk sale/regular price percentage handling.
* Fix - More specificity on smallscreen style override for columns.
* Tweak - Add notice for moved store notice setting.
* Tweak - Allow removing coupons on editable orders only.
* Tweak - Extended the background processing library to avoid changing methods in the library.
* Tweak - Do not show row settings if something is managing the number of products per page.
* Tweak - Allow devs to add 'no-link' class to elements to prevent order view link being triggered on row click.
* Tweak - Made woocommerce_resize_images filter more useful by calling it later.
* Tweak - Revert default columns back to 4 so it's consistent with 3.2.
* Feature - Improved default appearance in themes which do not support WooCommerce, making the shop page shortcode based.
* Feature - Products shortcodes; improved random sorting, with some caching.
* Feature - Products shortcodes; support for pagination.
* Feature - Added new options to the WordPress Appearance Customizer; control the product grid (rows and columns), and image sizes.
* Feature - Improved how image sizes are defined and calculated. Set an aspect ratio (custom, 1:1, uncropped) and image sizes will be automagically calculated based on widths.
* Feature - Changing image sizes will trigger automatic thumbnail regeneration in the background.
* Feature - Improved how downloads are stored within products, and added new reporting/logging features to track who downloaded what, when.
* Feature - Improved the overall appearance of the backend orders list, and added a new 'preview' button to quickly see order details.
* Feature - New default sample data and placeholders.
* Feature - Added sandbox and live API details to the PayPal standard data, as well as an indication on the checkout to what mode is currently active. PayPal IPN email notifications are also now optional.
* Feature - Introduced product category threshold filter (`woocommerce_product_category_filter_threshold`). AJAX powered select will kick in when you have over 100 categories.
* Feature - Added `add_to_cart_description` method and aria-labels to cart buttons in the loop for accessibility.
* Feature - Ability to search in logs when the database logger is used.
* Performance - Adjusted how permalinks are retrieved and saved to avoid switching locales on each page load.
* Performance - Added cache when loading product variation attributes.
* Fix - Fix wc_notice_count logic.
* Fix - Correct bulk edit price formatting.
* Fix - Ajax add-to-cart button shortcode fix for variations.
* Tweak - Update billing if account form changes.
* Tweak - Remove videos from help sections.
* Tweak - Preserve seconds when saving order date.
* Tweak - Allow quantities less than 1, but not 0, in admin.
* Tweak - Post types with no archives should not show in breadcrumb.
* Tweak - Only load session handler class on frontend not during cron.
* Tweak - Moved the 'Store Notice" option into the customizer.
* Tweak - Checkout Postcode / Zip validation error message was missing Billing / Shipping Identification.
* Tweak - Added Iris color picker validation.
* Tweak - Use scrollIntoView on checkout.
* Tweak - Converted input submit elements to button submit elements across the entire codebase for consistency.
* Tweak - Added `{site_title}` replacement for email footers.
* Tweak - Added delete product confirmation if a product has had sales.
* Tweak - Improved when "incl. VAT" is displayed in cart totals.
* Tweak - Use base text color for links in email templates.
* Tweak - Show theme overrides that are done through the wc_get_template filter in the system status report.
* Tweak - Added nofollow tags in layered nav to prevent duplicate indexed content.
* Tweak - Hide "incl. VAT" when no rates are defined in "single total" display mode.
* Tweak - Added replay protection for refunds.
* Tweak - GeoDB empty file handling.
* Tweak - Let wp_signon handle email to username conversion.
* Tweak - Made email field wider on checkout.
* Tweak - Post entire shipping selection when showing multiple packages.
* Dev - REST API - Orders should be created for users who exist on the site only.
* Dev - REST API - Fixed default value of "dp" on orders and refunds endpoints.
* Dev - Theming - Added theme support variables to declare image sizes used for products.
* Dev - Theming - Added support for single-product-postname.php template files.
* Dev - Added actions before calculations order totals and taxes and is_vat_excempt support.
* Dev - Add filter 'woocommerce_coupon_get_apply_quantity'.
* Dev - Grouped products; added filters to allow custom columns and changes to values.
* Dev - Allow for cloning the WC_Cart object
* Dev - Apply filters to registration-error-email-exists error.
* Dev - Added `woocommerce_cross_sells_order` filter.
* Dev - Add order-details `before` hooks to complement existing hooks.
* Dev - WC_CHUNK_SIZE constant for controlling readfile.
* Dev - Add short circuit to customer bought product function.
* Dev - Added a `wc_caught_exception` method to aid with logging.
* Dev - Added Data stores and CRUD for working with Webhooks.
* Dev - Bumped minimum WP version requirement to 4.5 and removed legacy API files.
* Dev - New actions - `woocommerce_order_details_before_order_table_items`, `woocommerce_order_details_after_order_table_items` and `woocommerce_order_details_before_order_table`
* Dev - Passed `widget_id` to `content-widget-product.php` so actions can be ran conditionally, and added sanitisation to `woocommerce_before_widget_product_list` and `woocommerce_after_widget_product_list`.
* Dev - Improved the `is_internal_meta_key` checks to consider getters and setters.
* Dev - Cleaned up the Order Customer Details template.
* Dev - JavaScript payment_method_selected events on checkout.
* Dev - Add new `$order->get_edit_order_url()` method.
* Dev - Pass through options to zoom, flexslider, and photoswipe.
* Dev - Added actions before and after scheduled sales initiation and completion.
* Localization - Add direction character to currency output.
* Localization - States for Tanzania and Moldova.
= 3.2.6 - 2017-12-13 =
* Fix - CSV Importer - Fix ID mapping to existing IDs.
* Fix - CSV Importer - Unslash header fields to avoid extra slashes.
* Fix - CSV Importer - Allow import and export of draft products.
* Fix - CSV Importer - Get global attribute ID only when is a global attribute.
* Fix - Remove URL fragment when appending geolocation hash.
* Fix - Additional cart rounding fixes so rounding before subtotal works again. Added more unit tests.
* Fix - Add BOM to exported report CSVs.
* Fix - is_visible should ensure product is is not trashed before returning true.
* Fix - Return packages with no rates back to the cart so the shipping calculator is displayed even when the current country is not shippable.
* Fix - Merge session and persistent carts when both exists after login.
* Fix - Remove "wc_error" query string after login.
* Fix - Allow woocommerce_form_field() have 'custom_attributes' equal 0.
* Fix - Bulk actions in status logs table.
* Fix - Exclude add-to-cart from pagination links.
* Fix - Updated $GLOBALS['post'] data in products shortcode to prevent theme conflicts.
* Fix - Only remove base taxes in cart totals class if item is taxable.
* Fix - REST API - Fixed date format in reports schema.
* Theming - Streamlined email templates content: using the new downloads table, moved billing email with the billing address, order notes into the order totals table, and removed the need for 'downloadable' subjects/headings.
* Feature - Built-in product CSV importer and exporter for products.
* Feature - Display (toggle-able) terms inline on the checkout rather than showing a link.
* Feature - On the "pay for order" page, if logged out show a login form rather than an error message.
* Feature - Enabled oembed support for product short descriptions.
* Feature - Added bulk variation update for stock status.
* Feature - On customer profiles: added a button to copy billing address to shipping address.
* Feature - Setup Wizard - Automatic Shipping Zone Creation In Setup Wizard for the base location.
* Feature - Setup Wizard - Added a new optional Storefront Theme step if you're using a non-WooCommerce compatible theme.
* Feature - Made it possible to manage extension licenses purchased from WooCommerce.com on the extensions screen.
* Tweak - Gallery - Added a data-caption for captions to support both captions and titles for SEO.
* Tweak - Gallery - Used smoothHeight setting to better support images of different heights.
* Tweak - UI - Added blank states for API keys & webhooks.
* Tweak - UI - Made Product submenu labels consistent in admin.
* Tweak - UI - Changed street address field label and placeholder to minimize user error on checkout.
* Tweak - UI - Added a confirmation before deleting log files.
* Tweak - If prices are the same for all variations, use price not priceSpecification in structured data.
* Tweak - Added variable so shipping calculator is shown on first row only when showing multiple shipping packages.
* Tweak - Updated mini-cart HTML to use a list.
* Tweak - Allow linking to single product additional_information tab from url hash.
* Tweak - Re-included WooCommerce endpoints on the appearance > menus screens.
* Tweak - Always sync incorrect titles on variation read regardless of version.
* Tweak - Standardize rating HTML in all templates.
* Tweak - When searching, disable WC sort order so results are sorted by relevance.
* Tweak - Update price sorting code to use min or max for variable products depending on sorting direction.
* Tweak - Utilize $product method to get thumbnail in loops.
* Tweak - Check for an existing display name before updating a user on checkout. Adds display_name prop to the CRUD.
* Tweak - Adapt variable product price used in sorting based on direction of sort.
* Tweak - Made state validation less strict for keys.
* Tweak - For COD orders, force payment complete status to be completed.
* Fix - Use get_max_purchase_quantity in cart template and fix logic when stock management is off.
* Fix - Added log_id as the secondary sorting column to log list so log entries sort correctly.
* Fix - Fix shop page when using shop base and UTF8 shop page slug.
* Fix - Added handles so drag and drop does not break edit on mobile when sorting categories.
* Fix - Added ABSPATH checks to all files.
* Fix - Fixed how to flush rewrite rules after saving the shop main page.
* Fix - Emails sent via admin should switch to global locale.
* Fix - Set and restore wp_query so product page functions think it's a real product page.
* Fix - Variation default value of '0' fails to save on product.
* Fix - Prevent locations being added to the "Rest Of The World" shipping zone via the API.
* Dev - Allow date created to be set in wc_create_refund.
* Dev - Introduced a [WC_Order_Query class](https://github.com/woocommerce/woocommerce/wiki/wc_get_orders-and-WC_Order_Query) for finding/searching orders.
* Dev - Added "restored" webhook.
* Dev - Support floats for the custom attribute name sorting function.
* Dev - Updated Emogrifier to version 1.2.
* Dev - Sort product data tabs by priority in admin screen.
* Dev - Added new hooks for: dashboard reviews widget, product and category sorting events, woocommerce_add_to_cart_sold_individually_found_in_cart, cart empty messages.
* Dev - Added filters for zoom / flexslider / photoswipe enabling.
* Dev - Added filter for cookie name.
* Dev - Added ability to filter Photoswipe lightbox options.
* Dev - Added new filter for product thumbnail size.
* Dev - Added action for displaying custom data for fees in admin.
* Dev - Changed build_payload from private to public in webhook system.
* Dev - Added deprecated notice to WC_Order_Item_Meta (deprecated in 3.0).
* Dev - Added namespace to jQuery events that are removed in VariationForm.
* Dev - Made WC_Checkout::get_posted_data() public.
* Dev - Add custom message for custom system status tools.
* Dev - Added filters to change which order items are created and loaded to support custom item types.
* Dev - Updated jQuery payment and serializejson libraries.
* Localization - Added Bolivian states.
* Localization - Use VAT for Norway instead of Tax.
* Fix - Add correct args to woocommerce_shipping_zone_method_deleted and woocommerce_shortcode_products_query hooks.
* Fix - Correctly append cache in product widget.
* Fix - Add ability to invalidate cache by object ID.
* Fix - Notice in structured data class.
* Fix - Only delete if an object has an ID in CRUD to avoid wp_delete_post using global ID.
* Fix - Avoid notices on checkout by ensuring all legacy data is correctly set.
* Fix - Add failed to processing event for the processing email.
* Fix - Store user ID and use that to determine if the session should be loaded or not. Ensures user data is correct and shipping calculator data is stored.
* Tweak - Removed the non-functional order total input box, and combined the recalculation buttons into one working button.
* Tweak - Updated Guided Tour videos.
* Tweak - Updated js-cookie.js to 2.1.4.
* Tweak - Updated schema.org URLs to use HTTPS.
* Tweak - Status report request timeouts.
* REST API - Fixed an issue that prevented deleting a term if errors were thrown during creation.
* REST API - Fixed reports endpoint when querying by date.
* REST API - Fixed ignored order parameters when changing order status.
* Dev - Support guest orders in `wc_get_orders` function.
* Dev - Fixed downloadable variation filters for download URLs.
* Dev - Added safeguards to prevent infinite loops while saving coupons, products and orders in admin.
* Dev - Added a fallback for `queue_transactional_email` if background sending is disabled.
* Dev - Added `has_shipping_address` helper method.
* Dev - Introduced `woocommerce_order_item_get_formatted_meta_data` filter.
* Dev - Made wc_add_order_item pass correct values to woocommerce_new_order_item.
* Dev - Fixed `legacy_posted_data` access in checkout class.
* Dev - Fixed undefined property notice in `WC_Order_Item::offsetGet`.
* Dev - Fixed PHP 7.1 warnings when using non-float values to `wc_get_weight()`.
* Dev - Fixed incorrect variable name in `wc_add_order_item()`.
= 3.0.3 - 2017-04-13 =
* Fix - Fixed an issue with variation tax-classes when set to 'parent'. This made taxes apply on top of the tax inclusive price in certain setups.
* Fix - Escaped attribute translations in the `cart.php` template and bumped the template version to match.
* Fix - Corrected the display of refund dates on the order screen.
* Fix - Fixed the grouped product visibility check in the grouped.php template and bumped the template version to match.
* Fix - Fixed the sale badge display for grouped products.
* Fix - Added the `itemReviewed` structured data for product reviews to make it validate.
* Fix - Made the `get_attribute` method work on variation objects.
* Tweak - Turned off the deferred email sending by default which was added in 3.0. Whilst it does improve performance, there were compatibility problems on some servers. It can be enabled with a filter if desired.
* Dev - Added backtrace information to the deprecation messages to help find problem plugins.
= 3.0.2 - 2017-04-12 =
* Fix - Removed required states for GP, GF, KW, LB, MQ, RE and YT countries.
* Fix - Made cache in the [products] shortcode respect filters from plugins.
* Fix - Fixed shortcode rendering on the shop page.
* Fix - Fixed incorrect sale dates when bulk editing variations.
* Fix - Fixed calls to wc_reduce_stock_levels in PayPal and Simplify gateways.
* Fix - Exclude "location" meta when reading customer meta data.
* Fix - Updated `emails/email-addresses.php`, `emails/email-order-details.php`, `content-single-product.php`, `checkout/form-shipping.php`, `myaccount/form-add-payment-method.php`, `myaccount/form-edit-address.php`, `myaccount/form-lost-password.php`, `myaccount/form-reset-password.php`, `myaccount/orders.php` and `myaccount/view-order.php` template version to 3.0.0 since they had changes since 2.6.
* Fix - Fixed default behavior of variation tax classes when originally set to "parent".
* Fix - When duplicating products, do not copy slug, append "(Copy)" to the product name, correctly copy all meta data, and prevent children of grouped products being duplicated too.
* Fix - Removed duplicated items when outputting cross sells on the cart page.
* Fix - Fixed output of default "add to cart" text of external products in loops.
* Fix - Fixed backwards compatibility of guest checkout rules when being altered by plugins directly.
* Fix - Use correct thumbnail sizes for variation images in the new gallery.
* Fix - Fixed captions on thumbnails and main image in the new gallery.
* Fix - Trigger wc_fragments_loaded after add to cart fragment refresh.
* Fix - Download permissions; Convert dates to timestamp on read so UTC is preserved.
* Fix - Fixed notices under PHP 7.1 when sorting products by name (numeric).
* Fix - Added additional checks to ensure objects are read before using class methods to avoid errors.
* Fix - Removed legacy suggest.js code which was causing JS error on bulk edit.
* Fix - Fixed warnings on the "Lost password" page and when loading a product with invalid attributes.
* Fix - Made background emailer update the queue after a successful send so duplicate mails are less likely.
* Fix - Typo in flexslider_enabled option in new gallery script.
* Fix - woocommerce_notify_low_stock and woocommerce_notify_no_stock options had no effect.
* Tweak - For downloadable files, only validate file type when dealing with relative paths.
* Tweak - Improved automatic variation name generation.
* Dev - Added product visibility terms to system status report to help debug.
* Dev - Introduced `woocommerce_admin_order_date_format` filter to replace missing `post_date_column_time`.
* Dev - Introduced `woocommerce_update_customer_args` filter to prevent updates to user objects if needed.
* REST API - Fixed saving of variations in legacy REST API v3.
* REST API - Fixed backwards compatibility of line_items meta in legacy REST API.
* Fix - Show catalog hidden products within grouped products.
* Fix - Fade in the gallery in if no images are set or it's custom.
* Fix - Use wc_deprecated_function in WC_Deprecated_Hooks so notices aren't output in ajax requests.
* Fix - Added back the ability to include extra items to the System Status using the `woocommerce_system_status_environment_rows` filter.
* Fix - Coupon category restrictions and limits for variations.
* Fix - Allow shortcodes and HTML in variation descriptions like in 2.6.
* Fix - Unset post date when duplicating products.
* Fix - Show a sale price on variable products if on sale and all prices are the same.
* Fix - Corrected download links when a product has multiple downloads.
* Fix - Prevented potential errors if the product type was not posted for any reason on save.
* Fix - Updated `single-product/up-sells.php`, `loop/add-to-cart.php`, `loop/rating.php`, `checkout/form-billing.php`, and `content-product.php` template version to 3.0.0.
* Fix - Included clearfixes on billing and shipping field wrappers,
* Fix - Fixed styling of logs table in some languages.
* Fix - Fixed display of variation attributes on old orders.
* Fix - Use placeholder text for external products add to cart button text if left blank.
* Fix - Fallback to home URL if no shop page is set for system status security check for HTTPS.
* Fix - For variations, pull tax status and sold individually from the parent since there is no UI to set this at variation level.
* Fix - Moved cron emails to background processing to avoid multiple sends.
* Fix - Wrapped structured data in a hidden element when added to emails.
* Fix - Missing gateway information in queued emails.
* Fix - Fixed a bug that caused pages to permanently reload if "Default customer location" was set to "Geolocate (with page caching support)".
* Fix - When forcing shipping to billing, set the shipping fields in the order itself.
* Fix - Check for invalid objects in WC_Register_WP_Admin_Settings.
* Fix - Check for error object in wc_get_object_terms.
* Fix - Removed slashes in shipping meta data on the order edit screen.
* Fix - Prevented permalink rewrites for attributes with missing names.
* Fix - Fixed saving of meta data when multiple extensions use the `save_post` action.
* Fix - Allow search customers by ID in edit order screen.
* Fix - Prevents session data overwriting customer data on login.
* Fix - Fixed cross-sell column display and variation support.
* Fix - Fixed variable product stock syncing on save.
* Fix - Included try/catch wrapper to prevent issues with Select2.
* Fix - Prevented a bug that deleted all variations when the product type was change from variable to simple.
* Fix - Switched to WPDB to quicker update when syncing titles for variations.
* Fix - Exclude deprecated properties when loading a customer object.
* Fix - Fixed notices while trying to order again.
* Fix - Fixed notices when `$wpdb->prefix` is empty.
* Fix - Prevent errors when loading a product with an invalid download file types.
* REST API - Fixed missing array declaration in CRUD controller.
* REST API - Removed extra `exclude`, `include` and `search` parameters from taxes endpoint.
* REST API - Fixed variation description formatting.
* REST API - Fixed incorrect attribute check in products endpoint in Legacy REST API.
* New gallery on single product pages with better mobile support, using PhotoSwipe and Zoom. Declare support with add_theme_support() - wc-product-gallery-zoom, wc-product-gallery-lightbox, wc-product-gallery-slider
* Made the store notice dismissible on the frontend.
* Variable products no longer show striked out prices in combination with ranges for clarity when on sale.
* Prices no longer display as 'free' instead of 0, to fix issues with ranges and localization and for consistency.
* Improved structured product data by using JSON-LD instead of inline Microdata.
* Improved downloads list layout (template file).
* Respect stock status and prevent the "out of stock threshold" setting affecting existing in-stock products.
* Improved handling of shop page rewrite rules to allow subpages.
* Redirect to login after password reset.
* When using authorizations in PayPal Standard, automatically capture funds when the order goes processing/completed.
* On multisite, when a user logs into a store with an account on a site, but not the current site, rather than error, add the user to the current site as a customer.
* Show variable weights/dimensions even when parent values are not set.
* Automatically sort tax rates rather than allow clunky manual sorting.
* When deleting a tax rate class, remove it's tax rates.
* Made WC_Logger pluggable via wc_get_logger function.
* Use 'average rating' post meta for 'rating' product sorting option.
* Show better labels in nav menus metabox.
* Sort “Recently Viewed” products by the view order.
* Removed internal scroll from log viewer.
* Add reply-to to admin emails.
* Improved the zone setup flow.
* Made wc_get_wildcard_postcodes return the orignal postcode plus * since wildcards should match empty strings too.
* Use all paid statuses in $customer->get_total_spent().
* Move location of billing email field to work with password managers.
* Option to restrict selling locations by country.
* Added tool to clear orphaned variations in system status.
* Remove checkbox options in system status tools and replace with constants.
* Added security section in system status report.
* Add image_url setting to PayPal Standard.
* Fixed attribute registration. Attributes are non-hierarchical by default (parent is not supported).
* Add sort parameter to checkout fields to aid with sorting per locale.
* Merged percent and percent product coupon types (they provide the same discount).
* Prevent payment details being cleared after update_checkout events.
* Performance - Converted _featured and _visibility meta data to terms for faster catalog queries. Upgrade routine handles migration. Developers may need to update queries to reflect this change.
* Includes product attributes archives links in "Additional Information" tab.
* Select2 has been upgraded to v4.
* Improved logging system for extensions.
* Tax suffix is now hidden on non-taxable products.
* Performance - Converted rating filters to visibility terms.
* Performance - Added visibility term for outofstock products to speed those queries up also.
* Performance - Introduced a new CRUD (create, read, update, delete) system for Products, Orders, Customers and Shipping Zones.
* Performance - Optimised variable product sync. Upper/lower price meta is no longer stored, just the main prices, if a child has weight, and if a child has dimensions.
* Performance - Removed WP_Query from up-sells.php and related.php and replaced with PHP foreach loop (since we already have the product IDs).
* Performance - Removed the feature where old orders get access to new downloads on product edit. Looping potentially thousands of orders to do this is too much of a performance burden for stores and this can sometimes be unexpected behavior too. This does however updates *edited* downloads.
* Performance - Removed 'items' column on orders screen due to loading excessive data.
* Performance - Deferred email sending for faster checkouts. Now uses CRON.
* API - New Rest API v2 with support for meta_data amongst other things.
* API - Removed last order from customers part of the API due to performance concerns - use orders endpoint instead. Other order data on the endpoint is now transient cached.
* API - Allow oAuth1.0a authentication using headers.
* API - New Shipping Zones endpoints.
* API - New variations endpoints.
* API - New settings endpoints.
* API - Payment gateways and shipping methods endpoints.
* API - Prevented the (broken) ability to manipulate variations directly on the products endpoints.
* CLI - New CLI which uses the REST API endpoints rather than it's own functions.
* Localization - Improved RTL support.
* Localization - Added a language independent permalink setting function.
* Localization - Added inline comments for placeholder strings.
* Localization - Added Nigerian and Pakistan Provinces to i18n/state.
* Localization - US and Poland postcode validation.
* Fix - Make images shown up on pageload when using ajax variations.
* Fix - Allow variations options to be deselected in IE11.
* Fix - Disabled-button and pagination styling in 2017.
* Fix - PHP 7.1 compatibility issues with non-numeric math operations.
* Fix - Fix notices in abstract class when price is empty.
= 2.6.11 - 2016-12-22 =
* Fix - Variation form compatibility with quotes in attribute values, and initial variation image fadeIn on certain configs.
= 2.6.10 - 2016-12-22 =
* Fix - Flat rate no class costs when no shipping classes exist.
* Fix - Returned REST API coupon expiry date.
* Fix - reviews_allowed being set to false in Rest API.
* Fix - Sales date series for some custom ranges.
* Fix - Missing attributes when an option is chosen by default on variations. This was the result of a Firefox 50 compatibility fix. In order to support both Firefox, Chrome, IE, and Edge we've done some refactoring of the variation add to cart scripts.
* Tweak - Updated Geo IP API services.
* Dev - Added support for WP VIP/VIP GO GEO IP headers.
* Dev - API - Throw error messages when product image ID is not a valid WordPress attachment ID.
= 2.6.9 - 2016-12-07 =
* Theme - Added support for Twenty Seventeen Theme.
* Fix - Excluded webhook delivery logs from comments count.
* Fix - Included password strength meter in "Lost Password" page.
* Fix - Order fee currency in admin screen.
* Fix - Variation selection on Firefox 40.
* Fix - Don't prevent submission when table is not found on cart.
* Fix - Improved layered nav counts on attribute archives.
* Fix - Fixed pagination when removing layered nav items via widget.
* Fix - Default BE tax rate.
* Fix - Downloads should store variation ID rather than product if set. Also fixes link on account page.
* Fix - Use wp_list_sort instead of _usort_terms_by_ID to be compatible with 4.7.
* Fix - Only return empty string if empty for weight and dimension functions.
* Fix - Added correct fallbacks for logout/lost password URLs when endpoints are not defined.
* Security - Wrapped admin tax rate table values in _escape to thwart evil CSVs an admin user could upload. Vulnerability was discovered by Fortinet’s FortiGuard Labs.
* Dev - API - Only update categories menu order and display if defined.
* Dev - Fixed when should deliver wp_trash_post webhooks.
* Fix - Potential notices when leaving out 'default' field for shipping instances.
* Fix - wp_cache_flush after term meta migration/update.
* Fix - wc_add_to_cart_message() when non-array is passed.
* Fix - woocommerce_redirect_single_search_result type check was incorrect.
* Fix - Javascript show/hide of option in free shipping method.
* Fix - Convert ellipsis to three periods when saving postcodes.
* Fix - Prevent get_terms returning duplicates.
* Fix - Removed non-existent country (Netherlands Antilles) from https://en.wikipedia.org/wiki/ISO_3166-1.
* Fix - Grouped product range display when child is free.
* Fix - Remove discount when checking free shipping min amount.
* Fix - Prevent blocking the same element multiple times on cart page.
* Fix - Don't sync ratings right after a new comment to prevent rating sync whilst rating meta does not exist yet.
* Fix - Fix product RSS feeds when using shop base.
* Fix - woocommerce_local_pickup_methods comparison by stripping instance IDs before the check.
* Fix - During password resets, use cookie to store reset key and user login to avoid them being exposed in the URL/referer headers.
* Dev - API - Fixed variable product stock at product level.
* Dev - CLI - Introduces `woocommerce_cli_get_product_variable_types` filter.
* Dev - Allow notices to be grouped on checkout after certain events.
* Dev - API - Allows save images by ID with product variations.
* Tweak - Made customer pay link display if order needs_payment() rather than checking pending status.
* Tweak - Zones - Wording clarifications.
* Tweak - Zones - Match zones with postcodes but no country.
* Tweak - Zones - Match zones with no regions as 'everywhere'.
* Tweak - Added view_admin_dashboard cap for disabling the admin access restriction in custom roles.
* Tweak - Revised stock display based on feedback to hide 'in stock' message if stock management is off and only show available on backorder if notifying customer.
* Tweak - Allow external product SKUs.
* Tweak - PT (Portugal) and JP (Japan) postcode formats.
* Tweak - Sort products from the `[product_category]` shortcode by menu order.
* Tweak - Improve wc_orders_count() performance by running a query to count only posts of the given status.
* Tweak - To allow my account page tabs to be disabled without code, you can now set the endpoint value to a blank string.
* Fix - Correct the 'unavailable template' call for variations so the message is displayed correctly, fixing a JS error.
* Fix - Add 'media-models' dependency to write panel scripts.
* Fix - Fix hide empty check in category walkers.
* Fix - Current class fix on some servers when empty.
* Fix - Multibyte safe trim string function.
* Fix - Prevent a notice by stopping a loop in woocommerce_products_will_display from stomping on other variables.
* Fix - If an attribute meta key is not set, technically its 'any', so should match. Prevents issues when meta data is missing after renaming attributes.
* Fix - Make wc_get_product_variation_attributes ignore non variation attributes.
* Fix - Notice when no order notes exist.
* Fix - Removed extra tab from plain email shipping address.
* Fix - Round shipping after tax calculation instead of before to prevent wrong taxes being calculated.
* Fix - State input box was not reappearing when switching from a hidden input to a text input.
* Fix - Don't duplicate rating and review counts.
* Fix - CLI - Allow setting of a single category.
* Fix - API - Replace term_taxonomy_id for term_id whilst creating/editing terms.
* Fix - API - Fix parent_id and menu_order for variations.
* Fix - Combine update post calls when update_status is ran.
* Fix - Total number of comments in the admin panel.
* Tweak - Show customer details for logged in users only on thanks page to prevent customer details being revealed if someone finds out the URL.
* Tweak - Wrap status report in backticks to stop people breaking .org forums.
* Tweak - Error handling for screen ids.
* Tweak - Use $wpdb->replace instead of doing a select and then deciding to do an update or insert in session handler.
* Tweak - Added check for private WooCommerce pages in status report.
* Tweak - Transactional emails for failed -> on hold.
* Dev - Include new triggers when removing and adding the password strength meter.
* Dev - Allow pass objects and arrays as webhook callbacks.
* Feature - New default session handler. Uses custom table to store data rather than the options table for performance and scalability reasons. https://woocommerce.wordpress.com/2015/10/07/new-session-handler-in-2-5/
* Feature - New tax settings UI - faster, enhanced with ajax, searchable.
* Tweak - Removed language pack downloader in favour of translate.wordpress.org.
* Tweak - Added onboarding wizard button to the contextual help so it can be accessed again.
* Tweak - When a WordPress user is deleted, turn any orders they have into Guest orders.
* Tweak - When calculating order taxes, respect tax settings and default to base country.
* Tweak - Fade in variation images to avoid flicker during load.
* Tweak - Display 2 averages on report (net and gross).
* Tweak - Improve product search and use WPDB instead of several get_posts queries for performance.
* Tweak - Use SKU for stock order notes.
* Tweak - Added order notes for manual email sends.
* Tweak - Sanitize shipping method labels/titles.
* Tweak - Only display the coupon form on the checkout if a coupon hasn't been applied.
* Tweak - Added billing address column to order screen (off for new users).
* Tweak - Created function to disable author archives for customers.
* Tweak - When updating cart hash, refresh all open tabs.
* Tweak - Use new "question" mark icon font for help tips.
* Tweak - Improved review verification status retrieval.
* Tweak - Improve appearance when only 1 gateway is active.
* Tweak - Aligned terms box left and added required asterisk.
* Tweak - Removed dropdown display mode for cart shipping methods - radios are more flexible.
* Dev - API - Added /products/shipping_classes endpoint.
* Dev - API - Added support to POST, PUT, and DELETE categories and tags.
* Dev - API - Added support to filter products by tag, category, shipping class, and attribute.
* Dev - API - Added tax and tax_class endpoints.
* Dev - Template - New star ratings. The old one was 5 separate buttons. This new one consolidates the 5 options into one element making it leaner visually and more intuitive. Works in IE9+ with a graceful degradation for IE8.
* Dev - Template - Added `data-title` attribute to cart table.
* Dev - Template - Product archive anchors are now hooked into templates rather than hard coded.
* Dev - Template - Added template files for the customer details list in emails. emails/email-customer-details.php
* Dev - Template - Revised single variation cart template. Template files now exist for variations, and the cart button will display (disabled) when no selections are made.
* Dev - Template - Made "my orders" columns fully customizable with filters.
* Dev - Template - Unified email template order details tables to use a single template.
* Dev - Allow wc_clean to support arrays.
* Dev - Added a manual update trigger for checkout.
* Dev - Added woocommerce_is_price_filter_active filter to Query class.
* Dev - Replaced some cart methods with dedicated functions. e.g. wc_ship_to_billing_address_only().
* Fix - Potential XSS within price.php fixed with escape on get_price() (would require edit/admin permissions to take advantage of). Discovered by FortiGuard Labs (https://www.fortiguard.com/). Template version has been bumped.
* Fix - Handle Switzerland in get_european_union_countries.
* Fix - For geolocation with static cache support, ensure hash is appended during form submission.
* Fix - To prevent discounts being applied in 'random' order (based on order added to cart), sort cart items based on subtotal during calculate_totals.
* Fix - Removed extra ob_start() in class-wc-shortcodes.php.
* Fix - Show counts in category dropdown.
* Fix - Escape add to cart messages to stop translations from breaking cart events.
* Fix - Display of product/order tables in the dashboard when viewed on handheld devices.
* Fix - API order item 'key' value.
* Fix - Check specifically for Post IDs in WC Query verbose rules fix.
* Fix - Only run maybe_set_cart_cookies if cart was loaded to prevent notices.
* Fix - Variation loading/refresh after attribute saving.
* Fix - Added monthly cron schedule.
* Fix - Remove use of 'input' event in checkout scripts to prevent IE11 triggering updates on placeholder change.
* Fix - AJAX variations not being found in some cases when product version was < 2.4, but attributes were updated after sync().
* Feature - Onboarding/setup wizard for new users to handle basic store settings and installation.
* Feature - Improved help tabs with inline video tutorials where applicable.
* Feature - New AJAX powered variations interface to improve edit product page loading times and posting large amounts of data.
* Feature - For products with many variations, on the frontend switch to AJAX to load matching variations based on user input attributes, instead of doing it all inline.
* Feature - Show full category hierarchy in permalinks.
* Feature - Added priorities for shipping methods to give more control over defaults.
* Feature - [Added a new geolocation option to support static page caching using AJAX and a querystring.](https://woocommerce.wordpress.com/2015/07/02/making-geolocation-static-cache-friendly-in-2-4/)
* Feature - Email notifications for partial refunds.
* Feature - Visual API authentication endpoint for 3rd party use.
* Feature - API key generation changes. Secret keys no longer stored in database.
* Feature - [Refactored Flat Rate Shipping for simplicity.](https://woocommerce.wordpress.com/2015/06/simplifying-flat-rate-shipping-in-wc-2-4/)
* Feature - Made international shipping UI the same as flat rate.
* Feature - New ajax endpoints to improve performance by avoiding admin overhead.
* Fix - Ensure coupon taxes are reset when calculating totals.
* Fix - Improve discount amount rounding.
* Fix - Update order shipping after editing shipping from API.
* Tweak - Moved country next to other address fields in Checkout UI.
* Tweak - Improved reports, in particular for refunds.
* Tweak - Improve save_attributes ajax function to correctly save text attributes.
* Tweak - Base discounts on the undiscounted price. #5874
* Tweak - Added wc_product_cat_class functions.
* Tweak - Display related products and upsells in 4 columns.
* Tweak - Only redirect to welcome page for MAJOR versions/updates.
* Tweak - GeoLocation IPv6 database.
* Tweak - Improved text based attribute handling to prevent issues with slashes.
* [Various other small fixes and enhancements.](https://github.com/woocommerce/woocommerce/issues?q=is%3Aissue+milestone%3A%222.4+Helpful+Hedgehog%22+is%3Aclosed)
* Fix - Fixed Google Chrome forcing to use SSL. This can cause some issues on websites behind load balancers or reverse proxies. [Read more](https://docs.woocommerce.com/document/ssl-and-https/#websites-behind-load-balancers-or-reverse-proxies).
* Fix - Fixes too many arguments in function or method call: WC_Shortcode_My_Account::add_payment_method.
* Fix - Pass correct number of arguments to `wc_lostpassword_url()`, `wc_nav_menu_items()`, `wc_nav_menu_item_classes()`, and `wc_change_term_counts()`.
* Fix - Fixes usage of void return value from `wc_cart_totals_taxes_total_html()`.
* Fix - Missing global in `render_product_columns()`.
* Fix - Add `$args` arguments to `WC_Product_Factory->get_product_class()` to allow `$product_type` to be overwritten by `$args['product_type']`.
* Fix - Remove call to `wp_specialchars_decode()` in `wc_get_price_thousand_separator()` and `wc_get_price_decimal_separator()`.
* Fix - fclose in logging class requires a resource, not a string.
* Fix - Prevent (admin) SQLi when setting stock levels for product variations.
* Tweak - Extra escaping of customer emails in `wc_customer_bought_product()`.
* Tweak - Improve tooltip sanitization.
* Tweak - Escape provided array of post codes in tax class.
* Tweak - Escape metadata when duplicating products.
* Tweak - Escape permalink settings slugs.
* Tweak - Sanitize columns value in shortcodes.
* Tweak - Use prepare for updating attributes.
* Tweak - Use wp_safe_remote_ functions in place of wp_remote_ where applicable.
* Tweak - Added extra capability checks to notices, email template editing, and admin ajax requests.
* Tweak - Set nonce_user_logged_out to WC session ID, if set.
* Tweak - Added `wc_send_frame_options_header` function to prevent checkout and account pages from being used in iFrames. Added via filter so this can be disabled.
* Tweak - Validate file types are allowed for downloadable products when saving.
* Fix - Allow saving of empty download expiry date on orders.
* Fix - get_total_discount() function with certain tax setups.
* Fix - stock management for variations for Products API.
* Fix - Price filter styling.
* Fix - Support price filter min or max only.
* Fix - Allowed paths for file url.
* Tweak - Chile address format.
* Tweak - Revised how discounts/discount taxes are stored for consistency. Always store ex. tax to make data retrieval easier, and to ensure totals are correct after settings changes. Backwards compatibility maintained through use of order versioning.
* Tweak - Delete product attachments when the Products API fails.
* Feature - Display taxes in store based on the customer location, rather than the shop base.
* Feature - Made tax importer expand postcode ranges.
* Feature - Print styles for reports.
* Feature - Remove products from the cart in the widget.
* Feature - Bulk edit sales schedule on variations.
* Feature - Fresh new frontend / email design.
* Feature - Undo link in message when removing products from the cart.
* Feature - Compatibility with Twenty Fifteen default theme.
* Feature - Added 'top freebies' to product report.
* Feature - Added numeric sort for attributes.
* Feature - Added support for some Jetpack features: Omnisearch, Publicize and Markdown editor.
* Feature - UI for adding Webhooks.
* Feature - Show Gross and Net totals in reports.
* Refactor - Removed deprecated methods from WC_Frontend_Scripts and rewrote script registration and localization to run once.
* Refactor - Routing all email functionality through one send() method.
* Refactor - Replaced existing email css inliner with Emogrifier.
* Refactor - get_product_search_form().
* Refactor - Improved the Shipping Class field in products quick edit and bulk edit.
* Refactor - Removed style settings in favour of separate plugin.
* Refactor - Removed quantity increment/decrement buttons in favour of separate plugin.
* Feature - Added link on purchased products list on orders screen.
* Fix - When 'hide out of stock products' is disabled, out of stock variations / attributes are now visible.
* Fix - Fix cart coupon on-sale checks for variations.
* Tweak - Double the default product image dimensions.
* Tweak - Added refunds to Sales by Date report.
* Tweak - Updated prevent_caching() method to work if a cart/checkout page isn't set.
* Tweak - When user tries to download a file and isn't logged in, send them to the account page with a notice.
* Tweak - Logic in wc_paying_customer to only increase for 'simple' orders.
* Tweak - Added tool to refresh stats to customer list.
* Tweak - Recent order table on my account is responsive.
* Tweak - Drop WC tables in wpmu_drop_tables (for multisite).
* Tweak - Moved 'Proceed to checkout' button on cart to beneath totals.
* Tweak - Improved 'responsiveness' of product data tabs on add/edit product screen.
* Tweak - Added 'stupidtable' script to allow order item sorting on the order screen (by name, cost, qty).
* Tweak - In the cart, add variation selected data to the permalink.
* Dev - API - Look up product by sku.
* Dev - API - New parent_id param for products API.
* Dev - API - Sales data in API now matches sales data in WooCommerce reports page.
* Dev - API - Added 'net_sales' data to reports.
* Dev - API - catalog_visibility is set to visible by default in products API.
* Dev - API - Added new filter to query for specific products by ID: /products?filter[in]
* Dev - Made template debug mode set WC_TEMPLATE_DEBUG_MODE constant and remove all overrides for all template loading functions.
* Dev - Switched to .scss from .less for all styles.
* Dev - Included bourbon for scss mixins.
* Dev - Decoupled the order summary and payments area. Both are updated independently via ajax fragments and can be moved around via actions. TEMPLATES OVERRIDING THESE TEMPLATES WILL NEED TO UPDATE THEIR FILES.
* Dev - Moved WC_Cart::get_cart_from_session() and dependencies to a later hook (was init, now wp_loaded).
* Dev - Migrated away from CHOSEN to SELECT2. Chosen is still registered in case 3rd parties try to enqueue.
* Localisation - Add Ukrainian currency and symbol.
* Fix - Prevent sale prices showing errors in admin wrongly.
* Fix - Prevent order statuses affecting other queries.
* Fix - Removed deprecated get_page() functions.
* Fix - Category archives. WP core still has issues dealing with pad_counts + parent when getting categories. Workaround by not hiding empty cats, then filtering the returned list using wp_list_filter.
* Fix - When formatting meta data for display, suffix items to prevent issues when there are multiple values for the same meta key.
* Fix - Unhook save_meta_boxes after first successful run to prevent race conditions.
* Tweak - Added refunds to Sales by Date report.
* Tweak - Tweak load_plugin_textdomain to be relative - this falls back to WP_LANG_DIR automatically. Can prevent "open_basedir restriction in effect".
* Tweak - Added acceptance marks to PayPal Standard where applicable to replace generic PayPal icon.
* Refactor - Changed the method in which order statuses are stored. Previously, order status was a taxonomy. This caused issues when unique term slugs differed from what we were expecting, and also added additional overhead to order queries in reports. https://github.com/woocommerce/woocommerce/issues/3064 Order status is now stored as post status - several new post statuses have been added. Order class variables are backwards compatible. The only thing to note (for devs) is that any query must use the order status instead of 'publish' when getting orders and querying by post_status. THe shop_order_status has also been removed.
* Fix - Stop sending line items to Mijireh. Like PayPal, Mijireh struggles with out prices including tax due to rounding errors. Since the validation cannot be disabled, its better to just send the order as 1 item. This will prevent rounding errors and payment failures. Prices excluding tax are unaffected.
* Fix - Fix fee/coupon lines typo in REST API order response.
* Fix - Fixes a fatal error when WC()->payment_gateways()->get_available_payment_gateways() is called in the admin.
* Fix - is_available check in shipping for excluding countries was backwards.
* Fix - Encoding of @ in download links.
* Fix - Revise how variation attributes are deleted/updated. Prevents issues with WPE caching when you delete and then update right after.
* Fix - Trim commas and empty lines off address formats.
* Fix - defined a min value to cart quantity input.
* Fix - Fix qty input styling in Firefox 29.
* Fix - Use WP SEO class method rather than deprecated fn.
* Fix - Cleaned up logic in email_instructions.
* Fix - Prevent empty session data being stored until a cookie or session exists to retrieve it.
* Fix - fixed WC_Product_Variable::set_stock() compatibility with WC_Product::set_stock().
* Fix - Fix notice when not scanning any files in system status.
* Fix - Made wc_get_product_terms support custom menu_order by using get_terms and an include.
* Fix - Correct character 3 vaildation for UK postcodes.
* Tweak - Add a tip for default selections, and use opt groups for the long bulk edit list.
* Tweak - Option to toggle enable_for_virtual for COD, rather than just doing it.
* Dev - Introduce `woocommerce_coupon_data_panels` action.
* Dev - Add $package to is_available shipping method hooks.
* Dev - Add tool for disabling shipping rate cache for debug.
* Fix - Fixed a bug where cron events are scheduled using a function name rather than a hook name.
* Fix - Given transients not required on all pages expiration times to prevent autoloading.
* Fix - Don't trailingslash Order Cancel URLs with a Query String.
* Fix - Switch to jquery trim to allow checkout in older IE.
* Fix - Variation bulk sale price edit over reaching causing errors on save.
* Fix - Only append generator tag on HTML pages.
* Fix - AED currency symbol.
* Fix - Move loop_end hooks as it is generic and used in all WP loops. Prevents some theme conflicts.
* Fix - Lingering tooltip after gallery image delete.
* Fix - Move plugin headers to main WC POT file.
* Fix - Correct discount calculation in admin when fees are involved.
* Fix - Fix sale flash for out of stock sale items.
* Fix - Use protocol relative URLs in the cart widget because it gets cached and can display on https or http pages.
* Fix - Fix term recount during WP callbacks.
* Fix - Convert states to strings for PayPal (non-US).
* Fix - Hide empty at walker level to fix category widget display.
* Fix - form-login form values were not persistent after failed submission.
* Fix - URL decode not needed for custom text attribute names.
* Fix - Fix bulk editing variation sale price.
* Fix - Remove comment exclusion in order notes meta box.
* Fix - Sync min and max prices for regular and sale prices so prices are displayed correctly when sale price is lower than a regular price of another variation.
* Fix - Expanding line item_meta causes conflicts if attributes are named with things like 'name', 'type' or 'qty'. Added blacklist to exclude unsafe values.
* Fix - Added support for clearing report transients when using object caching.
* Fix - encoding issues with attribute values.
* Fix - Escape the contents of the changelog when displayed.
* Fix - Edge case where tax was still displayed for shipping when exempt.
* Tweak - Allow city field to use another input method.
* Tweak - Several new filters.
* Tweak - PayPal, modify currency error message to include both sent and returned currencies for comparison.
* Tweak - enable keyboard shortcuts in prettyPhoto.
* Tweak - Add classes to item meta.
* Tweak - Use is_purchasable to determine if a variation cart button is needed, and potentially show empty_price_html.
* Tweak - new woocommerce_cart_taxes_total filter.
* Tweak - new wc_cart_totals_taxes_total_html() function.
* Tweak - Use API request URL for mijireh and PayPal callbacks.
* Tweak - move variation data to tooltip in order items meta box.
* Tweak - Store variation data for order items added through the admin.
* Tweak - Billing Address > Billing Details text. We take more than address in this section.
* Tweak - Delete terms transient during recount.
* Refactor - jshint javascript files.
* Localisation - add Bangladeshi currency and symbol.
* Tweak - Updated/new dummy data (including .csv files to be used with [Product CSV Import Suite](https://woocommerce.com/products/product-csv-import-suite/)).
* Tweak - Removed placeholder polyfill. Use this plugin to replace functionality if required: https://wordpress.org/plugins/html5-placeholder-polyfill/
* Tweak - Updated/new dummy data (including .csv files to be used with [Product CSV Import Suite](https://woocommerce.com/products/product-csv-import-suite/)).
* Tweak/Fix - Merge taxes by CODE so totals are displayed clearer. Also added additional function for getting merged tax totals, and to keep compatibility with themes.
* Tweak/Fix - Recent reviews show actual review stars, and allowed get_rating_html() to be passed a rating. Also removed unused $location var.
* Fix - Saving of meta values from paypal after payment.
* Fix - woocommerce_nav_menu_items - only hide pages, not other objects.
* Fix - woocommerce_add_tinymce_lang array key.
* Fix - Find_rates now works with both postcode and city together.
* Fix - PrettyPhoto content clearfixed.
* Fix - Fix the download method when force SSL is on.
* Fix - Put back sandbox pending fix. Apparently still needed for some accounts.
* Fix - Do not sanitize old attribute name to not mess up comparing
* Fix - Settings API empty value only used if set. In turn fixes blank values in flat rate shipping.
* Fix - Ensure API Request URL scheme is not relative to the current page.
* Fix - Fix saving of download permissions in order admin.
* Fix - Action woocommerce_product_bulk_edit_end is now properly executed instead of outputted as HTML.
* Fix - Fix IE Download via SSL bug and fix http file over SSL.
* Fix - Show non-existing product line items.
* Fix - Conflicts with W3 Total Cache DB Cache
* Fix - piwik tracking.
* Tweak - Added a check to parent theme for comments_template before loading plugin template.
* Tweak - Remove hard coded max from random products widget.
* Tweak - Add filter hook to the place order button for easy 3rd party manipulation.
* Tweak - UX - Placeholder fades out on focus
* Tweak - UX - Only display validation result on required fields
* Tweak - Product column widths in admin
* Tweak - .shipping_address clears to avoid flash of ugliness in some themes when revealing shipping address
* Tweak - created an icon font for the star ratings to improve consistency
* Tweak - woocommerce_show_page_title filter
* Tweak - wrapper / css tweaks for TwentyThirteen compatibility
* Tweak - Added filters for controlling cross-sell display
* Tweak - Made hierarchy code in breadcrumbs more reliable.
* Fix - Removed Sidebar Login Widget. Use https://wordpress.org/extend/plugins/sidebar-login/ instead. A potential security issue was found regarding logging of passwords (since GET was used instead of POST). Sidebar Login 2.5 resolves this and the widget has been removed from WC to prevent needing to maintain two (virtually identical) codebases.
* Feature - Download expiry for variations (kudos niravmehta).
* Feature - Added wildcard support to local delivery postcodes.
* Feature - Option to enable Cash on Delivery for select shipping methods only.
* Feature - Stopped using PHP sessions for cart data - using cookies and transients instead to allow WC to function better with static caching. Also to reduce support regarding hosts and session configurations.
* Feature - Export and Import Tax Rates from a CSV file.
* Feature - Option to control whether tax is calculated based on customer shipping or billing address.
* Feature - New options for individual transaction emails with template editor.
* Feature - Redone order item storage making them easier (and faster) to access for reporting, and querying purchases. Huge performance gains for reports. Order items are no longer serialised - they are stored in their own table with meta. Existing data can be be updated on upgrade.
* Feature - Update weights/dimensions for variations if they differ.
* Feature - is_order_received_page() courtesy of Lee Willis.
* Feature - Inline saving of attributes to make creating variable products easier.
* Feature - Zip code restriction for local pickup.
* Feature - New free shipping logic - coupon, min-amount, Both or Either.
* Feature - Taxes can be based on shipping, billing, or shop base.
* Feature - Filter coupons in admin by type.
* Feature - Append view cart link on ajax buttons.
* Feature - Revised the way coupons are stored per order and added new coupon reports on usage.
* Feature - Updated/new dummy data (including .csv files to be used with [Product CSV Import Suite](https://woocommerce.com/products/product-csv-import-suite/)).
* Feature - Option to hold stock for unpaid orders (defaults to 60mins). When this time limit is reached, and the order is not paid for, stock is released and the order is cancelled.
* Feature - Added set_stock() method to product class.
* Feature - Linking to mydomain.com/product#review_form will now open the review form on load (if WooCommerce lightbox is turned on)
* Feature - Customers can sort by popularity + rating.
* Feature - Option to exclude coupons from sale items (thanks aj-adl)
* Feature - Logout "page" which can be added to menus.
* Templating - Revised pagination, sorting areas (sorting is now above products, numbered pagination below) and added a result count.
* Templating - email-order-items.php change get_downloadable_file_url() to get_downloadable_file_urls() to support multiple files.
* Templating - loop-end and start for product loops, allow changing the UL's used by default to something else.
* Templating - woocommerce_page_title function for archive titles.
* Templating - CSS namespacing changes (courtesy of Brian Feister).
* Templating - My account page broken up into template files (by Brian Richards)
* Templating - CSS classes standardised. Instances of '.woocommerce_' & '.wc-' replaced with '.woocommerce-'
* Templating - Ratings added to loop. Remove with [this snippet](https://gist.github.com/4518617).
* Templating - Replaced Fancybox with prettyPhoto
* Templating - loop-shop which was deprecated is now gone for good.
* Templating - Renamed empty.php to cart-empty.php to make clearer.
* Templating - Renamed sorting.php to orderby.php to better reflect contained hooks and code.
* Templating - Product tabs rewritten - new filter to define tab titles, priorities, and display callbacks.
* Tweak - Sorting uses GET to make it cache friendly
* Tweak - Optimised class loading (autoload). Reduced memory consumption.
* Tweak - Moved shortcodes and widgets to classes.
* Tweak - Tweaks to gateways API. Must use WC-WPI for IPN requests (classes will only be init when needed).
* Tweak - Save hooks for gateways have changed to match shipping methods. Plugins must be updated with the new hook to save options.
* Tweak - Cron jobs for scheduled sales.
* Tweak - Improved product data panels.
* Tweak - Improved installation + upgrade process upon activation.
* Tweak - Protect logs and uploads with a blank index.html
* Tweak - Append unique hash to log file names
* Tweak - get_order_number support for PayPal (thanks Justin)
* Tweak - Taxes - removed woocommerce_display_cart_taxes option in favour of never showing tax until we know where the user is (for tax exclusive prices). Tax inclusive continues to use base so prices remain correct.
* Tweak - Taxes - tweaked display of tax when using inclusive pricing to avoid confusion.
* Tweak - More granular capabilities for admin/shop manager covering products, orders and coupons.
* Tweak - Added some calculations to the order page when manually entering rows. Also added accounting.js for more accurate rounding of floats.
* Tweak - Order page can now calculate tax rows for you.
* Tweak - Display tax/discount total for reference on orders
* Tweak - Humanised order email subjects/headings
* Tweak - Cleaned up the tax settings.
* Tweak - If a PayPal prefix is changed, IPN requests break for all existing orders - fixed. new wc_get_order_id_by_order_key() function added. Thanks Brent.
* Tweak - On add to cart success, redirect back.
* Tweak - Prefix jquery plugins JS.
* Tweak - Made paypal use wc-api for IPN.
* Tweak - Due to new session handling, removed session section from the status page.
* Tweak - Removed upsell limit - show whats defined.
* Tweak - Args for upsells to control per-page and cols.
* Tweak - Recoded add_to_cart_action for better handling of variations and groups.
* Tweak - Admin sales stats show totals.
* Tweak - product_variations_{id} changed to product_variations array