* 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 - Reset shipping totals before calculation to prevent totals being used incorrectly.
* Fix - API - Corrected how attributes terms saves non-latin characters.
* Fix - API - Variations price sync.
* Fix - API - Fixed lost variable products data when create/edit an order.
* Tweak - Add trailing slash in get_page_uris to reduce likelihood of conflicts.
* Tweak - API - Added refunded_item_id on GET orders/<id>/refunds endpoint.
* Tweak - API - Allow variable products to get retrieved by SKU.
* Tweak - API - Allow edit variations without define the product type to variable.
= 2.4.7 - 21/09/2015 =
* 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().
* Fix - Query within wc_customer_bought_product().
* Fix - Tab hiding with some theme markup.
* Fix - Ajax variations: stripslashes to fix attributes with quotes.
* Fix - No longer returns to the first variation list page when deleting one variation.
* Fix - Refund subjects when order contains downloadable product.
* Fix - wc_get_product_variation_attributes should only get parent attributes which are for variations.
* Tweak - Disable display_errors during ajax requests to prevent malformed JSON.
* Tweak - When merging shipping taxes with a shipping rate taxes, ensure shipping rate taxes is not malformed.
* Tweak - Improved refund email events and woocommerce_order_fully_refunded hook.
= 2.4.2 - 11/08/2015 =
* Fix - If all variations are out of stock, maintain pricing display.
* Fix - Prevent double add to cart due to ajax endpoints.
* Fix - ordering_args in product_category shortcode.
* Fix - Tax inclusive prices rounding case.
* Tweak - If no variation prices are found, show no price label rather than free.
* Tweak - Made tab panel selector more specific to avoid theme conflicts.
* Tweak - Made checkout make use of new ajax endpoints.
* Tweak - woocommerce_force_ssl_checkout no longer needs to check for admin-ajax actions.
* Tweak - Hide get_formatted_legacy notices when doing ajax.
* Tweak - use shop_single instead of full image size for variations.
= 2.4.1 - 10/08/2015 =
* Fix - Tweaked the 2.4 upgrade routine to disable refund emails during update.
* Fix - Notices when calling get_shipping_classes().
* Fix - Added upgrade routine to ensure _stock_status meta exists for variations created before WooCommerce 2.2
= 2.4.0 - 10/08/2015 =
* 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.
* Tweak - Update html-admin-page-status-report.php to show unaltered URLs.
* Tweak - When updating transients, clear previous version of transients.
* Tweak - Replace max_related_posts_query for performance reasons.
* Tweak - Combine transients for get_rating_count.
* Tweak - Bump the PrettyPhoto version during enqueue to flush caches.
* Tweak - Remove all instances of sslverify=false #8058
* Tweak - Error prevention when showing customer orders on the frontend.
* Tweak - Added PH states.
= 2.3.9 - 19/05/2015 =
* Fix - Fixed language upgrader verification.
* Fix - Refund reporting #8010
* Fix - Redirect after bulk editing.
* Fix - Prevent variable overwrite in save_product_meta.
* Fix - Fix stock report pagination.
* Fix - Fixed paypal about URL for Malta.
* Fix - Fixed save downloadable files for product variations.
* Fix - Remove submitdiv and fix post status updating.
* Fix - Fixed the sort order dropdown items when create new product attributes.
* Fix - Move action to prevent infinite recursion on login/restoring saved carts.
* Fix - Update PrettyPhoto to 3.1.6 to resolve XSS security issue https://github.com/scaron/prettyphoto/issues/149
= 2.3.8 - 20/04/2015 =
* Fix - Ensure coupon taxes are reset when calculating totals.
* Fix - Downloads url sanitization to work correctly with shortcodes and urls.
* Fix - State/Country select2 issues with Internet Explorer.
* Fix - Flat rate per item and per class if no additional costs added.
* Fix - Simplify Commerce compatibility with free trial subscriptions.
* Fix - Select2 z-index in the admin.
* Fix - Postmeta records deletation on plugin uninstall.
* Fix - List only approved comments in products reviews on API.
* Fix - Improved variation SKU display.
* Fix - Prices including tax within orders.
* Fix - Ensure line taxes are stored when calculating tax theough the API.
* Fix - Add null date check for download permissions.
* Fix - PayPal Logging.
* Fix - Coupon product id and category id checks should run for all coupon types.
* Tweak - Hook in cart totals via action.
* Tweak - Prevent errors when adding or deleting products for the coupon.
* Tweak - Prevent errors when check customer capability to view orders.
* Tweak - Ensure Price Filter links has a trailing slash to avoid pagination issues.
* Tweak - Improved the check for mismatched totals in items lines for PayPal payment gateway.
* Tweak - Use wc_stock_amount to format API orders stock amount.
* Tweak - Ensure show_in_admin_all_list is respected for order statuses.
* Tweak - Remove rounding from shipping costs for greater shipping tax precision.
* Tweak - Only automatically cancel orders created via checkout + allow post_parent to be set.
* Tweak - Deny all access to revisions through API.
= 2.3.7 - 18/03/2015 =
* 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.
= 2.3.6 - 13/03/2015 =
* Fix - Removal of coupons containing spaces.
* Fix - Unclosed div in profile page.
* Fix - Export report CSV.
* Fix - Settings API - allow multiselect fields to be emptied.
* Fix - Saving an order needs to save the discount amount ex. tax like the cart.
* Fix - Order again with custom attributes.
* Fix - [CVE-2015-2329] Prevent potential XSS within tooltips (discovered by Fortinet FortiGuard Labs).
* Fix - Paypal debug option.
* Fix - Removed $q->query['wc_query'] = 'product_query' which broke redirects (#7703). Use $q->get('wc_query') instead.
* Fix - Sanitize tax_rate_id when saving taxes in the backend to prevent potential SQL injection (discovered by WordFence).
* Tweak - Show discounts inc. tax when showing order totals inc. tax.
* Tweak - Use 30 days instead of year for transients to avoid bugs in memcache plugins.
* Tweak - Add reports menu item if user can access reports but not the main WC section.
* Tweak - Load the persistant cart if cart is empty.
* Tweak - Prevent cart being cleared when accessing the login page.
* Tweak - Shipping calculator - Made state/postcode respect country locale like checkout.
* Tweak - Move default customer location to general settings tab.
* Tweak - Only run save_category_fields for product_cat taxonomy.
* Tweak - Improved message when variation attributes are missing.
* Tweak - Allow wc_attribute_label to support product-level attribute names.
* Tweak - Added the option to not round the line total.
* Tweak - Improved coupon percent calculation for fixed discounts.
* Tweak - Show calculate total when shipping is needed, but shipping is hidden.
* Tweak - Cart total labels.
* Tweak - Increase wc_get_weight precision.
* Dev - API - reports/sales now also returns total refunds.
= 2.3.5 - 20/02/2015 =
* Fix - Plain text address formatting.
* Fix - Detect shortcodes when saving URLs.
* Fix - Unhook wc_page_endpoint_title after it is ran once (main page title).
* Fix - Taxes save issue when page is paginated.
* Fix - Cross/up-sells should not search variations.
* Fix - Related post offset.
* Tweak - Round report values.
* Tweak - Text in plain text emails.
* Tweak - Improve category coupon message.
* Tweak - Don't download GeoIP Database until geolocation option is enabled in settings.
= 2.3.4 - 17/02/2015 =
* Fix - limit_usage_to_x_items option in coupons.
* Fix - Run coupon codes through html_entity_decode.
* Fix - Tax by code report for refunds.
* Fix - Auto-generation of slug when adding new attribute.
* Fix - Prevented errors when `DOMDocument` is not found (used for your HTML/Multipart emails).
* Fix - Load WC css on user edit screen.
* Fix - DB error when showing reports by product without selecting a product.
* Fix - Stock status when updating out of stock product.
* Fix - Fix place order button text on init.
* Fix - When duplicating products, handle entities.
* Fix - Double shop page in breadcrumb and white space issues.
* Fix - When purchasing multiple downloadable products (same item), multiply download limit by qty purchased.
* Fix - Added checks for gzopen to prevent activation errors.
* Tweak - Added DOMDocument item in the System Status as a requirement.
* Tweak - Simplify default mode should be 'standard'.
* Tweak - Set attribte 'query_var' true when public.
* Tweak - Use wc_get_page_permalink() to get page permalinks.
* Tweak - Register shop_order post statuses earlier to ensure statuses are registered for cron.
* Tweak - Improvements to refund handling in Taxes by code/date, and sales by date reports. Gross/net excludes refunds.
* Tweak - Share data between Sales by Date report and API.
* Tweak - Related posts - replace ORDER BY RAND() with random offset.
* Tweak - Run item meta label through wc_attribute_label() in admin order page.
* Tweak - Run File URLs through esc_url_raw instead of wc_clean to preserve spaces.
* Tweak - Small timeout on checkout update action to prevent several triggering at once.
* Tweak - Restock items AFTER refund, not before.
* Tweak - If logged in, populate customer data from user meta.
= 2.3.3 - 12/02/2015 =
* Fix - Potential notice with preg_match wildcard search, if used incorrectly.
* Fix - Typo in get_from_name method.
* Fix - Fix errors during checkout when mb_convert_encoding() is not supported.
* Fix - Change hooks used to output post columns - fixes columns after quick edit.
* Fix - Only apply product/cat coupon checks for cart to cart coupons.
* Fix - Query in uninstall script.
* Tweak - Only run the uninstaller if the "Uninstall on Delete" option is checked in system status.
= 2.3.2 - 12/02/2015 =
* Fix - Item meta removal query in order class.
* Fix - Pass correct shipping cost to PayPal.
* Fix - Flat rate extra costs when costs are an array.
* Fix - When ratings are required for reviews, ensure validation is performed if the rating element is removed from DOM.
* Fix - When updating shipping in cart, keep shipping calculator in DOM.
* Fix - WC_TEMPLATE_DEBUG_MODE in admin.
* Fix - Average product rating when ratings are not required.
* Fix - attribute_public option.
= 2.3.1 - 11/02/2015 =
* Fix - When the geolocation database cannot download, ensure the correct method is used to log the error.
* Fix - Notice in woocommerce_form_field().
* Fix - attribute_public notice before DB upgrade.
* Fix - [products] ids and sku args.
* Fix - Backwards compatibility for (deprecated) $tax variable in WC_Cart.
* Fix - is_available() check in local pickup.
* Fix - Added WC version of GEOIP classes to prevent conflicts with other plugins.
= 2.3.0 - 11/02/2015 =
* Feature - Option to geo-locate the customer's inital location.
* 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.
* Localisation - Greece regions.
= 2.2.11 - 29/01/2015 =
* Add - URL in Usage/Limit column in Coupons table to query for orders.
* Fix - esc_url() applied to prevent potential XSS issues.
* Fix - "Link all variations" button.
= 2.2.10 - 16/12/2014 =
* Fix - Stock status on quick and bulk edit.
* Fix - Incorrect clearing of error messages.
= 2.2.9 - 15/12/2014 =
* Add - API - parent_id for products endpoint.
* Fix - Processing and On-hold order links in WooCommerce Status dashboard widget.
* Fix - Orders API when query orders with deleted products.
* Fix - Check order exists in wc_clear_cart_after_payment().
* Fix - Filters in admin screen for coupons and orders.
* Fix - When bulk editing, don't allow sale price to be negative.
* Fix - When manually adding items to an order, show tax columns.
* Fix - When manually adding items to an order, include variation data.
* Fix - Prevent errors when constructing WC_Order without an ID.
* Fix - Item_id notices in email templates.
* Fix - Use variation get_stock_quantity() for variation max_qty.
* Fix - Prevent bulk edit cancel from clearing options when bulk editing variations.
* Fix - Use term_taxonomy_id for transient names - fixes counts in layered nav.
* Fix - Use wc_get_order in simplify-commerce.
* Fix - Use 'no' instead of boolean to disable PayPal gateway.
* Fix - Do not escape redirect url in form handler - fixes malformed URLs.
* Fix - Prevented non-existant pages from breaking cache helper.
* 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.
= 2.2.4 - 18/09/2014 =
* Fix - Prevent errors when adding 'zero-rated' tax on checkout.
* Fix - Fixed a varation product width inheritance bug.
* Fix - Totals in taxes by date report.
* Fix - Fix the 'only 1 visible product' redirect to not trigger when paging results.
* Tweak - Improved headers sent notice to include file and line.
* Tweak - When updating order status, ensure its a valid WC order status.
* Tweak - Add notice when order is no longer editable.
* Dev - Allow getting rating count for a specific rating value #6284.
* Localisation - Nepal States.
* Localisation - Mexico states.
= 2.2.3 - 16/09/2014 =
* Fix - Order status translation in admin and account page.
* 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 additonal 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.
= 2.1.8 - 30/04/2014 =
* Fix - Prevent saving duplicate skus in quick edit.
* Fix - Sorting of downloads on my account page.
* Fix - Clear cached API reports when deleting other order transients.
* Fix - Shipping calculator cart messages.
* Fix - Display of UTF8 attributes on view order page.
* Fix - Changed the way the order review html is appended to the checkout page via JS to reduce likelihood of errors.
* Fix - Allow removing downloads from product by removing all rows.
* Fix - Ignore variation stock if disabled globally.
* Fix - Prevent duplicate admin menu items when using menu editor plugins.
* Fix - Remove title from product not purchasable message to prevent possible data leak. Thanks Julio Potier.
* Tweak - Use is_ssl() for get_woocommerce_api_url().
* Tweak - Changes to filters to see if shipping is needed or not in the cart class.
* Tweak - Chunk option names in cleanup_sessions() to reduce load.
* Tweak - Change \WC_Order::add_order_note cap to edit_shop_order instead of manage_woocommerce.
* Tweak - Allow filtering order statuses in dashboard reports widget.
* Tweak - Added is_paying_customer() to easily check if a user is a WC customer.
* Tweak - Allow query string fallback for REST API SSL auth.
* Tweak - woocommerce_coupon_get_discount_amount filter in coupon class.
* Tweak - More friendly/less blunt "no shipping" messages.
* Tweak - use network_site_url instead of network_admin_url for multisite.
* Tweak - Updater - Only show upgrade notices, and use transient cache.
* Tweak - get_image_id method for use in email template. Shows correct variation images.
* Tweak - added validation when save the frontend colors.
= 2.1.6 - 25/03/2014 =
* 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.
* Localisation - Bangladeshi states (districts).
* Localisation - Croatian currency symbol.
= 2.1.5 - 06/03/2014 =
* Fix - Prevent notices on new plain text email parameter for BACS and Cheque gateways
* Fix - Fixed issue where variation prices were hidden when variation stock management wasn't set
* Fix - Discounts fixed_product are now properly multiplied by quantity
* Fix - Fixed bulk edit % increase and decrease
* Fix - Extra check for access_expires when getting downloadable files
* Fix - get_related method fixed tags OR query not excluding product ID
* Tweak - Fallback for when add ons page is not loading
* Tweak - Hide price suffix in admin panel lists
= 2.1.4 - 05/03/2014 =
* Fix - Prevent duplicate loading of functions files
* Fix - Fixed breaking timeline for reports
* Fix - Category widget ordering
* Fix - BACS and Cheque gateway emails now have a plain text flag
* Fix - wc_get_product_ids_on_sale will never return 0
* Fix - Prevent errors upon comments when order is in trash
* Fix - Reviews widget now links to proper review anchor
* Fix - Added support for permalinks containing a query string in wc_get_endpoint_url
* Fix - Variable product add file button works after adding a new variation
* Fix - Resolved issue where styles didn't get compiled properly
* Fix - Changed the save order so email data is correct for manual orders
* Fix - Later hooking in for template redirect
* Fix - Reverted load order change for language files and provided proper context
* Fix - Made woocommerce_update_cart_action_cart_updated a filter which can return true or false to recalc totals
* Fix - Updated sync logic to exclude hidden and out of stock variations from the price display
* Fix - Changed set_stock to only make a variable product out of stock if all variations are stock managed to resync prices after stock changes
* Fix - Use woocommerce_notify_no_stock_amount not 0 in variable class sync method
* Fix - Suppress errors in download handler by silencing ob_flush and flush calls
* Fix - load_textdomain first from WP_LANG_DIR before load_plugin_textdomain
* Tweak - get_states method now returning false instead of array for countries without states
* Tweak - Improved shipping language strings
* Tweak - Remove admin check around global po translation file loading
* Tweak - Improved styles for tab views
* Refactor - Hardened code base and fixed strict standards notices
= 2.1.3 - 27/02/2014 =
* Fix - Use correct thresholds to calculate out of stock number in dashboard widget
* Fix - Admin screen strings sanitised to work with Chinese characters
* Fix - REST API OAuth signature fixed when using filter params
* Fix - Ensure shipping address data for customers is updated if only shipping to billing address
* Fix - Fixed sprintf missing parameter in customer-new-account.php template
* Fix - Ampersand character properly outputted in plain text emails
* Fix - Stack the password reset fields on smaller screens
* Fix - Bulk edit options now reflect on all variations
* Fix - Prevent notices when country has states but no states are specified in cart
* Fix - Make my-account/view-order use the correct template file
* Fix - Prevent session warnings when WordPress logs out
* Fix - Prevent spaces in file names from breaking product thumbnails
* Fix - Resolved issue where download permissions where not granted in some cases upon order complete
* Fix - Prevent IE cursor from being stuck in loading animation
* Fix - Ensure wc_get_product_ids_on_sale returns array of ints, not strings
* Fix - Prevent rating stars from wrapping in IE
* Fix - Rating stars properly aligned in small screens
* Fix - Handle get_rate_code when no matching rate is found
* Fix - Cleaned noticed that might show when tax rates left empty
* Fix - Prevented warning when you have hide shipping methods until address entered selected in CoD
* Fix - Better URL detection for subdirectory installs in get_woocommerce_api_url
* Fix - Transient names are now md5 hashed so they don't exceed max length
* Fix - Fixed searching for orders and speed improvements there
* Fix - "Show children of current category only" option working again in Product Category widget
* Fix - Order search by SKU can now return multiple results again
* Fix - Fixed alignment of radio button in settings API
* Fix - Layered nav widget now shows terms again when using list OR
* Fix - Prevent multiple attempts at cancelling actions on orders
* Fix - Fixes in reporting for variations
* Fix - My Accounts downloads section now shows files names
* Fix - Improved code to log in via email address
* Fix - When guest checkout is enabled, manual made admin orders can be paid without logging in
* Fix - Fix product counts when subcategories are displayed
* 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/)).
* Localization - Slovak translation by Dusan Belescak.
* Localization - Added RUB currency.
* Other minor fixes and localisation updates.
= 2.0.8 - 17/04/2013 =
* Feature - Related products shortcode.
* Tweak - Order item meta - skip serialized fields.
* Tweak - Support for the city field in shipping calc (filterable).
* Tweak - use base_country for tax calculations in manually created orders.
* Tweak - Download permissions meta box show cleaner filenames.
* Fix - Updated shareyourcart SDK.
* Fix - moved woocommerce_get_filename_from_url to core-functions as it is required in admin too.
* Fix - checkmark after adding to cart multiple times.
* Fix - Saving text attributes. Posted 'text' terms are not slugs. Only striptags/slashes - don't change to slugs.
* Fix - Insert URL button when working with multiple variations.
* Fix - Undefined found_shipping_classes in flat rate shipping.
* Fix - Fix saving options for attribute taxonomies containing special chars.
* Fix - Prevent empty meta queries.
* Localization - Norwegian updates by Tore Hjartland
* Localization - Spanish updates by Laguna Sanchez
* Localization - Romanian updates by Aurel Roman
* Localization - Finnish updates by arhipaiva
= 2.0.7 - 12/04/2013 =
* Feature - Option for GA _setDomainName.
* Tweak - Removed rounding when option to round at subtotal is set.
* Fix - Allow extra flat rate options even if main rate is 0.
* Fix - Fix email subject lines if options not set.
* Fix - Prevent over-sanitization of attribute terms when editing products.
* Fix - Sanitize terms when linking all variations.
* Fix - Sanitize coupon code names before checking/applying.
= 2.0.6 - 10/04/2013 =
* 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.
* Localisation - NZ States
* Other minor fixes and localisation updates.
= 2.0.5 - 26/03/2013 =
* Tweak - Made no shipping available messages filterable via woocommerce_cart_no_shipping_available_html and woocommerce_no_shipping_available_html.
* Tweak - disabled keyboard shortcuts in prettyPhoto.
* Tweak - woocommerce_date_format() function.
* Tweak - After adding to cart, add 'added_to_cart' to querystring - lets messages show with cache enabled.
* Tweak - Similar to above, on failure don't redirect. The POST should exclude from cache.
* Tweak - Version data on system status page.
* Fix - Fix orderby title - separated from menu_order.
* Fix - WC_Product::set_stock_status() to correctly set status.
* Fix - last_modified_date updated on status change for orders.
* Fix - Sanitize id in woocommerce_get_product_to_duplicate function
* Fix - Cancel order function now looks at post_modified instead of post_date.
* Other minor fixes and localisation updates.
= 2.0.4 - 18/03/2013 =
* Tweak - Like my account, added order_count attribute to view order shortcode.
* 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