Action and Filter Hook Reference
'; - echo 'The following is a full list of actions and filters found in WooCommerce core.
' . $heading . '
'; + echo '' . $heading . '
Hook | Type | File(s) |
---|
Hook | Type | File(s) |
---|---|---|
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index a4be5a0c395..689ae2a2296 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -8,7 +8,7 @@ __Please Note:__ GitHub is for _bug reports and contributions only_ - if you have a support question or a request for a customization this is not the right place to post it. Use [WooThemes Support](http://support.woothemes.com) for customer support, [WordPress.org](http://wordpress.org/support/plugin/woocommerce) for community support, and for customizations we recommend one of the following services: -- [Woo Experts](http://www.woothemes.com/experts/) +- [WooExperts](http://www.woothemes.com/experts/) - [Codeable](https://codeable.io/) ## Contributing To The Core diff --git a/apigen.neon b/apigen.neon index 7f2937c2f43..aec9743d1bc 100644 --- a/apigen.neon +++ b/apigen.neon @@ -26,7 +26,7 @@ charset: [UTF-8] main: WC # title of generated documentation -title: WooCommerce +title: WooCommerce 2.5.x Code Reference # base url used for sitemap (useful for public doc) baseUrl: http://docs.woothemes.com/wc-apidocs/ @@ -50,4 +50,4 @@ deprecated: true todo: true # add link to ZIP archive of documentation -download: false \ No newline at end of file +download: false diff --git a/apigen/hook-docs.php b/apigen/hook-docs.php index 3beed33bfd5..5da84ac48e1 100644 --- a/apigen/hook-docs.php +++ b/apigen/hook-docs.php @@ -84,7 +84,6 @@ class WC_HookFinder { echo '
The following is a full list of actions and filters found in WooCommerce core.
Hook | Type | File(s) |
---|
Hook | Type | File(s) |
---|---|---|
{$method->declaringClassName} | +{$method->name}() |
+
+ {if $method->hasAnnotation($annotation)}
+ {foreach $method->annotations[$annotation] as $description}
+ {if $description}
+ {$description|annotation:$annotation:$method|noescape} + {/if} + {/foreach} + {/if} + |
+
{$constant->declaringClassName} | +{$constant->name} |
+
+ {else}
+ {$constant->namespaceName} | +{$constant->shortName} |
+ {/if}
+
+ {foreach $constant->annotations[$annotation] as $description}
+ {if $description}
+ {$description|annotation:$annotation:$constant|noescape} + {/if} + {/foreach} + |
+
{$property->declaringClassName} | +${$property->name} | +
+ {foreach $property->annotations[$annotation] as $description}
+ {if $description}
+ {$description|annotation:$annotation:$property|noescape} + {/if} + {/foreach} + |
+
{$function->namespaceName} | +{$function->shortName} |
+
+ {foreach $function->annotations[$annotation] as $description}
+ {if $description}
+ {$description|annotation:$annotation:$function|noescape} + {/if} + {/foreach} + |
+
No elements with @{$annotation}
annotation found.
{foreach $children as $child}
- {$child->name}{sep}, {/sep}
+ {$child->name}
{sep}, {/sep}
{/foreach}
+
- {if !$class->interface && $method->abstract}abstract{elseif $method->final}final{/if} {if $method->protected}protected{elseif $method->private}private{else}public{/if} {if $method->static}static{/if}
+
+ {if !$class->interface && $method->abstract}abstract{elseif $method->final}final{/if} {if $method->protected}protected{elseif $method->private}private{else}public{/if} {if $method->static}static{/if}
+ {ifset $annotations['return']}{$annotations['return'][0]|typeLinks:$method|noescape}{/ifset}
+ {if $method->returnsReference()}&{/if}
+
+
- {ifset $annotations['return']}{$annotations['return'][0]|typeLinks:$method|noescape}{/ifset}
- {if $method->returnsReference()}&{/if}
-
- {block|strip}
+ {if $class->internal}
+ {$method->name}(
+ {else}
+ {$method->name}(
+ {/if}
+ {foreach $method->parameters as $parameter}
+ {$parameter->typeHint|typeLinks:$method|noescape}
+ {if $parameter->passedByReference}& {/if}${$parameter->name}{if $parameter->defaultValueAvailable} = {$parameter->defaultValueDefinition|highlightPHP:$class|noescape}{elseif $parameter->unlimited},…{/if}{sep}, {/sep}
+ {/foreach}
+ ){/block}
- {block|strip}
- {if $class->internal}
- {$method->name}(
- {else}
- {$method->name}(
+ {if $config->template['options']['elementDetailsCollapsed']}
+
+ {$method|shortDescription:true|noescape}
+
{/if}
- {foreach $method->parameters as $parameter}
- {$parameter->typeHint|typeLinks:$method|noescape}
- {if $parameter->passedByReference}& {/if}${$parameter->name}{if $parameter->defaultValueAvailable} = {$parameter->defaultValueDefinition|highlightPHP:$class|noescape}{elseif $parameter->unlimited},…{/if}{sep}, {/sep}
- {/foreach}
- ){/block}
- {if $config->template['options']['elementDetailsCollapsed']}
-
+ {foreach $methods as $method}
+ {$method->name}()
{sep}, {/sep}
+ {/foreach}
+
+ {foreach $methods as $data}
+ {$data['method']->name}(){if $data['aliases']}(as {foreach $data['aliases'] as $alias}{$alias->name}(){sep}, {/sep}{/foreach}){/if}
{sep}, {/sep}
+ {/foreach}
+
+ {foreach $methods as $method}
+ {$method->name}()
{sep}, {/sep}
{/foreach}
-
- {var $overriddenMethod = $method->overriddenMethod}
- {if $overriddenMethod}
-
- {foreach $methods as $method}
- {$method->name}(){sep}, {/sep}
{/foreach}
- |
-
- {foreach $methods as $data}
- {$data['method']->name}(){if $data['aliases']}(as {foreach $data['aliases'] as $alias}{$alias->name}(){sep}, {/sep}{/foreach}){/if}{sep}, {/sep}
+ {foreach $usedMagicMethods as $traitName => $methods}
+ |
-
- {foreach $methods as $method}
- {$method->name}(){sep}, {/sep}
- {/foreach}
- |
-
- {foreach $methods as $data}
- {$data['method']->originalName}(){if $data['aliases']}(as {foreach $data['aliases'] as $alias}{$alias->name}(){sep}, {/sep}{/foreach}){/if}{sep}, {/sep}
- {/foreach}
- |
-
{$constant->typeHint|typeLinks:$constant|noescape} |
-
-
- {if $class->internal}
- {$constant->name}
- {else}
- {$constant->name}
- {/if}
-
+ | {$constant->typeHint|typeLinks:$constant|noescape} |
+
+
+ {if $class->internal}
+ {$constant->name}
+ {else}
+ {$constant->name}
+ {/if}
+
-
- {$constant|shortDescription:true|noescape}
-
-
-
- {$constant|longDescription|noescape}
-
- {foreach $template->annotationSort($template->annotationFilter($annotations, array('var'))) as $annotation => $descriptions}
- {$annotation|annotationBeautify}-
- {foreach $descriptions as $description}
- {if $description}
- {$description|annotation:$annotation:$constant|noescape}
- - {/if} - {/foreach} +
+ {$constant|shortDescription:true|noescape}
- {/foreach}
- |
-
-
- #
-
- {$constant->valueDefinition|highlightValue:$class|noescape}
- |
-
- {foreach $constants as $constant}
- {$constant->name}{sep}, {/sep}
+ |
+
+
+ #
+
+ {$constant->valueDefinition|highlightValue:$class|noescape}
+ |
+
+ {foreach $constants as $constant}
+ {$constant->name}
{sep}, {/sep}
+ {/foreach}
+
- {if $property->protected}protected{elseif $property->private}private{else}public{/if} {if $property->static}static{/if} {if $property->readOnly}read-only{elseif $property->writeOnly}write-only{/if}
- {$property->typeHint|typeLinks:$property|noescape}
-
{$property->defaultValueDefinition|highlightValue:$class|noescape}
-
+ {if $property->protected}protected{elseif $property->private}private{else}public{/if} {if $property->static}static{/if} {if $property->readOnly}read-only{elseif $property->writeOnly}write-only{/if}
+ {$property->typeHint|typeLinks:$property|noescape}
+
- {foreach $properties as $property}
- ${$property->name}{sep}, {/sep}
+ |
+ {foreach $properties as $property}
+ ${$property->name}
{sep}, {/sep}
+ {/foreach}
+
- {foreach $properties as $property}
- ${$property->name}{sep}, {/sep}
+ {foreach $usedProperties as $traitName => $properties}
+ |
-
- {foreach $properties as $property}
- ${$property->name}{sep}, {/sep}
+ {foreach $inheritedMagicProperties as $parentName => $properties}
+ |
-
- {foreach $properties as $property}
- ${$property->name}{sep}, {/sep}
+ {foreach $usedMagicProperties as $traitName => $properties}
+ |
-
Documentation of this class could not be generated.
diff --git a/apigen/theme-woocommerce/config.neon b/apigen/theme-woocommerce/config.neon index c4e4450112a..a5d77eeb65c 100644 --- a/apigen/theme-woocommerce/config.neon +++ b/apigen/theme-woocommerce/config.neon @@ -1 +1 @@ -name: "WC ApiGen theme" +name: "Twitter Bootstrap theme" diff --git a/apigen/theme-woocommerce/constant.latte b/apigen/theme-woocommerce/constant.latte index 8552446d1e8..ec561819357 100644 --- a/apigen/theme-woocommerce/constant.latte +++ b/apigen/theme-woocommerce/constant.latte @@ -13,7 +13,7 @@ {$constant|longDescription|noescape}{$constant->typeHint|typeLinks:$constant|noescape} |
- {block|strip}
- {var $element = $template->resolveElement($constant->valueDefinition, $constant)}
- {if $element}{$constant->valueDefinition}{else}{$constant->valueDefinition|highlightValue:$constant|noescape} {/if}
- {/block} |
-
{$constant->typeHint|typeLinks:$constant|noescape} |
+ {block|strip}
+ {var $element = $template->resolveElement($constant->valueDefinition, $constant)}
+ {if $element}{$constant->valueDefinition}{else}{$constant->valueDefinition|highlightValue:$constant|noescape} {/if}
+ {/block} |
+
Documentation of this constant could not be generated.
diff --git a/apigen/theme-woocommerce/deprecated.latte b/apigen/theme-woocommerce/deprecated.latte deleted file mode 100644 index 86a5fa281f7..00000000000 --- a/apigen/theme-woocommerce/deprecated.latte +++ /dev/null @@ -1,110 +0,0 @@ -{layout '@layout.latte'} -{var $active = 'deprecated'} - -{block title}Deprecated{/block} - -{block content} -{$method->declaringClassName} | -{$method->name}() |
-
- {if $method->hasAnnotation('deprecated')}
- {foreach $method->annotations['deprecated'] as $description}
- {if $description}
- {$description|annotation:'deprecated':$method|noescape} - {/if} - {/foreach} - {/if} - |
-
{$constant->declaringClassName} | -{$constant->name} |
- {else}
- {$constant->namespaceName} | -{$constant->shortName} |
- {/if}
-
- {foreach $constant->annotations['deprecated'] as $description}
- {if $description}
- {$description|annotation:'deprecated':$constant|noescape} - {/if} - {/foreach} - |
-
{$property->declaringClassName} | -${$property->name} | -
- {foreach $property->annotations['deprecated'] as $description}
- {if $description}
- {$description|annotation:'deprecated':$property|noescape} - {/if} - {/foreach} - |
-
{$function->namespaceName} | -{$function->shortName} |
-
- {foreach $function->annotations['deprecated'] as $description}
- {if $description}
- {$description|annotation:'deprecated':$function|noescape} - {/if} - {/foreach} - |
-
{$parameter->typeHint|typeLinks:$function|noescape} |
- {block|strip}
- {if $parameter->passedByReference}& {/if}${$parameter->name}{if $parameter->defaultValueAvailable} = {$parameter->defaultValueDefinition|highlightPHP:$function|noescape}{elseif $parameter->unlimited},…{/if}
- {/block} |
- {$parameter->description|description:$function} | -
{$parameter->typeHint|typeLinks:$function|noescape} |
+ {block|strip}
+ {if $parameter->passedByReference}& {/if}${$parameter->name}{if $parameter->defaultValueAvailable} = {$parameter->defaultValueDefinition|highlightPHP:$function|noescape}{elseif $parameter->unlimited},…{/if}
+ {/block} |
+ {$parameter->description|description:$function} | +
- {$annotations['return'][0]|typeLinks:$function|noescape}
- |
- - {$annotations['return'][0]|description:$function|noescape} - | -
+ {$annotations['return'][0]|typeLinks:$function|noescape}
+ |
+ + {$annotations['return'][0]|description:$function|noescape} + | +
- {$throws|typeLinks:$function|noescape}
- |
- - {$throws|description:$function|noescape} - | -
+ {$throws|typeLinks:$function|noescape}
+ |
+ + {$throws|description:$function|noescape} + | +
Documentation of this function could not be generated.
diff --git a/apigen/theme-woocommerce/js/jquery.cookie.js b/apigen/theme-woocommerce/js/jquery.cookie.js index 3fb201c6a01..3838d7ed20c 100644 --- a/apigen/theme-woocommerce/js/jquery.cookie.js +++ b/apigen/theme-woocommerce/js/jquery.cookie.js @@ -1,53 +1,71 @@ /*! - * jQuery Cookie Plugin v1.3.1 + * jQuery Cookie Plugin v1.4.1 * https://github.com/carhartl/jquery-cookie * - * Copyright 2013 Klaus Hartl + * Copyright 2006, 2014 Klaus Hartl * Released under the MIT license */ -(function ($, document, undefined) { +(function (factory) { + if (typeof define === 'function' && define.amd) { + // AMD (Register as an anonymous module) + define(['jquery'], factory); + } else if (typeof exports === 'object') { + // Node/CommonJS + module.exports = factory(require('jquery')); + } else { + // Browser globals + factory(jQuery); + } +}(function ($) { var pluses = /\+/g; - function raw(s) { - return s; + function encode(s) { + return config.raw ? s : encodeURIComponent(s); } - function decoded(s) { - return unRfc2068(decodeURIComponent(s.replace(pluses, ' '))); + function decode(s) { + return config.raw ? s : decodeURIComponent(s); } - function unRfc2068(value) { - if (value.indexOf('"') === 0) { - // This is a quoted cookie as according to RFC2068, unescape - value = value.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\'); + function stringifyCookieValue(value) { + return encode(config.json ? JSON.stringify(value) : String(value)); + } + + function parseCookieValue(s) { + if (s.indexOf('"') === 0) { + // This is a quoted cookie as according to RFC2068, unescape... + s = s.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\'); } - return value; + + try { + // Replace server-side written pluses with spaces. + // If we can't decode the cookie, ignore it, it's unusable. + // If we can't parse the cookie, ignore it, it's unusable. + s = decodeURIComponent(s.replace(pluses, ' ')); + return config.json ? JSON.parse(s) : s; + } catch(e) {} } - function fromJSON(value) { - return config.json ? JSON.parse(value) : value; + function read(s, converter) { + var value = config.raw ? s : parseCookieValue(s); + return $.isFunction(converter) ? converter(value) : value; } var config = $.cookie = function (key, value, options) { - // write - if (value !== undefined) { - options = $.extend({}, config.defaults, options); + // Write - if (value === null) { - options.expires = -1; - } + if (arguments.length > 1 && !$.isFunction(value)) { + options = $.extend({}, config.defaults, options); if (typeof options.expires === 'number') { var days = options.expires, t = options.expires = new Date(); - t.setDate(t.getDate() + days); + t.setMilliseconds(t.getMilliseconds() + days * 864e+5); } - value = config.json ? JSON.stringify(value) : String(value); - return (document.cookie = [ - encodeURIComponent(key), '=', config.raw ? value : encodeURIComponent(value), + encode(key), '=', stringifyCookieValue(value), options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE options.path ? '; path=' + options.path : '', options.domain ? '; domain=' + options.domain : '', @@ -55,22 +73,30 @@ ].join('')); } - // read - var decode = config.raw ? raw : decoded; - var cookies = document.cookie.split('; '); - var result = key ? null : {}; - for (var i = 0, l = cookies.length; i < l; i++) { - var parts = cookies[i].split('='); - var name = decode(parts.shift()); - var cookie = decode(parts.join('=')); + // Read - if (key && key === name) { - result = fromJSON(cookie); + var result = key ? undefined : {}, + // To prevent the for loop in the first place assign an empty array + // in case there are no cookies at all. Also prevents odd result when + // calling $.cookie(). + cookies = document.cookie ? document.cookie.split('; ') : [], + i = 0, + l = cookies.length; + + for (; i < l; i++) { + var parts = cookies[i].split('='), + name = decode(parts.shift()), + cookie = parts.join('='); + + if (key === name) { + // If second argument (value) is a function it's a converter... + result = read(cookie, value); break; } - if (!key) { - result[name] = fromJSON(cookie); + // Prevent storing a cookie that we couldn't decode. + if (!key && (cookie = read(cookie)) !== undefined) { + result[name] = cookie; } } @@ -80,11 +106,9 @@ config.defaults = {}; $.removeCookie = function (key, options) { - if ($.cookie(key) !== null) { - $.cookie(key, null, options); - return true; - } - return false; + // Must not alter options, thus extending a fresh object... + $.cookie(key, '', $.extend({}, options, { expires: -1 })); + return !$.cookie(key); }; -})(jQuery, document); +})); diff --git a/apigen/theme-woocommerce/js/main.js b/apigen/theme-woocommerce/js/main.js index 55c0151227f..df6b71520f9 100644 --- a/apigen/theme-woocommerce/js/main.js +++ b/apigen/theme-woocommerce/js/main.js @@ -1,5 +1,7 @@ $(window).load(function() { var $document = $(document); + var $navigation = $('#navigation'); + var navigationHeight = $navigation.height(); var $left = $('#left'); var $right = $('#right'); var $rightInner = $('#rightInner'); @@ -40,12 +42,13 @@ $(window).load(function() { // Search autocompletion var autocompleteFound = false; var autocompleteFiles = {'c': 'class', 'co': 'constant', 'f': 'function', 'm': 'class', 'mm': 'class', 'p': 'class', 'mp': 'class', 'cc': 'class'}; - var $search = $('#search').find('input[name=q]'); + var $search = $('#search input[name=q]'); $search .autocomplete(ApiGen.elements, { matchContains: true, scrollHeight: 200, max: 20, + width: 300, noRecord: '', highlight: function(value, term) { var term = term.toUpperCase().replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi, "\\$1").replace(/[A-Z0-9]/g, function(m, offset) { @@ -68,9 +71,7 @@ $(window).load(function() { return $(this).width(); })); // 10px padding - $list - .width(Math.max(maxWidth + 10, $search.innerWidth())) - .css('left', $search.offset().left + $search.outerWidth() - $list.outerWidth()); + $list.width(Math.max(maxWidth + 10, $search.innerWidth())); } }).result(function(event, data) { autocompleteFound = true; @@ -92,7 +93,7 @@ $(window).load(function() { if ('' === query) { return false; } - return !autocompleteFound && '' !== $('#search').find('input[name=cx]').val(); + return !autocompleteFound && '' !== $('#search input[name=cx]').val(); }); // Save natural order @@ -106,7 +107,7 @@ $(window).load(function() { // Switch between natural and alphabetical order var $caption = $('table.summary', $content) .filter(':has(tr[data-order])') - .find('caption'); + .prev('h2'); $caption .click(function() { var $this = $(this); @@ -116,7 +117,7 @@ $(window).load(function() { $.cookie('order', order, {expires: 365}); var attr = 'alphabetical' === order ? 'data-order' : 'data-order-natural'; $this - .closest('table') + .next('table') .find('tr').sortElements(function(a, b) { return $(a).attr(attr) > $(b).attr(attr) ? 1 : -1; }); @@ -130,12 +131,17 @@ $(window).load(function() { // Open details if (ApiGen.config.options.elementDetailsCollapsed) { - $('tr', $content).filter(':has(.detailed)') - .click(function() { - var $this = $(this); - $('.short', $this).hide(); - $('.detailed', $this).show(); - }); + $(document.body).on('click', 'tr', function(ev) { + + var short = this.querySelector('.short') + , detailed = this.querySelector('.detailed') + + if (!short || !detailed) return + + $(short).toggleClass('hidden') + $(detailed).toggleClass('hidden') + + }) } // Splitter @@ -150,6 +156,13 @@ $(window).load(function() { $right.css('margin-left', position + splitterWidth); $splitter.css('left', position); } + function setNavigationPosition() + { + var height = $(window).height() - navigationHeight; + $left.height(height); + $splitter.height(height); + $right.height(height); + } function setContentWidth() { var width = $rightInner.width(); @@ -200,8 +213,11 @@ $(window).load(function() { if (null !== splitterPosition) { setSplitterPosition(splitterPosition); } + setNavigationPosition(); setContentWidth(); - $(window).resize(setContentWidth); + $(window) + .resize(setNavigationPosition) + .resize(setContentWidth); // Select selected lines var matches = window.location.hash.substr(1).match(/^\d+(?:-\d+)?(?:,\d+(?:-\d+)?)*$/); @@ -218,7 +234,7 @@ $(window).load(function() { var $firstLine = $('#' + parseInt(matches[0])); if ($firstLine.length > 0) { - $document.scrollTop($firstLine.offset().top); + $right.scrollTop($firstLine.position().top); } } @@ -227,8 +243,8 @@ $(window).load(function() { $('.l a').click(function(event) { event.preventDefault(); - var $selectedLine = $(this).parent(); - var selectedLine = parseInt($selectedLine.attr('id')); + var selectedLine = $(this).parent().index() + 1; + var $selectedLine = $('pre.code .l').eq(selectedLine - 1); if (event.shiftKey) { if (lastLine) { diff --git a/apigen/theme-woocommerce/namespace.latte b/apigen/theme-woocommerce/namespace.latte index d371c92f77d..09c4ffe50bb 100644 --- a/apigen/theme-woocommerce/namespace.latte +++ b/apigen/theme-woocommerce/namespace.latte @@ -7,12 +7,16 @@{$namespace} | -
{$namespace} | +
{$namespace} | -
{$namespace} | +
- {$package} - | -
+ {$package} + | +
{$package} | -
{$package} | +
{$source|replaceRE:'~(\\s*(\\d+):\\s*)([^\\n]*(?:\\n|$))~','$1$3'|noescape}
+{$source|replaceRE:$lineRegex,'$1$2$3'|noescape}
+ {$source|replaceRE:$lineRegex,'$4'|noescape}
+{$method->declaringClassName} | -{$method->name}() |
-
- {foreach $method->annotations['todo'] as $description}
- {$description|annotation:'todo':$method|noescape}{sep} {/sep} - {/foreach} - |
-
{$constant->declaringClassName} | -{$constant->name} |
- {else}
- {$constant->namespaceName} | -{$constant->shortName} |
- {/if}
-
-
- {foreach $constant->annotations['todo'] as $description}
- {$description|annotation:'todo':$constant|noescape}{sep} {/sep} - {/foreach} - |
-
{$property->declaringClassName} | -${$property->name} | -
- {foreach $property->annotations['todo'] as $description}
- {$description|annotation:'todo':$property|noescape}{sep} {/sep} - {/foreach} - |
-
{$function->namespaceName} | -{$function->shortName} |
-
- {foreach $function->annotations['todo'] as $description}
- {$description|annotation:'todo':$function|noescape}{sep} {/sep} - {/foreach} - |
-
'+wc_add_to_cart_variation_params.i18n_no_matching_variations_text+"
"),c.find(".wc-no-matching-variations").slideDown(200))}})):c.trigger("reset_data"),d?"hidden"===k.css("visibility")&&k.css("visibility","visible").hide().fadeIn():k.css("visibility","hidden")}else c.trigger("woocommerce_variation_select_change"),c.trigger("check_variations",["",!1]),a(this).blur();a(".product.has-default-attributes > .images").fadeTo(200,1),c.trigger("woocommerce_variation_has_changed")}).on("focusin touchstart",".variations select",function(){a(this).find("option:selected").attr("selected","selected"),i||(c.trigger("woocommerce_variation_select_focusin"),c.trigger("check_variations",[a(this).data("attribute_name")||a(this).attr("name"),!0]))}).on("found_variation",function(b,e){var g=f.find(".product_meta").find(".sku"),h=f.find(".product_weight"),i=f.find(".product_dimensions"),j=n.find(".quantity"),k=!0;e.sku?g.wc_set_content(e.sku):g.wc_reset_content(),e.weight?h.wc_set_content(e.weight):h.wc_reset_content(),e.dimensions?i.wc_set_content(e.dimensions):i.wc_reset_content(),c.wc_variations_image_update(e),e.variation_is_visible?(d.html(l({price:e.price_html,availability:e.availability_html,description:e.variation_description})),c.find('input[name="variation_id"], input.variation_id').val(e.variation_id).change()):(d.html(m),c.find('input[name="variation_id"], input.variation_id').val("").change()),"yes"===e.is_sold_individually?(j.find("input.qty").val("1").attr("min","1").attr("max",""),j.hide()):(j.find("input.qty").attr("min",e.min_qty).attr("max",e.max_qty),j.show()),e.is_purchasable&&e.is_in_stock&&e.variation_is_visible||(k=!1),a.trim(d.text())?d.slideDown(200).trigger("show_variation",[e,k]):d.show().trigger("show_variation",[e,k])}).on("check_variations",function(c,f,g){if(!i){var j=!0,k=!1,l={},m=a(this),n=m.find(".reset_variations");m.find(".variations select").each(function(){var b=a(this).data("attribute_name")||a(this).attr("name");0===a(this).val().length?j=!1:k=!0,f&&b===f?(j=!1,l[b]=""):l[b]=a(this).val()});var o=e.find_matching_variations(h,l);if(j){var p=o.shift();p?m.trigger("found_variation",[p]):(m.find(".variations select").val(""),g||m.trigger("reset_data"),b.alert(wc_add_to_cart_variation_params.i18n_no_matching_variations_text))}else m.trigger("update_variation_values",[o]),g||m.trigger("reset_data"),f||d.slideUp(200).trigger("hide_variation");k?"hidden"===n.css("visibility")&&n.css("visibility","visible").hide().fadeIn():n.css("visibility","hidden")}}).on("update_variation_values",function(b,d){i||(c.find(".variations select").each(function(b,c){var e,f=a(c);f.data("attribute_options")||f.data("attribute_options",f.find("option:gt(0)").get()),f.find("option:gt(0)").remove(),f.append(f.data("attribute_options")),f.find("option:gt(0)").removeClass("attached"),f.find("option:gt(0)").removeClass("enabled"),f.find("option:gt(0)").removeAttr("disabled"),e="undefined"!=typeof f.data("attribute_name")?f.data("attribute_name"):f.attr("name");for(var g in d)if("undefined"!=typeof d[g]){var h=d[g].attributes;for(var i in h)if(h.hasOwnProperty(i)){var j=h[i];if(i===e){var k="";d[g].variation_is_active&&(k="enabled"),j?(j=a("").html(j).text(),j=j.replace(/'/g,"\\'"),j=j.replace(/"/g,'\\"'),f.find('option[value="'+j+'"]').addClass("attached "+k)):f.find("option:gt(0)").addClass("attached "+k)}}}f.find("option:gt(0):not(.attached)").remove(),f.find("option:gt(0):not(.enabled)").attr("disabled","disabled")}),c.trigger("woocommerce_update_variation_values"))}),c.trigger("wc_variation_form"),c};var e={find_matching_variations:function(a,b){for(var c=[],d=0;d'+wc_add_to_cart_variation_params.i18n_no_matching_variations_text+"
"),c.find(".wc-no-matching-variations").slideDown(200))}})):c.trigger("reset_data"),d?"hidden"===k.css("visibility")&&k.css("visibility","visible").hide().fadeIn():k.css("visibility","hidden")}else c.trigger("woocommerce_variation_select_change"),c.trigger("check_variations",["",!1]),a(this).blur();a(".product.has-default-attributes > .images").fadeTo(200,1),c.trigger("woocommerce_variation_has_changed")}).on("focusin touchstart",".variations select",function(){a(this).find("option:selected").attr("selected","selected"),i||(c.trigger("woocommerce_variation_select_focusin"),c.trigger("check_variations",[a(this).data("attribute_name")||a(this).attr("name"),!0]))}).on("found_variation",function(b,e){var g=f.find(".product_meta").find(".sku"),h=f.find(".product_weight"),i=f.find(".product_dimensions"),j=n.find(".quantity"),k=!0;e.sku?g.wc_set_content(e.sku):g.wc_reset_content(),e.weight?h.wc_set_content(e.weight):h.wc_reset_content(),e.dimensions?i.wc_set_content(e.dimensions):i.wc_reset_content(),c.wc_variations_image_update(e),e.variation_is_visible?(d.html(l({variation:e})),c.find('input[name="variation_id"], input.variation_id').val(e.variation_id).change()):(d.html(m),c.find('input[name="variation_id"], input.variation_id').val("").change()),"yes"===e.is_sold_individually?(j.find("input.qty").val("1").attr("min","1").attr("max",""),j.hide()):(j.find("input.qty").attr("min",e.min_qty).attr("max",e.max_qty),j.show()),e.is_purchasable&&e.is_in_stock&&e.variation_is_visible||(k=!1),a.trim(d.text())?d.slideDown(200).trigger("show_variation",[e,k]):d.show().trigger("show_variation",[e,k])}).on("check_variations",function(c,f,g){if(!i){var j=!0,k=!1,l={},m=a(this),n=m.find(".reset_variations");m.find(".variations select").each(function(){var b=a(this).data("attribute_name")||a(this).attr("name");0===a(this).val().length?j=!1:k=!0,f&&b===f?(j=!1,l[b]=""):l[b]=a(this).val()});var o=e.find_matching_variations(h,l);if(j){var p=o.shift();p?m.trigger("found_variation",[p]):(m.find(".variations select").val(""),g||m.trigger("reset_data"),b.alert(wc_add_to_cart_variation_params.i18n_no_matching_variations_text))}else m.trigger("update_variation_values",[o]),g||m.trigger("reset_data"),f||d.slideUp(200).trigger("hide_variation");k?"hidden"===n.css("visibility")&&n.css("visibility","visible").hide().fadeIn():n.css("visibility","hidden")}}).on("update_variation_values",function(b,d){i||(c.find(".variations select").each(function(b,c){var e,f=a(c);f.data("attribute_options")||f.data("attribute_options",f.find("option:gt(0)").get()),f.find("option:gt(0)").remove(),f.append(f.data("attribute_options")),f.find("option:gt(0)").removeClass("attached"),f.find("option:gt(0)").removeClass("enabled"),f.find("option:gt(0)").removeAttr("disabled"),e="undefined"!=typeof f.data("attribute_name")?f.data("attribute_name"):f.attr("name");for(var g in d)if("undefined"!=typeof d[g]){var h=d[g].attributes;for(var i in h)if(h.hasOwnProperty(i)){var j=h[i];if(i===e){var k="";d[g].variation_is_active&&(k="enabled"),j?(j=a("").html(j).text(),j=j.replace(/'/g,"\\'"),j=j.replace(/"/g,'\\"'),f.find('option[value="'+j+'"]').addClass("attached "+k)):f.find("option:gt(0)").addClass("attached "+k)}}}f.find("option:gt(0):not(.attached)").remove(),f.find("option:gt(0):not(.enabled)").attr("disabled","disabled")}),c.trigger("woocommerce_update_variation_values"))}),c.trigger("wc_variation_form"),c};var e={find_matching_variations:function(a,b){for(var c=[],d=0;d%s
version %s is out of "
"date. The core version is %s"
msgstr ""
-#: includes/admin/views/html-admin-page-status-report.php:677
-#: includes/admin/views/html-admin-page-status-report.php:686
+#: includes/admin/views/html-admin-page-status-report.php:682
+#: includes/admin/views/html-admin-page-status-report.php:691
msgid "Overrides"
msgstr ""
-#: includes/admin/views/html-admin-page-status-report.php:698
+#: includes/admin/views/html-admin-page-status-report.php:703
msgid "Learn how to update outdated templates"
msgstr ""
@@ -12056,14 +11807,16 @@ msgstr ""
#: includes/admin/views/html-admin-page-status-tools.php:62
msgid ""
"This tool will remove all WooCommerce, Product and Order data when using "
-"the \"Delete\" link on the plugins screen."
+"the \"Delete\" link on the plugins screen. It will also remove any "
+"setting/option prepended with \"woocommerce_\" so may also affect installed "
+"WooCommerce Extensions."
msgstr ""
#: includes/admin/views/html-admin-page-status.php:18
msgid "Logs"
msgstr ""
-#: includes/admin/views/html-admin-settings.php:32
+#: includes/admin/views/html-admin-settings.php:35
#: templates/myaccount/form-edit-account.php:66
msgid "Save changes"
msgstr ""
@@ -12262,51 +12015,51 @@ msgstr ""
msgid "Consumer Key is invalid"
msgstr ""
-#: includes/api/class-wc-api-authentication.php:197
-#: includes/api/v1/class-wc-api-authentication.php:200
-#: includes/api/v2/class-wc-api-authentication.php:200
+#: includes/api/class-wc-api-authentication.php:198
+#: includes/api/v1/class-wc-api-authentication.php:201
+#: includes/api/v2/class-wc-api-authentication.php:201
msgid "API user is invalid"
msgstr ""
-#: includes/api/class-wc-api-authentication.php:241
-#: includes/api/v1/class-wc-api-authentication.php:250
-#: includes/api/v2/class-wc-api-authentication.php:250
+#: includes/api/class-wc-api-authentication.php:242
+#: includes/api/v1/class-wc-api-authentication.php:251
+#: includes/api/v2/class-wc-api-authentication.php:251
msgid "Invalid Signature - failed to sort parameters"
msgstr ""
-#: includes/api/class-wc-api-authentication.php:261
-#: includes/api/v1/class-wc-api-authentication.php:264
-#: includes/api/v2/class-wc-api-authentication.php:264
+#: includes/api/class-wc-api-authentication.php:262
+#: includes/api/v1/class-wc-api-authentication.php:265
+#: includes/api/v2/class-wc-api-authentication.php:265
msgid "Invalid Signature - signature method is invalid"
msgstr ""
-#: includes/api/class-wc-api-authentication.php:270
-#: includes/api/v1/class-wc-api-authentication.php:272
-#: includes/api/v2/class-wc-api-authentication.php:272
+#: includes/api/class-wc-api-authentication.php:271
+#: includes/api/v1/class-wc-api-authentication.php:273
+#: includes/api/v2/class-wc-api-authentication.php:273
msgid "Invalid Signature - provided signature does not match"
msgstr ""
-#: includes/api/class-wc-api-authentication.php:335
-#: includes/api/v1/class-wc-api-authentication.php:330
-#: includes/api/v2/class-wc-api-authentication.php:330
+#: includes/api/class-wc-api-authentication.php:336
+#: includes/api/v1/class-wc-api-authentication.php:331
+#: includes/api/v2/class-wc-api-authentication.php:331
msgid "Invalid timestamp"
msgstr ""
-#: includes/api/class-wc-api-authentication.php:345
-#: includes/api/v1/class-wc-api-authentication.php:340
-#: includes/api/v2/class-wc-api-authentication.php:340
+#: includes/api/class-wc-api-authentication.php:346
+#: includes/api/v1/class-wc-api-authentication.php:341
+#: includes/api/v2/class-wc-api-authentication.php:341
msgid "Invalid nonce - nonce has already been used"
msgstr ""
-#: includes/api/class-wc-api-authentication.php:380
-#: includes/api/v1/class-wc-api-authentication.php:375
-#: includes/api/v2/class-wc-api-authentication.php:375
+#: includes/api/class-wc-api-authentication.php:381
+#: includes/api/v1/class-wc-api-authentication.php:376
+#: includes/api/v2/class-wc-api-authentication.php:376
msgid "The API key provided does not have read permissions"
msgstr ""
-#: includes/api/class-wc-api-authentication.php:389
-#: includes/api/v1/class-wc-api-authentication.php:384
-#: includes/api/v2/class-wc-api-authentication.php:384
+#: includes/api/class-wc-api-authentication.php:390
+#: includes/api/v1/class-wc-api-authentication.php:385
+#: includes/api/v2/class-wc-api-authentication.php:385
msgid "The API key provided does not have write permissions"
msgstr ""
@@ -12330,24 +12083,25 @@ msgstr ""
#: includes/api/class-wc-api-coupons.php:213
#: includes/api/class-wc-api-customers.php:345
-#: includes/api/class-wc-api-orders.php:384
-#: includes/api/class-wc-api-orders.php:1303
-#: includes/api/class-wc-api-orders.php:1595
-#: includes/api/class-wc-api-products.php:242
-#: includes/api/class-wc-api-products.php:616
-#: includes/api/class-wc-api-products.php:878
-#: includes/api/class-wc-api-products.php:2627
-#: includes/api/class-wc-api-products.php:3021
+#: includes/api/class-wc-api-orders.php:414
+#: includes/api/class-wc-api-orders.php:1322
+#: includes/api/class-wc-api-orders.php:1614
+#: includes/api/class-wc-api-products.php:255
+#: includes/api/class-wc-api-products.php:647
+#: includes/api/class-wc-api-products.php:909
+#: includes/api/class-wc-api-products.php:2669
+#: includes/api/class-wc-api-products.php:3000
+#: includes/api/class-wc-api-products.php:3334
#: includes/api/class-wc-api-taxes.php:184
-#: includes/api/class-wc-api-taxes.php:566
+#: includes/api/class-wc-api-taxes.php:564
#: includes/api/class-wc-api-webhooks.php:169
#: includes/api/v2/class-wc-api-coupons.php:213
#: includes/api/v2/class-wc-api-customers.php:345
#: includes/api/v2/class-wc-api-orders.php:384
-#: includes/api/v2/class-wc-api-orders.php:1294
-#: includes/api/v2/class-wc-api-orders.php:1586
+#: includes/api/v2/class-wc-api-orders.php:1285
+#: includes/api/v2/class-wc-api-orders.php:1577
#: includes/api/v2/class-wc-api-products.php:210
-#: includes/api/v2/class-wc-api-products.php:2106
+#: includes/api/v2/class-wc-api-products.php:2129
#: includes/api/v2/class-wc-api-webhooks.php:169
msgid "No %1$s data specified to create %1$s"
msgstr ""
@@ -12359,18 +12113,20 @@ msgstr ""
#: includes/api/class-wc-api-coupons.php:227
#: includes/api/class-wc-api-customers.php:359
-#: includes/api/class-wc-api-products.php:256
-#: includes/api/class-wc-api-products.php:2591
+#: includes/api/class-wc-api-products.php:269
+#: includes/api/class-wc-api-products.php:2633
+#: includes/api/class-wc-api-products.php:3020
#: includes/api/class-wc-api-server.php:427
-#: includes/api/class-wc-api-taxes.php:577
+#: includes/api/class-wc-api-taxes.php:575
#: includes/api/v1/class-wc-api-server.php:409
#: includes/api/v2/class-wc-api-coupons.php:227
#: includes/api/v2/class-wc-api-customers.php:359
#: includes/api/v2/class-wc-api-products.php:224
-#: includes/api/v2/class-wc-api-products.php:2070
+#: includes/api/v2/class-wc-api-products.php:2093
#: includes/api/v2/class-wc-api-server.php:427 includes/class-wc-auth.php:159
#: includes/cli/class-wc-cli-coupon.php:63
#: includes/cli/class-wc-cli-product.php:151
+#: includes/cli/class-wc-cli-tax.php:130
msgid "Missing parameter %s"
msgstr ""
@@ -12394,23 +12150,24 @@ msgstr ""
#: includes/api/class-wc-api-coupons.php:329
#: includes/api/class-wc-api-customers.php:400
-#: includes/api/class-wc-api-orders.php:522
-#: includes/api/class-wc-api-orders.php:1360
-#: includes/api/class-wc-api-orders.php:1672
-#: includes/api/class-wc-api-products.php:344
-#: includes/api/class-wc-api-products.php:697
-#: includes/api/class-wc-api-products.php:925
-#: includes/api/class-wc-api-products.php:2708
-#: includes/api/class-wc-api-products.php:3080
+#: includes/api/class-wc-api-orders.php:551
+#: includes/api/class-wc-api-orders.php:1379
+#: includes/api/class-wc-api-orders.php:1691
+#: includes/api/class-wc-api-products.php:357
+#: includes/api/class-wc-api-products.php:728
+#: includes/api/class-wc-api-products.php:956
+#: includes/api/class-wc-api-products.php:2751
+#: includes/api/class-wc-api-products.php:3063
+#: includes/api/class-wc-api-products.php:3393
#: includes/api/class-wc-api-taxes.php:254
#: includes/api/class-wc-api-webhooks.php:245
#: includes/api/v2/class-wc-api-coupons.php:329
#: includes/api/v2/class-wc-api-customers.php:400
-#: includes/api/v2/class-wc-api-orders.php:522
-#: includes/api/v2/class-wc-api-orders.php:1351
-#: includes/api/v2/class-wc-api-orders.php:1663
+#: includes/api/v2/class-wc-api-orders.php:521
+#: includes/api/v2/class-wc-api-orders.php:1342
+#: includes/api/v2/class-wc-api-orders.php:1654
#: includes/api/v2/class-wc-api-products.php:312
-#: includes/api/v2/class-wc-api-products.php:2187
+#: includes/api/v2/class-wc-api-products.php:2210
#: includes/api/v2/class-wc-api-webhooks.php:245
msgid "No %1$s data specified to edit %1$s"
msgstr ""
@@ -12425,25 +12182,25 @@ msgstr ""
#: includes/api/class-wc-api-coupons.php:526
#: includes/api/class-wc-api-customers.php:777
-#: includes/api/class-wc-api-orders.php:1785
-#: includes/api/class-wc-api-products.php:2871
-#: includes/api/class-wc-api-taxes.php:459
+#: includes/api/class-wc-api-orders.php:1804
+#: includes/api/class-wc-api-products.php:3184
+#: includes/api/class-wc-api-taxes.php:457
#: includes/api/v2/class-wc-api-coupons.php:526
#: includes/api/v2/class-wc-api-customers.php:789
-#: includes/api/v2/class-wc-api-orders.php:1776
-#: includes/api/v2/class-wc-api-products.php:2374
+#: includes/api/v2/class-wc-api-orders.php:1767
+#: includes/api/v2/class-wc-api-products.php:2397
msgid "No %1$s data specified to create/edit %1$s"
msgstr ""
#: includes/api/class-wc-api-coupons.php:534
#: includes/api/class-wc-api-customers.php:785
-#: includes/api/class-wc-api-orders.php:1793
-#: includes/api/class-wc-api-products.php:2879
-#: includes/api/class-wc-api-taxes.php:467
+#: includes/api/class-wc-api-orders.php:1812
+#: includes/api/class-wc-api-products.php:3192
+#: includes/api/class-wc-api-taxes.php:465
#: includes/api/v2/class-wc-api-coupons.php:534
#: includes/api/v2/class-wc-api-customers.php:797
-#: includes/api/v2/class-wc-api-orders.php:1784
-#: includes/api/v2/class-wc-api-products.php:2382
+#: includes/api/v2/class-wc-api-orders.php:1775
+#: includes/api/v2/class-wc-api-products.php:2405
msgid "Unable to accept more than %s items for this request"
msgstr ""
@@ -12508,302 +12265,302 @@ msgstr ""
msgid "The JSONP callback function is invalid"
msgstr ""
-#: includes/api/class-wc-api-orders.php:318
+#: includes/api/class-wc-api-orders.php:348
#: includes/api/v1/class-wc-api-orders.php:258
#: includes/api/v2/class-wc-api-orders.php:318
msgid "You do not have permission to read the orders count"
msgstr ""
-#: includes/api/class-wc-api-orders.php:391
+#: includes/api/class-wc-api-orders.php:421
#: includes/api/v2/class-wc-api-orders.php:391
msgid "You do not have permission to create orders"
msgstr ""
-#: includes/api/class-wc-api-orders.php:407
-#: includes/api/class-wc-api-orders.php:560
+#: includes/api/class-wc-api-orders.php:437
+#: includes/api/class-wc-api-orders.php:582
#: includes/api/v2/class-wc-api-orders.php:407
-#: includes/api/v2/class-wc-api-orders.php:560
+#: includes/api/v2/class-wc-api-orders.php:552
#: includes/cli/class-wc-cli-order.php:107
#: includes/cli/class-wc-cli-order.php:443
msgid "Customer ID is invalid"
msgstr ""
-#: includes/api/class-wc-api-orders.php:417
+#: includes/api/class-wc-api-orders.php:447
#: includes/api/v2/class-wc-api-orders.php:417
#: includes/cli/class-wc-cli-order.php:115
msgid "Cannot create order: %s"
msgstr ""
-#: includes/api/class-wc-api-orders.php:451
+#: includes/api/class-wc-api-orders.php:481
#: includes/api/v2/class-wc-api-orders.php:451
#: includes/cli/class-wc-cli-order.php:144
msgid "Payment method ID and title are required"
msgstr ""
-#: includes/api/class-wc-api-orders.php:467
-#: includes/api/class-wc-api-orders.php:631
+#: includes/api/class-wc-api-orders.php:497
+#: includes/api/class-wc-api-orders.php:647
#: includes/api/v2/class-wc-api-orders.php:467
-#: includes/api/v2/class-wc-api-orders.php:631
+#: includes/api/v2/class-wc-api-orders.php:617
#: includes/cli/class-wc-cli-order.php:159
#: includes/cli/class-wc-cli-order.php:514
msgid "Provided order currency is invalid"
msgstr ""
-#: includes/api/class-wc-api-orders.php:539
-#: includes/api/class-wc-api-orders.php:1608
-#: includes/api/v2/class-wc-api-orders.php:539
-#: includes/api/v2/class-wc-api-orders.php:1599
+#: includes/api/class-wc-api-orders.php:568
+#: includes/api/class-wc-api-orders.php:1627
+#: includes/api/v2/class-wc-api-orders.php:538
+#: includes/api/v2/class-wc-api-orders.php:1590
#: includes/cli/class-wc-cli-order.php:422
msgid "Order ID is invalid"
msgstr ""
-#: includes/api/class-wc-api-orders.php:586
-#: includes/api/v2/class-wc-api-orders.php:586
+#: includes/api/class-wc-api-orders.php:608
+#: includes/api/v2/class-wc-api-orders.php:578
#: includes/cli/class-wc-cli-order.php:469
msgid "Order item ID is required"
msgstr ""
-#: includes/api/class-wc-api-orders.php:859
-#: includes/api/v2/class-wc-api-orders.php:851
+#: includes/api/class-wc-api-orders.php:878
+#: includes/api/v2/class-wc-api-orders.php:842
#: includes/cli/class-wc-cli-order.php:884
msgid "Order item ID provided is not associated with order"
msgstr ""
-#: includes/api/class-wc-api-orders.php:882
-#: includes/api/v2/class-wc-api-orders.php:874
+#: includes/api/class-wc-api-orders.php:901
+#: includes/api/v2/class-wc-api-orders.php:865
#: includes/cli/class-wc-cli-order.php:906
msgid "Product ID or SKU is required"
msgstr ""
-#: includes/api/class-wc-api-orders.php:892
-#: includes/api/v2/class-wc-api-orders.php:884
+#: includes/api/class-wc-api-orders.php:911
+#: includes/api/v2/class-wc-api-orders.php:875
#: includes/cli/class-wc-cli-order.php:916
msgid "Product ID provided does not match this line item"
msgstr ""
-#: includes/api/class-wc-api-orders.php:907
-#: includes/api/v2/class-wc-api-orders.php:899
+#: includes/api/class-wc-api-orders.php:926
+#: includes/api/v2/class-wc-api-orders.php:890
#: includes/cli/class-wc-cli-order.php:931
msgid "The product variation is invalid"
msgstr ""
-#: includes/api/class-wc-api-orders.php:918
-#: includes/api/v2/class-wc-api-orders.php:910
+#: includes/api/class-wc-api-orders.php:937
+#: includes/api/v2/class-wc-api-orders.php:901
#: includes/cli/class-wc-cli-order.php:942
msgid "Product is invalid"
msgstr ""
-#: includes/api/class-wc-api-orders.php:923
-#: includes/api/v2/class-wc-api-orders.php:915
+#: includes/api/class-wc-api-orders.php:942
+#: includes/api/v2/class-wc-api-orders.php:906
#: includes/cli/class-wc-cli-order.php:947
msgid "Product quantity must be a positive float"
msgstr ""
-#: includes/api/class-wc-api-orders.php:928
-#: includes/api/v2/class-wc-api-orders.php:920
+#: includes/api/class-wc-api-orders.php:947
+#: includes/api/v2/class-wc-api-orders.php:911
#: includes/cli/class-wc-cli-order.php:952
msgid "Product quantity is required"
msgstr ""
-#: includes/api/class-wc-api-orders.php:961
-#: includes/api/v2/class-wc-api-orders.php:953
+#: includes/api/class-wc-api-orders.php:980
+#: includes/api/v2/class-wc-api-orders.php:944
#: includes/cli/class-wc-cli-order.php:987
msgid "Cannot create line item, try again"
msgstr ""
-#: includes/api/class-wc-api-orders.php:969
-#: includes/api/v2/class-wc-api-orders.php:961
+#: includes/api/class-wc-api-orders.php:988
+#: includes/api/v2/class-wc-api-orders.php:952
#: includes/cli/class-wc-cli-order.php:995
msgid "Cannot update line item, try again"
msgstr ""
-#: includes/api/class-wc-api-orders.php:1038
-#: includes/api/v2/class-wc-api-orders.php:1029
+#: includes/api/class-wc-api-orders.php:1057
+#: includes/api/v2/class-wc-api-orders.php:1020
#: includes/cli/class-wc-cli-order.php:1069
msgid "Shipping total must be a positive amount"
msgstr ""
-#: includes/api/class-wc-api-orders.php:1045
-#: includes/api/v2/class-wc-api-orders.php:1036
+#: includes/api/class-wc-api-orders.php:1064
+#: includes/api/v2/class-wc-api-orders.php:1027
#: includes/cli/class-wc-cli-order.php:1076
msgid "Shipping method ID is required"
msgstr ""
-#: includes/api/class-wc-api-orders.php:1053
-#: includes/api/v2/class-wc-api-orders.php:1044
+#: includes/api/class-wc-api-orders.php:1072
+#: includes/api/v2/class-wc-api-orders.php:1035
#: includes/cli/class-wc-cli-order.php:1084
msgid "Cannot create shipping method, try again"
msgstr ""
-#: includes/api/class-wc-api-orders.php:1075
-#: includes/api/v2/class-wc-api-orders.php:1066
+#: includes/api/class-wc-api-orders.php:1094
+#: includes/api/v2/class-wc-api-orders.php:1057
#: includes/cli/class-wc-cli-order.php:1106
msgid "Cannot update shipping method, try again"
msgstr ""
-#: includes/api/class-wc-api-orders.php:1095
-#: includes/api/v2/class-wc-api-orders.php:1086
+#: includes/api/class-wc-api-orders.php:1114
+#: includes/api/v2/class-wc-api-orders.php:1077
#: includes/cli/class-wc-cli-order.php:1126
msgid "Fee title is required"
msgstr ""
-#: includes/api/class-wc-api-orders.php:1111
-#: includes/api/v2/class-wc-api-orders.php:1102
+#: includes/api/class-wc-api-orders.php:1130
+#: includes/api/v2/class-wc-api-orders.php:1093
#: includes/cli/class-wc-cli-order.php:1142
msgid "Fee tax class is required when fee is taxable"
msgstr ""
-#: includes/api/class-wc-api-orders.php:1130
-#: includes/api/v2/class-wc-api-orders.php:1121
+#: includes/api/class-wc-api-orders.php:1149
+#: includes/api/v2/class-wc-api-orders.php:1112
#: includes/cli/class-wc-cli-order.php:1161
msgid "Cannot create fee, try again"
msgstr ""
-#: includes/api/class-wc-api-orders.php:1156
-#: includes/api/v2/class-wc-api-orders.php:1147
+#: includes/api/class-wc-api-orders.php:1175
+#: includes/api/v2/class-wc-api-orders.php:1138
#: includes/cli/class-wc-cli-order.php:1187
msgid "Cannot update fee, try again"
msgstr ""
-#: includes/api/class-wc-api-orders.php:1174
-#: includes/api/v2/class-wc-api-orders.php:1165
+#: includes/api/class-wc-api-orders.php:1193
+#: includes/api/v2/class-wc-api-orders.php:1156
#: includes/cli/class-wc-cli-order.php:1205
msgid "Coupon discount total must be a positive amount"
msgstr ""
-#: includes/api/class-wc-api-orders.php:1181
-#: includes/api/v2/class-wc-api-orders.php:1172
+#: includes/api/class-wc-api-orders.php:1200
+#: includes/api/v2/class-wc-api-orders.php:1163
#: includes/cli/class-wc-cli-order.php:1212
msgid "Coupon code is required"
msgstr ""
-#: includes/api/class-wc-api-orders.php:1187
-#: includes/api/v2/class-wc-api-orders.php:1178
+#: includes/api/class-wc-api-orders.php:1206
+#: includes/api/v2/class-wc-api-orders.php:1169
#: includes/cli/class-wc-cli-order.php:1218
msgid "Cannot create coupon, try again"
msgstr ""
-#: includes/api/class-wc-api-orders.php:1205
-#: includes/api/v2/class-wc-api-orders.php:1196
+#: includes/api/class-wc-api-orders.php:1224
+#: includes/api/v2/class-wc-api-orders.php:1187
#: includes/cli/class-wc-cli-order.php:1236
msgid "Cannot update coupon, try again"
msgstr ""
-#: includes/api/class-wc-api-orders.php:1270
-#: includes/api/class-wc-api-orders.php:1378
-#: includes/api/class-wc-api-orders.php:1440
-#: includes/api/v2/class-wc-api-orders.php:1261
-#: includes/api/v2/class-wc-api-orders.php:1369
-#: includes/api/v2/class-wc-api-orders.php:1431
+#: includes/api/class-wc-api-orders.php:1289
+#: includes/api/class-wc-api-orders.php:1397
+#: includes/api/class-wc-api-orders.php:1459
+#: includes/api/v2/class-wc-api-orders.php:1252
+#: includes/api/v2/class-wc-api-orders.php:1360
+#: includes/api/v2/class-wc-api-orders.php:1422
msgid "Invalid order note ID"
msgstr ""
-#: includes/api/class-wc-api-orders.php:1276
-#: includes/api/class-wc-api-orders.php:1385
-#: includes/api/class-wc-api-orders.php:1447
-#: includes/api/v2/class-wc-api-orders.php:1267
-#: includes/api/v2/class-wc-api-orders.php:1376
-#: includes/api/v2/class-wc-api-orders.php:1438
+#: includes/api/class-wc-api-orders.php:1295
+#: includes/api/class-wc-api-orders.php:1404
+#: includes/api/class-wc-api-orders.php:1466
+#: includes/api/v2/class-wc-api-orders.php:1258
+#: includes/api/v2/class-wc-api-orders.php:1367
+#: includes/api/v2/class-wc-api-orders.php:1429
msgid "An order note with the provided ID could not be found"
msgstr ""
-#: includes/api/class-wc-api-orders.php:1310
-#: includes/api/v2/class-wc-api-orders.php:1301
+#: includes/api/class-wc-api-orders.php:1329
+#: includes/api/v2/class-wc-api-orders.php:1292
msgid "You do not have permission to create order notes"
msgstr ""
-#: includes/api/class-wc-api-orders.php:1325
-#: includes/api/v2/class-wc-api-orders.php:1316
+#: includes/api/class-wc-api-orders.php:1344
+#: includes/api/v2/class-wc-api-orders.php:1307
msgid "Order note is required"
msgstr ""
-#: includes/api/class-wc-api-orders.php:1334
-#: includes/api/v2/class-wc-api-orders.php:1325
+#: includes/api/class-wc-api-orders.php:1353
+#: includes/api/v2/class-wc-api-orders.php:1316
msgid "Cannot create order note, please try again"
msgstr ""
-#: includes/api/class-wc-api-orders.php:1390
-#: includes/api/class-wc-api-orders.php:1452
-#: includes/api/v2/class-wc-api-orders.php:1381
-#: includes/api/v2/class-wc-api-orders.php:1443
+#: includes/api/class-wc-api-orders.php:1409
+#: includes/api/class-wc-api-orders.php:1471
+#: includes/api/v2/class-wc-api-orders.php:1372
+#: includes/api/v2/class-wc-api-orders.php:1434
msgid "The order note ID provided is not associated with the order"
msgstr ""
-#: includes/api/class-wc-api-orders.php:1459
-#: includes/api/v2/class-wc-api-orders.php:1450
+#: includes/api/class-wc-api-orders.php:1478
+#: includes/api/v2/class-wc-api-orders.php:1441
msgid "This order note cannot be deleted"
msgstr ""
-#: includes/api/class-wc-api-orders.php:1464
-#: includes/api/v2/class-wc-api-orders.php:1455
+#: includes/api/class-wc-api-orders.php:1483
+#: includes/api/v2/class-wc-api-orders.php:1446
msgid "Permanently deleted order note"
msgstr ""
-#: includes/api/class-wc-api-orders.php:1525
-#: includes/api/class-wc-api-orders.php:1688
-#: includes/api/class-wc-api-orders.php:1747
-#: includes/api/v2/class-wc-api-orders.php:1516
-#: includes/api/v2/class-wc-api-orders.php:1679
-#: includes/api/v2/class-wc-api-orders.php:1738
+#: includes/api/class-wc-api-orders.php:1544
+#: includes/api/class-wc-api-orders.php:1707
+#: includes/api/class-wc-api-orders.php:1766
+#: includes/api/v2/class-wc-api-orders.php:1507
+#: includes/api/v2/class-wc-api-orders.php:1670
+#: includes/api/v2/class-wc-api-orders.php:1729
msgid "Invalid order refund ID"
msgstr ""
-#: includes/api/class-wc-api-orders.php:1532
-#: includes/api/class-wc-api-orders.php:1695
-#: includes/api/class-wc-api-orders.php:1754
-#: includes/api/v2/class-wc-api-orders.php:1523
-#: includes/api/v2/class-wc-api-orders.php:1686
-#: includes/api/v2/class-wc-api-orders.php:1745
+#: includes/api/class-wc-api-orders.php:1551
+#: includes/api/class-wc-api-orders.php:1714
+#: includes/api/class-wc-api-orders.php:1773
+#: includes/api/v2/class-wc-api-orders.php:1514
+#: includes/api/v2/class-wc-api-orders.php:1677
+#: includes/api/v2/class-wc-api-orders.php:1736
msgid "An order refund with the provided ID could not be found"
msgstr ""
-#: includes/api/class-wc-api-orders.php:1602
-#: includes/api/v2/class-wc-api-orders.php:1593
+#: includes/api/class-wc-api-orders.php:1621
+#: includes/api/v2/class-wc-api-orders.php:1584
msgid "You do not have permission to create order refunds"
msgstr ""
-#: includes/api/class-wc-api-orders.php:1615
-#: includes/api/v2/class-wc-api-orders.php:1606
+#: includes/api/class-wc-api-orders.php:1634
+#: includes/api/v2/class-wc-api-orders.php:1597
msgid "Refund amount is required"
msgstr ""
-#: includes/api/class-wc-api-orders.php:1617
-#: includes/api/v2/class-wc-api-orders.php:1608
+#: includes/api/class-wc-api-orders.php:1636
+#: includes/api/v2/class-wc-api-orders.php:1599
msgid "Refund amount must be positive"
msgstr ""
-#: includes/api/class-wc-api-orders.php:1627
-#: includes/api/v2/class-wc-api-orders.php:1618
+#: includes/api/class-wc-api-orders.php:1646
+#: includes/api/v2/class-wc-api-orders.php:1609
msgid "Cannot create order refund, please try again"
msgstr ""
-#: includes/api/class-wc-api-orders.php:1644
-#: includes/api/v2/class-wc-api-orders.php:1635
+#: includes/api/class-wc-api-orders.php:1663
+#: includes/api/v2/class-wc-api-orders.php:1626
msgid ""
"An error occurred while attempting to create the refund using the payment "
"gateway API"
msgstr ""
-#: includes/api/class-wc-api-orders.php:1700
-#: includes/api/class-wc-api-orders.php:1759
-#: includes/api/v2/class-wc-api-orders.php:1691
-#: includes/api/v2/class-wc-api-orders.php:1750
+#: includes/api/class-wc-api-orders.php:1719
+#: includes/api/class-wc-api-orders.php:1778
+#: includes/api/v2/class-wc-api-orders.php:1682
+#: includes/api/v2/class-wc-api-orders.php:1741
msgid "The order refund ID provided is not associated with the order"
msgstr ""
-#: includes/api/class-wc-api-products.php:215
+#: includes/api/class-wc-api-products.php:228
#: includes/api/v1/class-wc-api-products.php:143
#: includes/api/v2/class-wc-api-products.php:183
msgid "You do not have permission to read the products count"
msgstr ""
-#: includes/api/class-wc-api-products.php:249
+#: includes/api/class-wc-api-products.php:262
#: includes/api/v2/class-wc-api-products.php:217
msgid "You do not have permission to create products"
msgstr ""
-#: includes/api/class-wc-api-products.php:271
-#: includes/api/class-wc-api-products.php:390
+#: includes/api/class-wc-api-products.php:284
+#: includes/api/class-wc-api-products.php:403
#: includes/api/v2/class-wc-api-products.php:239
#: includes/api/v2/class-wc-api-products.php:358
#: includes/cli/class-wc-cli-product.php:166
@@ -12811,225 +12568,266 @@ msgstr ""
msgid "Invalid product type - the product type must be any of these: %s"
msgstr ""
-#: includes/api/class-wc-api-products.php:530
-#: includes/api/class-wc-api-products.php:566
-#: includes/api/v2/class-wc-api-products.php:498
-#: includes/api/v2/class-wc-api-products.php:534
-msgid "You do not have permission to read product categories"
+#: includes/api/class-wc-api-products.php:458
+#: includes/api/class-wc-api-products.php:3135
+#: includes/api/class-wc-api-resource.php:377
+#: includes/api/v1/class-wc-api-resource.php:316
+#: includes/api/v2/class-wc-api-products.php:413
+#: includes/api/v2/class-wc-api-resource.php:378
+msgid "This %s cannot be deleted"
msgstr ""
-#: includes/api/class-wc-api-products.php:561
-#: includes/api/v2/class-wc-api-products.php:529
-msgid "Invalid product category ID"
+#: includes/api/class-wc-api-products.php:467
+#: includes/api/class-wc-api-resource.php:380
+#: includes/api/v1/class-wc-api-resource.php:319
+#: includes/api/v2/class-wc-api-products.php:422
+#: includes/api/v2/class-wc-api-resource.php:382
+msgid "Permanently deleted %s"
msgstr ""
-#: includes/api/class-wc-api-products.php:572
-#: includes/api/v2/class-wc-api-products.php:540
-msgid "A product category with the provided ID could not be found"
-msgstr ""
-
-#: includes/api/class-wc-api-products.php:621
-msgid "You do not have permission to create product categories"
-msgstr ""
-
-#: includes/api/class-wc-api-products.php:644
-msgid "Product category parent is invalid"
-msgstr ""
-
-#: includes/api/class-wc-api-products.php:705
-msgid "You do not have permission to edit product categories"
-msgstr ""
-
-#: includes/api/class-wc-api-products.php:742
-msgid "Could not edit the category"
-msgstr ""
-
-#: includes/api/class-wc-api-products.php:775
-msgid "You do not have permission to delete product category"
-msgstr ""
-
-#: includes/api/class-wc-api-products.php:781
-msgid "Could not delete the category"
-msgstr ""
-
-#: includes/api/class-wc-api-products.php:789
-#: includes/api/class-wc-api-products.php:979
-#: includes/api/class-wc-api-products.php:2829
-#: includes/api/class-wc-api-products.php:3136
+#: includes/api/class-wc-api-products.php:471
+#: includes/api/class-wc-api-products.php:820
+#: includes/api/class-wc-api-products.php:1010
+#: includes/api/class-wc-api-products.php:2874
+#: includes/api/class-wc-api-products.php:3142
+#: includes/api/class-wc-api-products.php:3449
#: includes/api/class-wc-api-resource.php:386
-#: includes/api/class-wc-api-taxes.php:357
-#: includes/api/class-wc-api-taxes.php:652
+#: includes/api/class-wc-api-taxes.php:354
+#: includes/api/class-wc-api-taxes.php:650
#: includes/api/v1/class-wc-api-resource.php:325
-#: includes/api/v2/class-wc-api-products.php:2308
+#: includes/api/v2/class-wc-api-products.php:426
+#: includes/api/v2/class-wc-api-products.php:2331
#: includes/api/v2/class-wc-api-resource.php:386
msgid "Deleted %s"
msgstr ""
+#: includes/api/class-wc-api-products.php:561
+#: includes/api/class-wc-api-products.php:597
+#: includes/api/v2/class-wc-api-products.php:516
+#: includes/api/v2/class-wc-api-products.php:552
+msgid "You do not have permission to read product categories"
+msgstr ""
+
+#: includes/api/class-wc-api-products.php:592
+#: includes/api/v2/class-wc-api-products.php:547
+msgid "Invalid product category ID"
+msgstr ""
+
+#: includes/api/class-wc-api-products.php:603
+#: includes/api/v2/class-wc-api-products.php:558
+msgid "A product category with the provided ID could not be found"
+msgstr ""
+
+#: includes/api/class-wc-api-products.php:652
+msgid "You do not have permission to create product categories"
+msgstr ""
+
+#: includes/api/class-wc-api-products.php:675
+msgid "Product category parent is invalid"
+msgstr ""
+
+#: includes/api/class-wc-api-products.php:736
+msgid "You do not have permission to edit product categories"
+msgstr ""
+
+#: includes/api/class-wc-api-products.php:773
+msgid "Could not edit the category"
+msgstr ""
+
#: includes/api/class-wc-api-products.php:806
-#: includes/api/class-wc-api-products.php:842
-msgid "You do not have permission to read product tags"
+msgid "You do not have permission to delete product category"
+msgstr ""
+
+#: includes/api/class-wc-api-products.php:812
+msgid "Could not delete the category"
msgstr ""
#: includes/api/class-wc-api-products.php:837
+#: includes/api/class-wc-api-products.php:873
+msgid "You do not have permission to read product tags"
+msgstr ""
+
+#: includes/api/class-wc-api-products.php:868
msgid "Invalid product tag ID"
msgstr ""
-#: includes/api/class-wc-api-products.php:848
+#: includes/api/class-wc-api-products.php:879
msgid "A product tag with the provided ID could not be found"
msgstr ""
-#: includes/api/class-wc-api-products.php:883
+#: includes/api/class-wc-api-products.php:914
msgid "You do not have permission to create product tags"
msgstr ""
-#: includes/api/class-wc-api-products.php:933
+#: includes/api/class-wc-api-products.php:964
msgid "You do not have permission to edit product tags"
msgstr ""
-#: includes/api/class-wc-api-products.php:945
+#: includes/api/class-wc-api-products.php:976
msgid "Could not edit the tag"
msgstr ""
-#: includes/api/class-wc-api-products.php:968
+#: includes/api/class-wc-api-products.php:999
msgid "You do not have permission to delete product tag"
msgstr ""
-#: includes/api/class-wc-api-products.php:974
+#: includes/api/class-wc-api-products.php:1005
msgid "Could not delete the tag"
msgstr ""
-#: includes/api/class-wc-api-products.php:1286
-#: includes/api/class-wc-api-products.php:1749
-#: includes/api/v2/class-wc-api-products.php:833
-#: includes/api/v2/class-wc-api-products.php:1291
-#: includes/cli/class-wc-cli-product.php:1116
-#: includes/cli/class-wc-cli-product.php:1574
+#: includes/api/class-wc-api-products.php:1318
+#: includes/api/class-wc-api-products.php:1782
+#: includes/api/v2/class-wc-api-products.php:852
+#: includes/api/v2/class-wc-api-products.php:1311
+#: includes/cli/class-wc-cli-product.php:1117
+#: includes/cli/class-wc-cli-product.php:1576
msgid "The SKU already exists on another product"
msgstr ""
-#: includes/api/class-wc-api-products.php:2200
-#: includes/api/class-wc-api-products.php:2201
+#: includes/api/class-wc-api-products.php:2238
+#: includes/api/class-wc-api-products.php:2239
#: includes/api/v1/class-wc-api-products.php:461
#: includes/api/v1/class-wc-api-products.php:462
-#: includes/api/v2/class-wc-api-products.php:1737
-#: includes/api/v2/class-wc-api-products.php:1738
+#: includes/api/v2/class-wc-api-products.php:1757
+#: includes/api/v2/class-wc-api-products.php:1758
#: includes/cli/class-wc-cli-product.php:905
#: includes/cli/class-wc-cli-product.php:906
-#: includes/wc-product-functions.php:283
+#: includes/wc-product-functions.php:289
#: templates/single-product/product-image.php:50
msgid "Placeholder"
msgstr ""
-#: includes/api/class-wc-api-products.php:2310
-#: includes/api/v2/class-wc-api-products.php:1812
-#: includes/cli/class-wc-cli-product.php:2003
+#: includes/api/class-wc-api-products.php:2349
+#: includes/api/v2/class-wc-api-products.php:1834
+#: includes/cli/class-wc-cli-product.php:2007
msgid "Invalid URL %s"
msgstr ""
-#: includes/api/class-wc-api-products.php:2322
-#: includes/api/v2/class-wc-api-products.php:1824
-#: includes/cli/class-wc-cli-product.php:2015
+#: includes/api/class-wc-api-products.php:2361
+#: includes/api/v2/class-wc-api-products.php:1846
+#: includes/cli/class-wc-cli-product.php:2019
msgid "Error getting remote image %s"
msgstr ""
-#: includes/api/class-wc-api-products.php:2351
-#: includes/api/v2/class-wc-api-products.php:1853
-#: includes/cli/class-wc-cli-product.php:2044
+#: includes/api/class-wc-api-products.php:2390
+#: includes/api/v2/class-wc-api-products.php:1875
+#: includes/cli/class-wc-cli-product.php:2048
msgid "Zero size file downloaded"
msgstr ""
-#: includes/api/class-wc-api-products.php:2506
-#: includes/api/class-wc-api-products.php:2550
-#: includes/api/v2/class-wc-api-products.php:1985
-#: includes/api/v2/class-wc-api-products.php:2029
+#: includes/api/class-wc-api-products.php:2547
+#: includes/api/class-wc-api-products.php:2591
+#: includes/api/v2/class-wc-api-products.php:2007
+#: includes/api/v2/class-wc-api-products.php:2051
msgid "You do not have permission to read product attributes"
msgstr ""
-#: includes/api/class-wc-api-products.php:2545
-#: includes/api/v2/class-wc-api-products.php:2024
+#: includes/api/class-wc-api-products.php:2586
+#: includes/api/class-wc-api-products.php:2954
+#: includes/api/v2/class-wc-api-products.php:2046
msgid "Invalid product attribute ID"
msgstr ""
-#: includes/api/class-wc-api-products.php:2560
-#: includes/api/class-wc-api-products.php:2801
-#: includes/api/v2/class-wc-api-products.php:2039
-#: includes/api/v2/class-wc-api-products.php:2280
+#: includes/api/class-wc-api-products.php:2601
+#: includes/api/class-wc-api-products.php:2845
+#: includes/api/class-wc-api-products.php:2898
+#: includes/api/class-wc-api-products.php:2965
+#: includes/api/class-wc-api-products.php:3013
+#: includes/api/class-wc-api-products.php:3077
+#: includes/api/class-wc-api-products.php:3128
+#: includes/api/v2/class-wc-api-products.php:2061
+#: includes/api/v2/class-wc-api-products.php:2303
msgid "A product attribute with the provided ID could not be found"
msgstr ""
-#: includes/api/class-wc-api-products.php:2604
-#: includes/api/v2/class-wc-api-products.php:2083
+#: includes/api/class-wc-api-products.php:2646
+#: includes/api/v2/class-wc-api-products.php:2106
msgid ""
"Invalid product attribute type - the product attribute type must be any of "
"these: %s"
msgstr ""
-#: includes/api/class-wc-api-products.php:2609
-#: includes/api/v2/class-wc-api-products.php:2088
+#: includes/api/class-wc-api-products.php:2651
+#: includes/api/v2/class-wc-api-products.php:2111
msgid ""
"Invalid product attribute order_by type - the product attribute order_by "
"type must be any of these: %s"
msgstr ""
-#: includes/api/class-wc-api-products.php:2634
-#: includes/api/v2/class-wc-api-products.php:2113
+#: includes/api/class-wc-api-products.php:2676
+#: includes/api/class-wc-api-products.php:3007
+#: includes/api/v2/class-wc-api-products.php:2136
msgid "You do not have permission to create product attributes"
msgstr ""
-#: includes/api/class-wc-api-products.php:2716
-#: includes/api/v2/class-wc-api-products.php:2195
+#: includes/api/class-wc-api-products.php:2759
+#: includes/api/class-wc-api-products.php:3071
+#: includes/api/v2/class-wc-api-products.php:2218
msgid "You do not have permission to edit product attributes"
msgstr ""
-#: includes/api/class-wc-api-products.php:2762
-#: includes/api/v2/class-wc-api-products.php:2241
+#: includes/api/class-wc-api-products.php:2805
+#: includes/api/v2/class-wc-api-products.php:2264
msgid "Could not edit the attribute"
msgstr ""
-#: includes/api/class-wc-api-products.php:2789
-#: includes/api/v2/class-wc-api-products.php:2268
+#: includes/api/class-wc-api-products.php:2833
+#: includes/api/v2/class-wc-api-products.php:2291
msgid "You do not have permission to delete product attributes"
msgstr ""
-#: includes/api/class-wc-api-products.php:2811
-#: includes/api/v2/class-wc-api-products.php:2290
+#: includes/api/class-wc-api-products.php:2855
+#: includes/api/v2/class-wc-api-products.php:2313
msgid "Could not delete the attribute"
msgstr ""
-#: includes/api/class-wc-api-products.php:2947
-#: includes/api/class-wc-api-products.php:2982
+#: includes/api/class-wc-api-products.php:2892
+#: includes/api/class-wc-api-products.php:2959
+msgid "You do not have permission to read product attribute terms"
+msgstr ""
+
+#: includes/api/class-wc-api-products.php:2971
+msgid "A product attribute term with the provided ID could not be found"
+msgstr ""
+
+#: includes/api/class-wc-api-products.php:3122
+msgid "You do not have permission to delete product attribute terms"
+msgstr ""
+
+#: includes/api/class-wc-api-products.php:3260
+#: includes/api/class-wc-api-products.php:3295
msgid "You do not have permission to read product shipping classes"
msgstr ""
-#: includes/api/class-wc-api-products.php:2977
+#: includes/api/class-wc-api-products.php:3290
msgid "Invalid product shipping class ID"
msgstr ""
-#: includes/api/class-wc-api-products.php:2988
+#: includes/api/class-wc-api-products.php:3301
msgid "A product shipping class with the provided ID could not be found"
msgstr ""
-#: includes/api/class-wc-api-products.php:3026
+#: includes/api/class-wc-api-products.php:3339
msgid "You do not have permission to create product shipping classes"
msgstr ""
-#: includes/api/class-wc-api-products.php:3047
+#: includes/api/class-wc-api-products.php:3360
msgid "Product shipping class parent is invalid"
msgstr ""
-#: includes/api/class-wc-api-products.php:3088
+#: includes/api/class-wc-api-products.php:3401
msgid "You do not have permission to edit product shipping classes"
msgstr ""
-#: includes/api/class-wc-api-products.php:3100
+#: includes/api/class-wc-api-products.php:3413
msgid "Could not edit the shipping class"
msgstr ""
-#: includes/api/class-wc-api-products.php:3125
+#: includes/api/class-wc-api-products.php:3438
msgid "You do not have permission to delete product shipping classes"
msgstr ""
-#: includes/api/class-wc-api-products.php:3131
+#: includes/api/class-wc-api-products.php:3444
msgid "Could not delete the shipping class"
msgstr ""
@@ -13086,18 +12884,6 @@ msgstr ""
msgid "The customer cannot be deleted"
msgstr ""
-#: includes/api/class-wc-api-resource.php:377
-#: includes/api/v1/class-wc-api-resource.php:316
-#: includes/api/v2/class-wc-api-resource.php:377
-msgid "This %s cannot be deleted"
-msgstr ""
-
-#: includes/api/class-wc-api-resource.php:380
-#: includes/api/v1/class-wc-api-resource.php:319
-#: includes/api/v2/class-wc-api-resource.php:380
-msgid "Permanently deleted %s"
-msgstr ""
-
#: includes/api/class-wc-api-server.php:164
#: includes/api/v1/class-wc-api-server.php:170
#: includes/api/v2/class-wc-api-server.php:164
@@ -13138,43 +12924,45 @@ msgstr ""
msgid "You do not have permission to edit tax rates"
msgstr ""
-#: includes/api/class-wc-api-taxes.php:346
+#: includes/api/class-wc-api-taxes.php:343
msgid "You do not have permission to delete tax rates"
msgstr ""
-#: includes/api/class-wc-api-taxes.php:354
+#: includes/api/class-wc-api-taxes.php:351
msgid "Could not delete the tax rate"
msgstr ""
-#: includes/api/class-wc-api-taxes.php:376
+#: includes/api/class-wc-api-taxes.php:373
msgid "You do not have permission to read the taxes count"
msgstr ""
-#: includes/api/class-wc-api-taxes.php:528
+#: includes/api/class-wc-api-taxes.php:526
msgid "You do not have permission to read tax classes"
msgstr ""
-#: includes/api/class-wc-api-taxes.php:536
+#: includes/api/class-wc-api-taxes.php:534
+#: includes/cli/class-wc-cli-tax.php:434
msgid "Standard Rate"
msgstr ""
-#: includes/api/class-wc-api-taxes.php:571
+#: includes/api/class-wc-api-taxes.php:569
msgid "You do not have permission to create tax classes"
msgstr ""
-#: includes/api/class-wc-api-taxes.php:595
+#: includes/api/class-wc-api-taxes.php:593
+#: includes/cli/class-wc-cli-tax.php:148
msgid "Tax class already exists"
msgstr ""
-#: includes/api/class-wc-api-taxes.php:631
+#: includes/api/class-wc-api-taxes.php:629
msgid "You do not have permission to delete tax classes"
msgstr ""
-#: includes/api/class-wc-api-taxes.php:647
+#: includes/api/class-wc-api-taxes.php:645
msgid "Could not delete the tax class"
msgstr ""
-#: includes/api/class-wc-api-taxes.php:668
+#: includes/api/class-wc-api-taxes.php:666
msgid "You do not have permission to read the tax classes count"
msgstr ""
@@ -13210,12 +12998,12 @@ msgstr ""
msgid "Webhook topic must be valid"
msgstr ""
-#: includes/api/class-wc-api-webhooks.php:437
+#: includes/api/class-wc-api-webhooks.php:440
#: includes/api/v2/class-wc-api-webhooks.php:437
msgid "Invalid webhook delivery ID"
msgstr ""
-#: includes/api/class-wc-api-webhooks.php:445
+#: includes/api/class-wc-api-webhooks.php:448
#: includes/api/v2/class-wc-api-webhooks.php:445
msgid "Invalid webhook delivery"
msgstr ""
@@ -13230,81 +13018,81 @@ msgstr ""
msgid "Consumer Secret is missing"
msgstr ""
-#: includes/api/v2/class-wc-api-products.php:2329
+#: includes/api/v2/class-wc-api-products.php:2352
msgid "Invalid product SKU"
msgstr ""
-#: includes/class-wc-ajax.php:203
+#: includes/class-wc-ajax.php:211
msgid "Sorry there was a problem removing this coupon."
msgstr ""
-#: includes/class-wc-ajax.php:209
+#: includes/class-wc-ajax.php:217
msgid "Coupon has been removed."
msgstr ""
-#: includes/class-wc-ajax.php:260
+#: includes/class-wc-ajax.php:268
msgid "Sorry, your session has expired."
msgstr ""
-#: includes/class-wc-ajax.php:260
+#: includes/class-wc-ajax.php:268
msgid "Return to homepage"
msgstr ""
-#: includes/class-wc-ajax.php:1369
+#: includes/class-wc-ajax.php:1377
msgid ""
"No products had their stock reduced - they may not have stock management "
"enabled."
msgstr ""
-#: includes/class-wc-ajax.php:1411
+#: includes/class-wc-ajax.php:1419
msgid "Item %s stock increased from %s to %s."
msgstr ""
-#: includes/class-wc-ajax.php:1421
+#: includes/class-wc-ajax.php:1429
msgid ""
"No products had their stock increased - they may not have stock management "
"enabled."
msgstr ""
-#: includes/class-wc-ajax.php:1440
+#: includes/class-wc-ajax.php:1448
msgid "Value"
msgstr ""
-#: includes/class-wc-ajax.php:2138
+#: includes/class-wc-ajax.php:2146
msgid "Invalid refund amount"
msgstr ""
-#: includes/class-wc-ajax.php:2183
+#: includes/class-wc-ajax.php:2191
msgid "Refund failed"
msgstr ""
-#: includes/class-wc-ajax.php:2198
+#: includes/class-wc-ajax.php:2206
msgid "Item #%s stock increased from %s to %s."
msgstr ""
-#: includes/class-wc-ajax.php:2287
+#: includes/class-wc-ajax.php:2295
msgid "Description is missing."
msgstr ""
-#: includes/class-wc-ajax.php:2290
+#: includes/class-wc-ajax.php:2298
msgid "User is missing."
msgstr ""
-#: includes/class-wc-ajax.php:2293
+#: includes/class-wc-ajax.php:2301
msgid "Permissions is missing."
msgstr ""
-#: includes/class-wc-ajax.php:2322
+#: includes/class-wc-ajax.php:2330
msgid "API Key updated successfully."
msgstr ""
-#: includes/class-wc-ajax.php:2353
+#: includes/class-wc-ajax.php:2361
msgid ""
"API Key generated successfully. Make sure to copy your new API keys now. "
"You won't be able to see it again!"
msgstr ""
-#: includes/class-wc-ajax.php:2570
+#: includes/class-wc-ajax.php:2578
msgid "Dismiss this notice."
msgstr ""
@@ -13320,7 +13108,7 @@ msgstr ""
msgid "View orders and sales reports"
msgstr ""
-#: includes/class-wc-auth.php:101 includes/class-wc-product-grouped.php:44
+#: includes/class-wc-auth.php:101 includes/class-wc-product-grouped.php:41
msgid "View products"
msgstr ""
@@ -13376,25 +13164,25 @@ msgstr ""
msgid "%s - API %s (created on %s at %s)."
msgstr ""
-#: includes/class-wc-auth.php:253
+#: includes/class-wc-auth.php:254
msgid ""
"An error occurred in the request and at the time were unable to send the "
"consumer data"
msgstr ""
-#: includes/class-wc-auth.php:295
+#: includes/class-wc-auth.php:296
msgid "API disabled!"
msgstr ""
-#: includes/class-wc-auth.php:337
+#: includes/class-wc-auth.php:338
msgid "Invalid nonce verification"
msgstr ""
-#: includes/class-wc-auth.php:348
+#: includes/class-wc-auth.php:349
msgid "You do not have permissions to access this page!"
msgstr ""
-#: includes/class-wc-auth.php:353
+#: includes/class-wc-auth.php:354
msgid "Access Denied"
msgstr ""
@@ -13410,153 +13198,153 @@ msgstr ""
msgid "Posts tagged “%s”"
msgstr ""
-#: includes/class-wc-breadcrumb.php:304
+#: includes/class-wc-breadcrumb.php:303
msgid "Author: %s"
msgstr ""
-#: includes/class-wc-breadcrumb.php:339
+#: includes/class-wc-breadcrumb.php:338
msgid "Search results for “%s”"
msgstr ""
-#: includes/class-wc-breadcrumb.php:348
+#: includes/class-wc-breadcrumb.php:347
msgid "Page %d"
msgstr ""
-#: includes/class-wc-cache-helper.php:194
+#: includes/class-wc-cache-helper.php:219
msgid ""
"In order for database caching to work with WooCommerce you "
"must add _wc_session_
to the \"Ignored Query Strings\" option "
"in W3 Total Cache settings here."
msgstr ""
-#: includes/class-wc-cart.php:237
+#: includes/class-wc-cart.php:240
msgid ""
"%s has been removed from your cart because it can no longer be purchased. "
"Please contact us if you need assistance."
msgstr ""
-#: includes/class-wc-cart.php:442
+#: includes/class-wc-cart.php:459
msgid "An item which is no longer available was removed from your cart."
msgstr ""
-#: includes/class-wc-cart.php:468
+#: includes/class-wc-cart.php:485
msgid ""
"Sorry, \"%s\" is not in stock. Please edit your cart and try again. We "
"apologise for any inconvenience caused."
msgstr ""
-#: includes/class-wc-cart.php:482
+#: includes/class-wc-cart.php:499
msgid ""
"Sorry, we do not have enough \"%s\" in stock to fulfill your order (%s in "
"stock). Please edit your cart and try again. We apologise for any "
"inconvenience caused."
msgstr ""
-#: includes/class-wc-cart.php:517
+#: includes/class-wc-cart.php:534
msgid ""
"Sorry, we do not have enough \"%s\" in stock to fulfill your order right "
"now. Please try again in %d minutes or edit your cart and try again. We "
"apologise for any inconvenience caused."
msgstr ""
-#: includes/class-wc-cart.php:680
+#: includes/class-wc-cart.php:697
msgid "Get cart should not be called before the wp_loaded action."
msgstr ""
-#: includes/class-wc-cart.php:887 includes/class-wc-cart.php:922
+#: includes/class-wc-cart.php:904 includes/class-wc-cart.php:939
#: includes/class-wc-frontend-scripts.php:307 includes/wc-cart-functions.php:85
#: templates/cart/mini-cart.php:84
msgid "View Cart"
msgstr ""
-#: includes/class-wc-cart.php:887
+#: includes/class-wc-cart.php:904
msgid "You cannot add another "%s" to your cart."
msgstr ""
-#: includes/class-wc-cart.php:893
+#: includes/class-wc-cart.php:910
msgid "Sorry, this product cannot be purchased."
msgstr ""
-#: includes/class-wc-cart.php:898
+#: includes/class-wc-cart.php:915
msgid ""
"You cannot add "%s" to the cart because the product is out of "
"stock."
msgstr ""
-#: includes/class-wc-cart.php:902
+#: includes/class-wc-cart.php:919
msgid ""
"You cannot add that amount of "%s" to the cart because there is "
"not enough stock (%s remaining)."
msgstr ""
-#: includes/class-wc-cart.php:923
+#: includes/class-wc-cart.php:940
msgid ""
"You cannot add that amount to the cart — we have %s in stock and you "
"already have %s in your cart."
msgstr ""
-#: includes/class-wc-checkout.php:101
+#: includes/class-wc-checkout.php:106
msgid "Account username"
msgstr ""
-#: includes/class-wc-checkout.php:110
+#: includes/class-wc-checkout.php:115
msgid "Account password"
msgstr ""
-#: includes/class-wc-checkout.php:197 includes/class-wc-checkout.php:208
-#: includes/class-wc-checkout.php:233 includes/class-wc-checkout.php:245
-#: includes/class-wc-checkout.php:258 includes/class-wc-checkout.php:269
-#: includes/class-wc-checkout.php:276
+#: includes/class-wc-checkout.php:202 includes/class-wc-checkout.php:213
+#: includes/class-wc-checkout.php:238 includes/class-wc-checkout.php:250
+#: includes/class-wc-checkout.php:263 includes/class-wc-checkout.php:274
+#: includes/class-wc-checkout.php:281
msgid "Error %d: Unable to create order. Please try again."
msgstr ""
-#: includes/class-wc-checkout.php:345
+#: includes/class-wc-checkout.php:350
msgid "We were unable to process your order, please try again."
msgstr ""
-#: includes/class-wc-checkout.php:358
+#: includes/class-wc-checkout.php:363
msgid ""
"Sorry, your session has expired. Return to homepage"
msgstr ""
-#: includes/class-wc-checkout.php:438 includes/class-wc-form-handler.php:85
+#: includes/class-wc-checkout.php:443 includes/class-wc-form-handler.php:85
#: includes/class-wc-form-handler.php:184
msgid "is a required field."
msgstr ""
-#: includes/class-wc-checkout.php:451 includes/class-wc-form-handler.php:98
+#: includes/class-wc-checkout.php:456 includes/class-wc-form-handler.php:98
#: includes/shortcodes/class-wc-shortcode-cart.php:27
msgid "Please enter a valid postcode/ZIP."
msgstr ""
-#: includes/class-wc-checkout.php:460 includes/class-wc-form-handler.php:107
+#: includes/class-wc-checkout.php:465 includes/class-wc-form-handler.php:107
msgid "is not a valid phone number."
msgstr ""
-#: includes/class-wc-checkout.php:466 includes/class-wc-form-handler.php:114
+#: includes/class-wc-checkout.php:471 includes/class-wc-form-handler.php:114
msgid "is not a valid email address."
msgstr ""
-#: includes/class-wc-checkout.php:484
+#: includes/class-wc-checkout.php:489
msgid "is not valid. Please enter one of the following:"
msgstr ""
-#: includes/class-wc-checkout.php:540 includes/class-wc-form-handler.php:294
+#: includes/class-wc-checkout.php:545 includes/class-wc-form-handler.php:294
msgid "You must accept our Terms & Conditions."
msgstr ""
-#: includes/class-wc-checkout.php:546
+#: includes/class-wc-checkout.php:551
msgid ""
"Unfortunately we do not ship %s. Please enter an "
"alternative shipping address."
msgstr ""
-#: includes/class-wc-checkout.php:555
+#: includes/class-wc-checkout.php:560
msgid "Invalid shipping method."
msgstr ""
-#: includes/class-wc-checkout.php:567 includes/class-wc-form-handler.php:304
+#: includes/class-wc-checkout.php:572 includes/class-wc-form-handler.php:304
msgid "Invalid payment method."
msgstr ""
@@ -13564,178 +13352,182 @@ msgstr ""
msgid "Please rate the product."
msgstr ""
-#: includes/class-wc-countries.php:265
+#: includes/class-wc-countries.php:269
msgid "to the"
msgstr ""
-#: includes/class-wc-countries.php:265
+#: includes/class-wc-countries.php:269
msgid "to"
msgstr ""
-#: includes/class-wc-countries.php:276
+#: includes/class-wc-countries.php:280
msgid "the"
msgstr ""
-#: includes/class-wc-countries.php:286
+#: includes/class-wc-countries.php:290
msgid "VAT"
msgstr ""
-#: includes/class-wc-countries.php:296
+#: includes/class-wc-countries.php:300
msgid "(incl. VAT)"
msgstr ""
-#: includes/class-wc-countries.php:296
+#: includes/class-wc-countries.php:300
msgid "(incl. tax)"
msgstr ""
-#: includes/class-wc-countries.php:306
+#: includes/class-wc-countries.php:310
msgid "(ex. VAT)"
msgstr ""
-#: includes/class-wc-countries.php:306
+#: includes/class-wc-countries.php:310
msgid "(ex. tax)"
msgstr ""
-#: includes/class-wc-countries.php:499
+#: includes/class-wc-countries.php:503
msgid "Company Name"
msgstr ""
-#: includes/class-wc-countries.php:520 includes/class-wc-countries.php:521
+#: includes/class-wc-countries.php:524 includes/class-wc-countries.php:525
msgid "Town / City"
msgstr ""
-#: includes/class-wc-countries.php:527
+#: includes/class-wc-countries.php:531
msgid "State / County"
msgstr ""
-#: includes/class-wc-countries.php:533 includes/class-wc-countries.php:534
+#: includes/class-wc-countries.php:537 includes/class-wc-countries.php:538
#: templates/cart/shipping-calculator.php:90
-msgid "Postcode / Zip"
+msgid "Postcode / ZIP"
msgstr ""
-#: includes/class-wc-countries.php:589 includes/class-wc-countries.php:590
+#: includes/class-wc-countries.php:593 includes/class-wc-countries.php:594
msgid "Suburb"
msgstr ""
-#: includes/class-wc-countries.php:612 includes/class-wc-countries.php:790
+#: includes/class-wc-countries.php:616
msgid "District"
msgstr ""
-#: includes/class-wc-countries.php:620 includes/class-wc-countries.php:643
-#: includes/class-wc-countries.php:669 includes/class-wc-countries.php:734
-#: includes/class-wc-countries.php:754 includes/class-wc-countries.php:772
-#: includes/class-wc-countries.php:834 includes/class-wc-countries.php:860
-#: includes/class-wc-countries.php:907
+#: includes/class-wc-countries.php:624 includes/class-wc-countries.php:647
+#: includes/class-wc-countries.php:673 includes/class-wc-countries.php:738
+#: includes/class-wc-countries.php:758 includes/class-wc-countries.php:776
+#: includes/class-wc-countries.php:836 includes/class-wc-countries.php:862
+#: includes/class-wc-countries.php:909
msgid "Province"
msgstr ""
-#: includes/class-wc-countries.php:650
+#: includes/class-wc-countries.php:654
msgid "Canton"
msgstr ""
-#: includes/class-wc-countries.php:663 includes/class-wc-countries.php:722
+#: includes/class-wc-countries.php:667 includes/class-wc-countries.php:726
msgid "Region"
msgstr ""
-#: includes/class-wc-countries.php:718 includes/class-wc-countries.php:719
+#: includes/class-wc-countries.php:722 includes/class-wc-countries.php:723
msgid "Town / District"
msgstr ""
-#: includes/class-wc-countries.php:728 includes/class-wc-countries.php:880
+#: includes/class-wc-countries.php:732 includes/class-wc-countries.php:882
msgid "County"
msgstr ""
-#: includes/class-wc-countries.php:760
+#: includes/class-wc-countries.php:764
msgid "Prefecture"
msgstr ""
-#: includes/class-wc-countries.php:841
+#: includes/class-wc-countries.php:793
+msgid "State / Zone"
+msgstr ""
+
+#: includes/class-wc-countries.php:843
msgid "Municipality"
msgstr ""
-#: includes/class-wc-countries.php:866 includes/class-wc-countries.php:867
-msgid "Zip"
+#: includes/class-wc-countries.php:868 includes/class-wc-countries.php:869
+msgid "ZIP"
msgstr ""
-#: includes/class-wc-countries.php:964
+#: includes/class-wc-countries.php:966
msgid "Email Address"
msgstr ""
-#: includes/class-wc-coupon.php:730
+#: includes/class-wc-coupon.php:738
msgid "Coupon code applied successfully."
msgstr ""
-#: includes/class-wc-coupon.php:733
+#: includes/class-wc-coupon.php:741
msgid "Coupon code removed successfully."
msgstr ""
-#: includes/class-wc-coupon.php:751
+#: includes/class-wc-coupon.php:759
msgid "Coupon is not valid."
msgstr ""
-#: includes/class-wc-coupon.php:754
+#: includes/class-wc-coupon.php:762
msgid "Coupon \"%s\" does not exist!"
msgstr ""
-#: includes/class-wc-coupon.php:757
+#: includes/class-wc-coupon.php:765
msgid ""
"Sorry, it seems the coupon \"%s\" is invalid - it has now been removed from "
"your order."
msgstr ""
-#: includes/class-wc-coupon.php:760
+#: includes/class-wc-coupon.php:768
msgid ""
"Sorry, it seems the coupon \"%s\" is not yours - it has now been removed "
"from your order."
msgstr ""
-#: includes/class-wc-coupon.php:763
+#: includes/class-wc-coupon.php:771
msgid "Coupon code already applied!"
msgstr ""
-#: includes/class-wc-coupon.php:766
+#: includes/class-wc-coupon.php:774
msgid ""
"Sorry, coupon \"%s\" has already been applied and cannot be used in "
"conjunction with other coupons."
msgstr ""
-#: includes/class-wc-coupon.php:769
+#: includes/class-wc-coupon.php:777
msgid "Coupon usage limit has been reached."
msgstr ""
-#: includes/class-wc-coupon.php:772
+#: includes/class-wc-coupon.php:780
msgid "This coupon has expired."
msgstr ""
-#: includes/class-wc-coupon.php:775
+#: includes/class-wc-coupon.php:783
msgid "The minimum spend for this coupon is %s."
msgstr ""
-#: includes/class-wc-coupon.php:778
+#: includes/class-wc-coupon.php:786
msgid "The maximum spend for this coupon is %s."
msgstr ""
-#: includes/class-wc-coupon.php:781
+#: includes/class-wc-coupon.php:789
msgid "Sorry, this coupon is not applicable to your cart contents."
msgstr ""
-#: includes/class-wc-coupon.php:794
+#: includes/class-wc-coupon.php:802
msgid "Sorry, this coupon is not applicable to the products: %s."
msgstr ""
-#: includes/class-wc-coupon.php:814
+#: includes/class-wc-coupon.php:821
msgid "Sorry, this coupon is not applicable to the categories: %s."
msgstr ""
-#: includes/class-wc-coupon.php:817
+#: includes/class-wc-coupon.php:824
msgid "Sorry, this coupon is not valid for sale items."
msgstr ""
-#: includes/class-wc-coupon.php:837
+#: includes/class-wc-coupon.php:844
msgid "Coupon does not exist!"
msgstr ""
-#: includes/class-wc-coupon.php:840
+#: includes/class-wc-coupon.php:847
msgid "Please enter a coupon code."
msgstr ""
@@ -13789,42 +13581,51 @@ msgstr ""
msgid "Go to homepage"
msgstr ""
-#: includes/class-wc-emails.php:265
+#: includes/class-wc-emails.php:282
msgid "Note"
msgstr ""
-#: includes/class-wc-emails.php:342
+#: includes/class-wc-emails.php:359
msgid "Tel"
msgstr ""
-#: includes/class-wc-emails.php:381
+#: includes/class-wc-emails.php:398
msgid "Product low in stock"
msgstr ""
-#: includes/class-wc-emails.php:382
+#: includes/class-wc-emails.php:399
msgid "%s is low in stock."
msgstr ""
-#: includes/class-wc-emails.php:382
+#: includes/class-wc-emails.php:399
msgid "There are %d left"
msgstr ""
-#: includes/class-wc-emails.php:399
+#: includes/class-wc-emails.php:416
msgid "Product out of stock"
msgstr ""
-#: includes/class-wc-emails.php:400
+#: includes/class-wc-emails.php:417
msgid "%s is out of stock."
msgstr ""
-#: includes/class-wc-emails.php:429
+#: includes/class-wc-emails.php:446
msgid "Product Backorder"
msgstr ""
-#: includes/class-wc-emails.php:430
+#: includes/class-wc-emails.php:447
msgid "%s units of %s have been backordered in order #%s."
msgstr ""
+#: includes/class-wc-embed.php:114
+msgid "Buy Now"
+msgstr ""
+
+#: includes/class-wc-embed.php:117 includes/class-wc-product-simple.php:48
+#: includes/class-wc-product-variation.php:187
+msgid "Read More"
+msgstr ""
+
#: includes/class-wc-form-handler.php:129
msgid "Address changed successfully."
msgstr ""
@@ -13968,22 +13769,22 @@ msgid "Error processing checkout. Please try again."
msgstr ""
#: includes/class-wc-frontend-scripts.php:286
-#: includes/wc-template-functions.php:1677
+#: includes/wc-template-functions.php:1706
msgid "required"
msgstr ""
-#: includes/class-wc-frontend-scripts.php:315
+#: includes/class-wc-frontend-scripts.php:318
msgid ""
"Sorry, no products matched your selection. Please choose a different "
"combination."
msgstr ""
-#: includes/class-wc-frontend-scripts.php:316
+#: includes/class-wc-frontend-scripts.php:319
msgid "Select product options before adding this product to your cart."
msgstr ""
-#: includes/class-wc-frontend-scripts.php:317
-#: templates/single-product/add-to-cart/variation.php:33
+#: includes/class-wc-frontend-scripts.php:320
+#: templates/single-product/add-to-cart/variation.php:31
msgid "Sorry, this product is unavailable. Please choose a different combination."
msgstr ""
@@ -14029,7 +13830,7 @@ msgstr ""
msgid "Premium Support"
msgstr ""
-#: includes/class-wc-order.php:41 includes/wc-cart-functions.php:252
+#: includes/class-wc-order.php:46
msgid "(Includes %s)"
msgstr ""
@@ -14117,6 +13918,10 @@ msgstr ""
msgid "No Product Tags found"
msgstr ""
+#: includes/class-wc-post-types.php:135 includes/class-wc-post-types.php:137
+msgid "Shipping Classes"
+msgstr ""
+
#: includes/class-wc-post-types.php:138
msgid "Shipping Class"
msgstr ""
@@ -14412,19 +14217,14 @@ msgstr[1] ""
msgid "Buy product"
msgstr ""
-#: includes/class-wc-product-simple.php:48
-#: includes/class-wc-product-variation.php:187
-msgid "Read More"
-msgstr ""
-
-#: includes/class-wc-product-variable.php:46
+#: includes/class-wc-product-variable.php:43
msgid "Select options"
msgstr ""
-#: includes/class-wc-product-variable.php:755
+#: includes/class-wc-product-variable.php:725
msgid ""
-"This variable product has no active variations so cannot be published. "
-"Changing status to draft."
+"This variable product has no active variations. Add or enable variations to "
+"allow this product to be purchased."
msgstr ""
#: includes/class-wc-product-variation.php:738
@@ -14436,13 +14236,9 @@ msgid "Pay for Order"
msgstr ""
#: includes/class-wc-query.php:116
-#: includes/gateways/simplify-commerce/class-wc-gateway-simplify-commerce.php:411
-#: templates/emails/admin-new-order.php:30
-#: templates/emails/customer-completed-order.php:30
-#: templates/emails/customer-invoice.php:34
-#: templates/emails/customer-note.php:34
-#: templates/emails/customer-processing-order.php:30
-#: templates/emails/customer-refunded-order.php:37
+#: includes/gateways/simplify-commerce/class-wc-gateway-simplify-commerce.php:405
+#: templates/emails/email-order-details.php:25
+#: templates/emails/email-order-details.php:27
msgid "Order #%s"
msgstr ""
@@ -14467,7 +14263,7 @@ msgstr ""
msgid "Invalid order \"%s\""
msgstr ""
-#: includes/cli/class-wc-cli-product-category.php:101
+#: includes/cli/class-wc-cli-product-category.php:102
msgid "Invalid product category ID \"%s\""
msgstr ""
@@ -14476,6 +14272,10 @@ msgstr ""
msgid "Invalid product \"%s\""
msgstr ""
+#: includes/cli/class-wc-cli-tax.php:300 includes/cli/class-wc-cli-tax.php:495
+msgid "Invalid tax rate ID: %s"
+msgstr ""
+
#: includes/emails/class-wc-email-cancelled-order.php:27
#: includes/emails/class-wc-email-cancelled-order.php:29
msgid "Cancelled order"
@@ -14491,12 +14291,12 @@ msgstr ""
msgid "[{site_title}] Cancelled order ({order_number})"
msgstr ""
-#: includes/emails/class-wc-email-cancelled-order.php:104
-#: includes/emails/class-wc-email-customer-completed-order.php:140
-#: includes/emails/class-wc-email-customer-refunded-order.php:176
-#: includes/emails/class-wc-email-failed-order.php:104
-#: includes/emails/class-wc-email-new-order.php:109
-#: includes/emails/class-wc-email.php:479
+#: includes/emails/class-wc-email-cancelled-order.php:101
+#: includes/emails/class-wc-email-customer-completed-order.php:137
+#: includes/emails/class-wc-email-customer-refunded-order.php:173
+#: includes/emails/class-wc-email-failed-order.php:101
+#: includes/emails/class-wc-email-new-order.php:106
+#: includes/emails/class-wc-email.php:481
#: includes/gateways/bacs/class-wc-gateway-bacs.php:74
#: includes/gateways/cheque/class-wc-gateway-cheque.php:54
#: includes/gateways/paypal/includes/settings-paypal.php:12
@@ -14506,71 +14306,71 @@ msgstr ""
msgid "Enable/Disable"
msgstr ""
-#: includes/emails/class-wc-email-cancelled-order.php:106
-#: includes/emails/class-wc-email-customer-completed-order.php:142
-#: includes/emails/class-wc-email-customer-refunded-order.php:178
-#: includes/emails/class-wc-email-failed-order.php:106
-#: includes/emails/class-wc-email-new-order.php:111
-#: includes/emails/class-wc-email.php:481
+#: includes/emails/class-wc-email-cancelled-order.php:103
+#: includes/emails/class-wc-email-customer-completed-order.php:139
+#: includes/emails/class-wc-email-customer-refunded-order.php:175
+#: includes/emails/class-wc-email-failed-order.php:103
+#: includes/emails/class-wc-email-new-order.php:108
+#: includes/emails/class-wc-email.php:483
msgid "Enable this email notification"
msgstr ""
-#: includes/emails/class-wc-email-cancelled-order.php:112
-#: includes/emails/class-wc-email-failed-order.php:112
-#: includes/emails/class-wc-email-new-order.php:117
+#: includes/emails/class-wc-email-cancelled-order.php:109
+#: includes/emails/class-wc-email-failed-order.php:109
+#: includes/emails/class-wc-email-new-order.php:114
msgid ""
"Enter recipients (comma separated) for this email. Defaults to "
"%s
."
msgstr ""
-#: includes/emails/class-wc-email-cancelled-order.php:118
-#: includes/emails/class-wc-email-customer-completed-order.php:146
-#: includes/emails/class-wc-email-failed-order.php:118
-#: includes/emails/class-wc-email-new-order.php:123
+#: includes/emails/class-wc-email-cancelled-order.php:115
+#: includes/emails/class-wc-email-customer-completed-order.php:143
+#: includes/emails/class-wc-email-failed-order.php:115
+#: includes/emails/class-wc-email-new-order.php:120
msgid "Subject"
msgstr ""
-#: includes/emails/class-wc-email-cancelled-order.php:120
-#: includes/emails/class-wc-email-failed-order.php:120
-#: includes/emails/class-wc-email-new-order.php:125
+#: includes/emails/class-wc-email-cancelled-order.php:117
+#: includes/emails/class-wc-email-failed-order.php:117
+#: includes/emails/class-wc-email-new-order.php:122
msgid ""
"This controls the email subject line. Leave blank to use the default "
"subject: %s
."
msgstr ""
-#: includes/emails/class-wc-email-cancelled-order.php:126
-#: includes/emails/class-wc-email-customer-completed-order.php:154
-#: includes/emails/class-wc-email-customer-invoice.php:156
-#: includes/emails/class-wc-email-failed-order.php:126
-#: includes/emails/class-wc-email-new-order.php:131
-#: includes/emails/class-wc-email.php:493
+#: includes/emails/class-wc-email-cancelled-order.php:123
+#: includes/emails/class-wc-email-customer-completed-order.php:151
+#: includes/emails/class-wc-email-customer-invoice.php:153
+#: includes/emails/class-wc-email-failed-order.php:123
+#: includes/emails/class-wc-email-new-order.php:128
+#: includes/emails/class-wc-email.php:495
msgid "Email Heading"
msgstr ""
-#: includes/emails/class-wc-email-cancelled-order.php:128
-#: includes/emails/class-wc-email-failed-order.php:128
-#: includes/emails/class-wc-email-new-order.php:133
+#: includes/emails/class-wc-email-cancelled-order.php:125
+#: includes/emails/class-wc-email-failed-order.php:125
+#: includes/emails/class-wc-email-new-order.php:130
msgid ""
"This controls the main heading contained within the email notification. "
"Leave blank to use the default heading: %s
."
msgstr ""
-#: includes/emails/class-wc-email-cancelled-order.php:134
-#: includes/emails/class-wc-email-customer-completed-order.php:178
-#: includes/emails/class-wc-email-customer-refunded-order.php:214
-#: includes/emails/class-wc-email-failed-order.php:134
-#: includes/emails/class-wc-email-new-order.php:139
-#: includes/emails/class-wc-email.php:501
+#: includes/emails/class-wc-email-cancelled-order.php:131
+#: includes/emails/class-wc-email-customer-completed-order.php:175
+#: includes/emails/class-wc-email-customer-refunded-order.php:211
+#: includes/emails/class-wc-email-failed-order.php:131
+#: includes/emails/class-wc-email-new-order.php:136
+#: includes/emails/class-wc-email.php:503
msgid "Email type"
msgstr ""
-#: includes/emails/class-wc-email-cancelled-order.php:136
-#: includes/emails/class-wc-email-customer-completed-order.php:180
-#: includes/emails/class-wc-email-customer-invoice.php:182
-#: includes/emails/class-wc-email-customer-refunded-order.php:216
-#: includes/emails/class-wc-email-failed-order.php:136
-#: includes/emails/class-wc-email-new-order.php:141
-#: includes/emails/class-wc-email.php:503
+#: includes/emails/class-wc-email-cancelled-order.php:133
+#: includes/emails/class-wc-email-customer-completed-order.php:177
+#: includes/emails/class-wc-email-customer-invoice.php:179
+#: includes/emails/class-wc-email-customer-refunded-order.php:213
+#: includes/emails/class-wc-email-failed-order.php:133
+#: includes/emails/class-wc-email-new-order.php:138
+#: includes/emails/class-wc-email.php:505
msgid "Choose which format of email to send."
msgstr ""
@@ -14600,28 +14400,28 @@ msgstr ""
msgid "Your {site_title} order from {order_date} is complete - download your files"
msgstr ""
-#: includes/emails/class-wc-email-customer-completed-order.php:148
-#: includes/emails/class-wc-email-customer-completed-order.php:156
-#: includes/emails/class-wc-email-customer-completed-order.php:164
-#: includes/emails/class-wc-email-customer-completed-order.php:172
-#: includes/emails/class-wc-email-customer-invoice.php:150
-#: includes/emails/class-wc-email-customer-invoice.php:158
-#: includes/emails/class-wc-email-customer-invoice.php:166
-#: includes/emails/class-wc-email-customer-invoice.php:174
-#: includes/emails/class-wc-email-customer-refunded-order.php:184
-#: includes/emails/class-wc-email-customer-refunded-order.php:192
-#: includes/emails/class-wc-email-customer-refunded-order.php:200
-#: includes/emails/class-wc-email-customer-refunded-order.php:208
-#: includes/emails/class-wc-email.php:487
-#: includes/emails/class-wc-email.php:495
+#: includes/emails/class-wc-email-customer-completed-order.php:145
+#: includes/emails/class-wc-email-customer-completed-order.php:153
+#: includes/emails/class-wc-email-customer-completed-order.php:161
+#: includes/emails/class-wc-email-customer-completed-order.php:169
+#: includes/emails/class-wc-email-customer-invoice.php:147
+#: includes/emails/class-wc-email-customer-invoice.php:155
+#: includes/emails/class-wc-email-customer-invoice.php:163
+#: includes/emails/class-wc-email-customer-invoice.php:171
+#: includes/emails/class-wc-email-customer-refunded-order.php:181
+#: includes/emails/class-wc-email-customer-refunded-order.php:189
+#: includes/emails/class-wc-email-customer-refunded-order.php:197
+#: includes/emails/class-wc-email-customer-refunded-order.php:205
+#: includes/emails/class-wc-email.php:489
+#: includes/emails/class-wc-email.php:497
msgid "Defaults to %s
"
msgstr ""
-#: includes/emails/class-wc-email-customer-completed-order.php:162
+#: includes/emails/class-wc-email-customer-completed-order.php:159
msgid "Subject (downloadable)"
msgstr ""
-#: includes/emails/class-wc-email-customer-completed-order.php:170
+#: includes/emails/class-wc-email-customer-completed-order.php:167
msgid "Email Heading (downloadable)"
msgstr ""
@@ -14651,20 +14451,20 @@ msgstr ""
msgid "Order {order_number} details"
msgstr ""
-#: includes/emails/class-wc-email-customer-invoice.php:148
-#: includes/emails/class-wc-email.php:485
+#: includes/emails/class-wc-email-customer-invoice.php:145
+#: includes/emails/class-wc-email.php:487
msgid "Email Subject"
msgstr ""
-#: includes/emails/class-wc-email-customer-invoice.php:164
+#: includes/emails/class-wc-email-customer-invoice.php:161
msgid "Email Subject (paid)"
msgstr ""
-#: includes/emails/class-wc-email-customer-invoice.php:172
+#: includes/emails/class-wc-email-customer-invoice.php:169
msgid "Email Heading (paid)"
msgstr ""
-#: includes/emails/class-wc-email-customer-invoice.php:180
+#: includes/emails/class-wc-email-customer-invoice.php:177
msgid "Email Type"
msgstr ""
@@ -14756,19 +14556,19 @@ msgid ""
"refunded."
msgstr ""
-#: includes/emails/class-wc-email-customer-refunded-order.php:182
+#: includes/emails/class-wc-email-customer-refunded-order.php:179
msgid "Full Refund Subject"
msgstr ""
-#: includes/emails/class-wc-email-customer-refunded-order.php:190
+#: includes/emails/class-wc-email-customer-refunded-order.php:187
msgid "Partial Refund Subject"
msgstr ""
-#: includes/emails/class-wc-email-customer-refunded-order.php:198
+#: includes/emails/class-wc-email-customer-refunded-order.php:195
msgid "Full Refund Email Heading"
msgstr ""
-#: includes/emails/class-wc-email-customer-refunded-order.php:206
+#: includes/emails/class-wc-email-customer-refunded-order.php:203
msgid "Partial Refund Email Heading"
msgstr ""
@@ -14823,71 +14623,71 @@ msgstr ""
msgid "[{site_title}] New customer order ({order_number}) - {order_date}"
msgstr ""
-#: includes/emails/class-wc-email.php:517
+#: includes/emails/class-wc-email.php:519
msgid "Plain text"
msgstr ""
-#: includes/emails/class-wc-email.php:520
+#: includes/emails/class-wc-email.php:522
msgid "HTML"
msgstr ""
-#: includes/emails/class-wc-email.php:521
+#: includes/emails/class-wc-email.php:523
msgid "Multipart"
msgstr ""
-#: includes/emails/class-wc-email.php:584
+#: includes/emails/class-wc-email.php:586
msgid "Could not write to template file."
msgstr ""
-#: includes/emails/class-wc-email.php:630
+#: includes/emails/class-wc-email.php:632
msgid "Template file copied to theme."
msgstr ""
-#: includes/emails/class-wc-email.php:659
+#: includes/emails/class-wc-email.php:661
msgid "Template file deleted from theme."
msgstr ""
-#: includes/emails/class-wc-email.php:732
+#: includes/emails/class-wc-email.php:734
msgid "HTML template"
msgstr ""
-#: includes/emails/class-wc-email.php:733
+#: includes/emails/class-wc-email.php:735
msgid "Plain text template"
msgstr ""
-#: includes/emails/class-wc-email.php:758
+#: includes/emails/class-wc-email.php:760
msgid "Delete template file"
msgstr ""
-#: includes/emails/class-wc-email.php:761
+#: includes/emails/class-wc-email.php:763
msgid ""
"This template has been overridden by your theme and can be found in: "
"%s
."
msgstr ""
-#: includes/emails/class-wc-email.php:774
+#: includes/emails/class-wc-email.php:776
msgid "Copy file to theme"
msgstr ""
-#: includes/emails/class-wc-email.php:777
+#: includes/emails/class-wc-email.php:779
msgid ""
"To override and edit this email template copy %s
to your theme "
"folder: %s
."
msgstr ""
-#: includes/emails/class-wc-email.php:786
+#: includes/emails/class-wc-email.php:788
msgid "File was not found."
msgstr ""
-#: includes/emails/class-wc-email.php:813
+#: includes/emails/class-wc-email.php:815
msgid "View template"
msgstr ""
-#: includes/emails/class-wc-email.php:814
+#: includes/emails/class-wc-email.php:816
msgid "Hide template"
msgstr ""
-#: includes/emails/class-wc-email.php:825
+#: includes/emails/class-wc-email.php:827
msgid "Are you sure you want to delete this template file?"
msgstr ""
@@ -15190,7 +14990,7 @@ msgid "Payment %s via IPN."
msgstr ""
#: includes/gateways/paypal/includes/class-wc-gateway-paypal-ipn-handler.php:246
-msgid "Payment for order #%s refunded/reversed"
+msgid "Payment for order %s refunded"
msgstr ""
#: includes/gateways/paypal/includes/class-wc-gateway-paypal-ipn-handler.php:247
@@ -15198,7 +14998,7 @@ msgid "Order #%s has been marked as refunded - PayPal reason code: %s"
msgstr ""
#: includes/gateways/paypal/includes/class-wc-gateway-paypal-ipn-handler.php:260
-msgid "Payment for order #%s reversed"
+msgid "Payment for order %s reversed"
msgstr ""
#: includes/gateways/paypal/includes/class-wc-gateway-paypal-ipn-handler.php:261
@@ -15399,88 +15199,88 @@ msgstr ""
msgid "API Signature"
msgstr ""
-#: includes/gateways/simplify-commerce/class-wc-addons-gateway-simplify-commerce.php:93
-#: includes/gateways/simplify-commerce/class-wc-addons-gateway-simplify-commerce.php:187
+#: includes/gateways/simplify-commerce/class-wc-addons-gateway-simplify-commerce.php:94
+#: includes/gateways/simplify-commerce/class-wc-addons-gateway-simplify-commerce.php:188
#: includes/gateways/simplify-commerce/class-wc-gateway-simplify-commerce.php:316
msgid ""
"Please make sure your card details have been entered correctly and that "
"your browser supports JavaScript."
msgstr ""
-#: includes/gateways/simplify-commerce/class-wc-addons-gateway-simplify-commerce.php:96
-#: includes/gateways/simplify-commerce/class-wc-addons-gateway-simplify-commerce.php:190
+#: includes/gateways/simplify-commerce/class-wc-addons-gateway-simplify-commerce.php:97
+#: includes/gateways/simplify-commerce/class-wc-addons-gateway-simplify-commerce.php:191
#: includes/gateways/simplify-commerce/class-wc-gateway-simplify-commerce.php:319
msgid ""
"Developers: Please make sure that you're including jQuery and there are no "
"JavaScript errors on the page."
msgstr ""
-#: includes/gateways/simplify-commerce/class-wc-addons-gateway-simplify-commerce.php:113
-#: includes/gateways/simplify-commerce/class-wc-addons-gateway-simplify-commerce.php:210
+#: includes/gateways/simplify-commerce/class-wc-addons-gateway-simplify-commerce.php:114
+#: includes/gateways/simplify-commerce/class-wc-addons-gateway-simplify-commerce.php:211
msgid "Error creating user in Simplify Commerce."
msgstr ""
-#: includes/gateways/simplify-commerce/class-wc-addons-gateway-simplify-commerce.php:181
-#: includes/gateways/simplify-commerce/class-wc-addons-gateway-simplify-commerce.php:291
+#: includes/gateways/simplify-commerce/class-wc-addons-gateway-simplify-commerce.php:182
+#: includes/gateways/simplify-commerce/class-wc-addons-gateway-simplify-commerce.php:292
#: includes/gateways/simplify-commerce-deprecated/class-wc-addons-gateway-simplify-commerce-deprecated.php:60
msgid "Sorry, the minimum allowed order total is 0.50 to use this payment method."
msgstr ""
-#: includes/gateways/simplify-commerce/class-wc-addons-gateway-simplify-commerce.php:297
-#: includes/gateways/simplify-commerce/class-wc-addons-gateway-simplify-commerce.php:439
+#: includes/gateways/simplify-commerce/class-wc-addons-gateway-simplify-commerce.php:298
+#: includes/gateways/simplify-commerce/class-wc-addons-gateway-simplify-commerce.php:435
#: includes/gateways/simplify-commerce-deprecated/class-wc-addons-gateway-simplify-commerce-deprecated.php:70
msgid "Customer not found"
msgstr ""
-#: includes/gateways/simplify-commerce/class-wc-addons-gateway-simplify-commerce.php:305
+#: includes/gateways/simplify-commerce/class-wc-addons-gateway-simplify-commerce.php:306
#: includes/gateways/simplify-commerce/class-wc-gateway-simplify-commerce.php:328
msgid "%s - Order #%s"
msgstr ""
-#: includes/gateways/simplify-commerce/class-wc-addons-gateway-simplify-commerce.php:327
+#: includes/gateways/simplify-commerce/class-wc-addons-gateway-simplify-commerce.php:322
#: includes/gateways/simplify-commerce-deprecated/class-wc-addons-gateway-simplify-commerce-deprecated.php:100
msgid "Simplify payment error: %s"
msgstr ""
-#: includes/gateways/simplify-commerce/class-wc-addons-gateway-simplify-commerce.php:337
-#: includes/gateways/simplify-commerce/class-wc-addons-gateway-simplify-commerce.php:462
-#: includes/gateways/simplify-commerce/class-wc-gateway-simplify-commerce.php:485
+#: includes/gateways/simplify-commerce/class-wc-addons-gateway-simplify-commerce.php:332
+#: includes/gateways/simplify-commerce/class-wc-addons-gateway-simplify-commerce.php:452
+#: includes/gateways/simplify-commerce/class-wc-gateway-simplify-commerce.php:484
#: includes/gateways/simplify-commerce-deprecated/class-wc-addons-gateway-simplify-commerce-deprecated.php:110
msgid "Simplify payment approved (ID: %s, Auth Code: %s)"
msgstr ""
-#: includes/gateways/simplify-commerce/class-wc-addons-gateway-simplify-commerce.php:341
-#: includes/gateways/simplify-commerce/class-wc-gateway-simplify-commerce.php:348
+#: includes/gateways/simplify-commerce/class-wc-addons-gateway-simplify-commerce.php:336
+#: includes/gateways/simplify-commerce/class-wc-gateway-simplify-commerce.php:342
#: includes/gateways/simplify-commerce-deprecated/class-wc-addons-gateway-simplify-commerce-deprecated.php:114
msgid "Simplify payment declined"
msgstr ""
-#: includes/gateways/simplify-commerce/class-wc-addons-gateway-simplify-commerce.php:343
-#: includes/gateways/simplify-commerce/class-wc-gateway-simplify-commerce.php:350
+#: includes/gateways/simplify-commerce/class-wc-addons-gateway-simplify-commerce.php:338
+#: includes/gateways/simplify-commerce/class-wc-gateway-simplify-commerce.php:344
#: includes/gateways/simplify-commerce-deprecated/class-wc-addons-gateway-simplify-commerce-deprecated.php:116
msgid "Payment was declined - please try another card."
msgstr ""
-#: includes/gateways/simplify-commerce/class-wc-addons-gateway-simplify-commerce.php:357
-#: includes/gateways/simplify-commerce/class-wc-addons-gateway-simplify-commerce.php:467
+#: includes/gateways/simplify-commerce/class-wc-addons-gateway-simplify-commerce.php:352
+#: includes/gateways/simplify-commerce/class-wc-addons-gateway-simplify-commerce.php:457
msgid "Simplify Transaction Failed (%s)"
msgstr ""
-#: includes/gateways/simplify-commerce/class-wc-addons-gateway-simplify-commerce.php:434
+#: includes/gateways/simplify-commerce/class-wc-addons-gateway-simplify-commerce.php:430
msgid "%s - Pre-order for \"%s\""
msgstr ""
-#: includes/gateways/simplify-commerce/class-wc-addons-gateway-simplify-commerce.php:434
+#: includes/gateways/simplify-commerce/class-wc-addons-gateway-simplify-commerce.php:430
#: includes/gateways/simplify-commerce-deprecated/class-wc-addons-gateway-simplify-commerce-deprecated.php:65
msgid "(Order #%s)"
msgstr ""
-#: includes/gateways/simplify-commerce/class-wc-addons-gateway-simplify-commerce.php:464
+#: includes/gateways/simplify-commerce/class-wc-addons-gateway-simplify-commerce.php:454
msgid "Payment was declined - the customer need to try another card."
msgstr ""
-#: includes/gateways/simplify-commerce/class-wc-addons-gateway-simplify-commerce.php:511
-#: includes/gateways/simplify-commerce/class-wc-gateway-simplify-commerce.php:457
+#: includes/gateways/simplify-commerce/class-wc-addons-gateway-simplify-commerce.php:501
+#: includes/gateways/simplify-commerce/class-wc-gateway-simplify-commerce.php:456
msgid "Payment was declined by Simplify Commerce."
msgstr ""
@@ -15620,21 +15420,21 @@ msgstr ""
msgid "is invalid"
msgstr ""
-#: includes/gateways/simplify-commerce/class-wc-gateway-simplify-commerce.php:428
+#: includes/gateways/simplify-commerce/class-wc-gateway-simplify-commerce.php:427
msgid ""
"Thank you for your order, please click the button below to pay with credit "
"card using Simplify Commerce by MasterCard."
msgstr ""
-#: includes/gateways/simplify-commerce/class-wc-gateway-simplify-commerce.php:437
+#: includes/gateways/simplify-commerce/class-wc-gateway-simplify-commerce.php:436
msgid "Pay Now"
msgstr ""
-#: includes/gateways/simplify-commerce/class-wc-gateway-simplify-commerce.php:437
+#: includes/gateways/simplify-commerce/class-wc-gateway-simplify-commerce.php:436
msgid "Cancel order & restore cart"
msgstr ""
-#: includes/gateways/simplify-commerce/class-wc-gateway-simplify-commerce.php:521
+#: includes/gateways/simplify-commerce/class-wc-gateway-simplify-commerce.php:520
msgid "Refund was declined."
msgstr ""
@@ -15843,11 +15643,11 @@ msgstr ""
#: includes/shipping/local-delivery/class-wc-shipping-local-delivery.php:123
#: includes/shipping/local-pickup/class-wc-shipping-local-pickup.php:79
-msgid "Allowed Zip/Post Codes"
+msgid "Allowed ZIP/Post Codes"
msgstr ""
#: includes/shipping/local-delivery/class-wc-shipping-local-delivery.php:125
-msgid "What zip/post codes are available for local delivery?"
+msgid "What ZIP/post codes are available for local delivery?"
msgstr ""
#: includes/shipping/local-delivery/class-wc-shipping-local-delivery.php:127
@@ -15869,7 +15669,7 @@ msgid "Enable local pickup"
msgstr ""
#: includes/shipping/local-pickup/class-wc-shipping-local-pickup.php:81
-msgid "What zip/post codes are available for local pickup?"
+msgid "What ZIP/post codes are available for local pickup?"
msgstr ""
#: includes/shortcodes/class-wc-shortcode-cart.php:42
@@ -15966,15 +15766,15 @@ msgid "Sorry, we could not find that order ID in our database."
msgstr ""
#: includes/updates/woocommerce-update-2.4.php:171
-#: includes/wc-order-functions.php:785
+#: includes/wc-order-functions.php:789
msgid "Order Fully Refunded"
msgstr ""
-#: includes/wc-attribute-functions.php:122
+#: includes/wc-attribute-functions.php:143
msgid "Select"
msgstr ""
-#: includes/wc-attribute-functions.php:123
+#: includes/wc-attribute-functions.php:144
msgid "Text"
msgstr ""
@@ -16008,6 +15808,14 @@ msgstr ""
msgid "[Remove]"
msgstr ""
+#: includes/wc-cart-functions.php:253 templates/cart/cart-totals.php:69
+msgid "estimated for %s"
+msgstr ""
+
+#: includes/wc-cart-functions.php:255
+msgid "(includes %s%s)"
+msgstr ""
+
#: includes/wc-core-functions.php:79
msgid "Order – %s"
msgstr ""
@@ -16020,195 +15828,195 @@ msgstr ""
msgid "Invalid order ID"
msgstr ""
-#: includes/wc-core-functions.php:261
+#: includes/wc-core-functions.php:272
msgid "United Arab Emirates Dirham"
msgstr ""
-#: includes/wc-core-functions.php:262
+#: includes/wc-core-functions.php:273
msgid "Argentine Peso"
msgstr ""
-#: includes/wc-core-functions.php:263
+#: includes/wc-core-functions.php:274
msgid "Australian Dollars"
msgstr ""
-#: includes/wc-core-functions.php:264
+#: includes/wc-core-functions.php:275
msgid "Bangladeshi Taka"
msgstr ""
-#: includes/wc-core-functions.php:265
+#: includes/wc-core-functions.php:276
msgid "Bulgarian Lev"
msgstr ""
-#: includes/wc-core-functions.php:266
+#: includes/wc-core-functions.php:277
msgid "Brazilian Real"
msgstr ""
-#: includes/wc-core-functions.php:267
+#: includes/wc-core-functions.php:278
msgid "Canadian Dollars"
msgstr ""
-#: includes/wc-core-functions.php:268
+#: includes/wc-core-functions.php:279
msgid "Swiss Franc"
msgstr ""
-#: includes/wc-core-functions.php:269
+#: includes/wc-core-functions.php:280
msgid "Chilean Peso"
msgstr ""
-#: includes/wc-core-functions.php:270
+#: includes/wc-core-functions.php:281
msgid "Chinese Yuan"
msgstr ""
-#: includes/wc-core-functions.php:271
+#: includes/wc-core-functions.php:282
msgid "Colombian Peso"
msgstr ""
-#: includes/wc-core-functions.php:272
+#: includes/wc-core-functions.php:283
msgid "Czech Koruna"
msgstr ""
-#: includes/wc-core-functions.php:273
+#: includes/wc-core-functions.php:284
msgid "Danish Krone"
msgstr ""
-#: includes/wc-core-functions.php:274
+#: includes/wc-core-functions.php:285
msgid "Dominican Peso"
msgstr ""
-#: includes/wc-core-functions.php:275
+#: includes/wc-core-functions.php:286
msgid "Egyptian Pound"
msgstr ""
-#: includes/wc-core-functions.php:276
+#: includes/wc-core-functions.php:287
msgid "Euros"
msgstr ""
-#: includes/wc-core-functions.php:277
+#: includes/wc-core-functions.php:288
msgid "Pounds Sterling"
msgstr ""
-#: includes/wc-core-functions.php:278
+#: includes/wc-core-functions.php:289
msgid "Hong Kong Dollar"
msgstr ""
-#: includes/wc-core-functions.php:279
+#: includes/wc-core-functions.php:290
msgid "Croatia kuna"
msgstr ""
-#: includes/wc-core-functions.php:280
+#: includes/wc-core-functions.php:291
msgid "Hungarian Forint"
msgstr ""
-#: includes/wc-core-functions.php:281
+#: includes/wc-core-functions.php:292
msgid "Indonesia Rupiah"
msgstr ""
-#: includes/wc-core-functions.php:282
+#: includes/wc-core-functions.php:293
msgid "Israeli Shekel"
msgstr ""
-#: includes/wc-core-functions.php:283
+#: includes/wc-core-functions.php:294
msgid "Indian Rupee"
msgstr ""
-#: includes/wc-core-functions.php:284
+#: includes/wc-core-functions.php:295
msgid "Icelandic krona"
msgstr ""
-#: includes/wc-core-functions.php:285
+#: includes/wc-core-functions.php:296
msgid "Japanese Yen"
msgstr ""
-#: includes/wc-core-functions.php:286
+#: includes/wc-core-functions.php:297
msgid "Lao Kip"
msgstr ""
-#: includes/wc-core-functions.php:287
+#: includes/wc-core-functions.php:298
msgid "South Korean Won"
msgstr ""
-#: includes/wc-core-functions.php:288
+#: includes/wc-core-functions.php:299
msgid "Mexican Peso"
msgstr ""
-#: includes/wc-core-functions.php:289
+#: includes/wc-core-functions.php:300
msgid "Malaysian Ringgits"
msgstr ""
-#: includes/wc-core-functions.php:290
+#: includes/wc-core-functions.php:301
msgid "Nigerian Naira"
msgstr ""
-#: includes/wc-core-functions.php:291
+#: includes/wc-core-functions.php:302
msgid "Norwegian Krone"
msgstr ""
-#: includes/wc-core-functions.php:292
+#: includes/wc-core-functions.php:303
msgid "Nepali Rupee"
msgstr ""
-#: includes/wc-core-functions.php:293
+#: includes/wc-core-functions.php:304
msgid "New Zealand Dollar"
msgstr ""
-#: includes/wc-core-functions.php:294
+#: includes/wc-core-functions.php:305
msgid "Philippine Pesos"
msgstr ""
-#: includes/wc-core-functions.php:295
+#: includes/wc-core-functions.php:306
msgid "Pakistani Rupee"
msgstr ""
-#: includes/wc-core-functions.php:296
+#: includes/wc-core-functions.php:307
msgid "Polish Zloty"
msgstr ""
-#: includes/wc-core-functions.php:297
+#: includes/wc-core-functions.php:308
msgid "Paraguayan Guaraní"
msgstr ""
-#: includes/wc-core-functions.php:298
+#: includes/wc-core-functions.php:309
msgid "Romanian Leu"
msgstr ""
-#: includes/wc-core-functions.php:299
+#: includes/wc-core-functions.php:310
msgid "Russian Ruble"
msgstr ""
-#: includes/wc-core-functions.php:300
+#: includes/wc-core-functions.php:311
msgid "Swedish Krona"
msgstr ""
-#: includes/wc-core-functions.php:301
+#: includes/wc-core-functions.php:312
msgid "Singapore Dollar"
msgstr ""
-#: includes/wc-core-functions.php:302
+#: includes/wc-core-functions.php:313
msgid "Thai Baht"
msgstr ""
-#: includes/wc-core-functions.php:303
+#: includes/wc-core-functions.php:314
msgid "Turkish Lira"
msgstr ""
-#: includes/wc-core-functions.php:304
+#: includes/wc-core-functions.php:315
msgid "Taiwan New Dollars"
msgstr ""
-#: includes/wc-core-functions.php:305
+#: includes/wc-core-functions.php:316
msgid "Ukrainian Hryvnia"
msgstr ""
-#: includes/wc-core-functions.php:306
+#: includes/wc-core-functions.php:317
msgid "US Dollars"
msgstr ""
-#: includes/wc-core-functions.php:307
+#: includes/wc-core-functions.php:318
msgid "Vietnamese Dong"
msgstr ""
-#: includes/wc-core-functions.php:308
+#: includes/wc-core-functions.php:319
msgid "South African rand"
msgstr ""
@@ -16250,7 +16058,7 @@ msgstr ""
msgid "Unpaid order cancelled - time limit reached."
msgstr ""
-#: includes/wc-order-functions.php:629
+#: includes/wc-order-functions.php:633
msgid "Refund – %s"
msgstr ""
@@ -16266,69 +16074,69 @@ msgstr ""
msgid "New products tagged %s"
msgstr ""
-#: includes/wc-template-functions.php:453
+#: includes/wc-template-functions.php:457
msgid "Search Results: “%s”"
msgstr ""
-#: includes/wc-template-functions.php:456
+#: includes/wc-template-functions.php:460
msgid " – Page %s"
msgstr ""
-#: includes/wc-template-functions.php:738
+#: includes/wc-template-functions.php:758
msgid "Default sorting"
msgstr ""
-#: includes/wc-template-functions.php:739
+#: includes/wc-template-functions.php:759
msgid "Sort by popularity"
msgstr ""
-#: includes/wc-template-functions.php:740
+#: includes/wc-template-functions.php:760
msgid "Sort by average rating"
msgstr ""
-#: includes/wc-template-functions.php:741
+#: includes/wc-template-functions.php:761
msgid "Sort by newness"
msgstr ""
-#: includes/wc-template-functions.php:742
+#: includes/wc-template-functions.php:762
msgid "Sort by price: low to high"
msgstr ""
-#: includes/wc-template-functions.php:743
+#: includes/wc-template-functions.php:763
msgid "Sort by price: high to low"
msgstr ""
-#: includes/wc-template-functions.php:1060
+#: includes/wc-template-functions.php:1092
#: templates/checkout/form-shipping.php:66
#: templates/single-product/tabs/additional-information.php:24
msgid "Additional Information"
msgstr ""
-#: includes/wc-template-functions.php:1069
+#: includes/wc-template-functions.php:1101
msgid "Reviews (%d)"
msgstr ""
-#: includes/wc-template-functions.php:1153
+#: includes/wc-template-functions.php:1185
msgid ""
"Use $args argument as an array instead. Deprecated argument will be removed "
"in WC 2.2."
msgstr ""
-#: includes/wc-template-functions.php:1366
+#: includes/wc-template-functions.php:1398
msgid "Place order"
msgstr ""
-#: includes/wc-template-functions.php:1733
+#: includes/wc-template-functions.php:1762
msgid "Update country"
msgstr ""
-#: includes/wc-template-functions.php:1754
+#: includes/wc-template-functions.php:1783
#: templates/cart/shipping-calculator.php:62
msgid "Select a state…"
msgstr ""
-#: includes/wc-template-functions.php:1810
-#: includes/wc-template-functions.php:1957
+#: includes/wc-template-functions.php:1839
+#: includes/wc-template-functions.php:1986
msgid "Choose an option"
msgstr ""
@@ -16665,11 +16473,11 @@ msgstr ""
msgid "Application Authentication Request"
msgstr ""
-#: templates/cart/cart-empty.php:26
+#: templates/cart/cart-empty.php:27
msgid "Your cart is currently empty."
msgstr ""
-#: templates/cart/cart-empty.php:30
+#: templates/cart/cart-empty.php:34
msgid "Return To Shop"
msgstr ""
@@ -16696,25 +16504,8 @@ msgstr ""
msgid "Subtotal"
msgstr ""
-#: templates/cart/cart-totals.php:98
-msgid " (taxes estimated for %s)"
-msgstr ""
-
-#: templates/cart/cart-totals.php:101
-msgid ""
-"Note: Shipping and taxes are estimated%s and will be updated during "
-"checkout based on your billing and shipping information."
-msgstr ""
-
#: templates/cart/cart.php:37 templates/cart/cart.php:101
-#: templates/emails/admin-cancelled-order.php:31
-#: templates/emails/admin-failed-order.php:31
-#: templates/emails/admin-new-order.php:36
-#: templates/emails/customer-completed-order.php:36
-#: templates/emails/customer-invoice.php:40
-#: templates/emails/customer-note.php:40
-#: templates/emails/customer-processing-order.php:36
-#: templates/emails/customer-refunded-order.php:43
+#: templates/emails/email-order-details.php:34
msgid "Quantity"
msgstr ""
@@ -16742,7 +16533,7 @@ msgstr ""
msgid "Checkout"
msgstr ""
-#: templates/cart/proceed-to-checkout-button.php:24
+#: templates/cart/proceed-to-checkout-button.php:26
msgid "Proceed to Checkout"
msgstr ""
@@ -16815,7 +16606,7 @@ msgid ""
"Shipping section."
msgstr ""
-#: templates/checkout/form-pay.php:65
+#: templates/checkout/form-pay.php:68
msgid ""
"Sorry, it seems that there are no available payment methods for your "
"location. Please contact us if you require assistance or wish to make "
@@ -16849,7 +16640,7 @@ msgstr ""
msgid "Update totals"
msgstr ""
-#: templates/checkout/terms.php:15
+#: templates/checkout/terms.php:16
msgid ""
"I’ve read and accept the terms & "
"conditions"
@@ -16866,26 +16657,21 @@ msgstr ""
msgid "Thank you. Your order has been received."
msgstr ""
-#: templates/emails/admin-cancelled-order.php:21
-#: templates/emails/plain/admin-cancelled-order.php:23
+#: templates/emails/admin-cancelled-order.php:27
+#: templates/emails/plain/admin-cancelled-order.php:24
msgid "The order #%d from %s has been cancelled. The order was as follows:"
msgstr ""
-#: templates/emails/admin-cancelled-order.php:25
-#: templates/emails/admin-failed-order.php:25
-msgid "Order: %s"
-msgstr ""
-
-#: templates/emails/admin-failed-order.php:21
-#: templates/emails/plain/admin-failed-order.php:23
+#: templates/emails/admin-failed-order.php:27
+#: templates/emails/plain/admin-failed-order.php:24
msgid "Payment for order #%d from %s has failed. The order was as follows:"
msgstr ""
-#: templates/emails/admin-new-order.php:26
+#: templates/emails/admin-new-order.php:27
msgid "You have received an order from %s. The order is as follows:"
msgstr ""
-#: templates/emails/customer-completed-order.php:26
+#: templates/emails/customer-completed-order.php:27
#: templates/emails/plain/customer-completed-order.php:24
msgid ""
"Hi there. Your recent order on %s has been completed. Your order details "
@@ -16919,36 +16705,31 @@ msgid ""
"password here: %s."
msgstr ""
-#: templates/emails/customer-note.php:26
+#: templates/emails/customer-note.php:27
#: templates/emails/plain/customer-note.php:24
msgid "Hello, a note has just been added to your order:"
msgstr ""
-#: templates/emails/customer-note.php:30
+#: templates/emails/customer-note.php:31
#: templates/emails/plain/customer-note.php:32
msgid "For your reference, your order details are shown below."
msgstr ""
-#: templates/emails/customer-processing-order.php:26
+#: templates/emails/customer-processing-order.php:27
#: templates/emails/plain/customer-processing-order.php:24
msgid ""
"Your order has been received and is now being processed. Your order details "
"are shown below for your reference:"
msgstr ""
-#: templates/emails/customer-refunded-order.php:28
+#: templates/emails/customer-refunded-order.php:29
msgid "Hi there. Your order on %s has been partially refunded."
msgstr ""
-#: templates/emails/customer-refunded-order.php:31
+#: templates/emails/customer-refunded-order.php:32
msgid "Hi there. Your order on %s has been refunded."
msgstr ""
-#: templates/emails/customer-refunded-order.php:58
-#: templates/emails/plain/customer-refunded-order.php:40
-msgid "Amount Refunded"
-msgstr ""
-
#: templates/emails/customer-reset-password.php:26
#: templates/emails/plain/customer-reset-password.php:24
msgid "Someone requested that the password be reset for the following account:"
@@ -16988,34 +16769,6 @@ msgstr ""
msgid "Customer details"
msgstr ""
-#: templates/emails/plain/admin-cancelled-order.php:29
-#: templates/emails/plain/admin-failed-order.php:29
-#: templates/emails/plain/admin-new-order.php:30
-#: templates/emails/plain/customer-completed-order.php:30
-#: templates/emails/plain/customer-invoice.php:31
-#: templates/emails/plain/customer-note.php:38
-#: templates/emails/plain/customer-processing-order.php:30
-#: templates/emails/plain/customer-refunded-order.php:30
-msgid "Order number: %s"
-msgstr ""
-
-#: templates/emails/plain/admin-cancelled-order.php:30
-#: templates/emails/plain/admin-failed-order.php:30
-#: templates/emails/plain/admin-new-order.php:31
-#: templates/emails/plain/customer-completed-order.php:31
-#: templates/emails/plain/customer-invoice.php:32
-#: templates/emails/plain/customer-note.php:39
-#: templates/emails/plain/customer-processing-order.php:31
-#: templates/emails/plain/customer-refunded-order.php:31
-msgid "jS F Y"
-msgstr ""
-
-#: templates/emails/plain/admin-cancelled-order.php:44
-#: templates/emails/plain/admin-failed-order.php:44
-#: templates/emails/plain/admin-new-order.php:45
-msgid "View order: %s"
-msgstr ""
-
#: templates/emails/plain/admin-new-order.php:24
msgid "You have received an order from %s."
msgstr ""
@@ -17030,6 +16783,18 @@ msgid ""
"below for your reference:"
msgstr ""
+#: templates/emails/plain/email-order-details.php:24
+msgid "Order number: %s"
+msgstr ""
+
+#: templates/emails/plain/email-order-details.php:25
+msgid "jS F Y"
+msgstr ""
+
+#: templates/emails/plain/email-order-details.php:42
+msgid "View order: %s"
+msgstr ""
+
#: templates/emails/plain/email-order-items.php:43
msgid "Quantity: %s"
msgstr ""
@@ -17173,15 +16938,11 @@ msgid_plural "%s downloads remaining"
msgstr[0] ""
msgstr[1] ""
-#: templates/myaccount/my-orders.php:34
+#: templates/myaccount/my-orders.php:42
msgid "Recent Orders"
msgstr ""
-#: templates/myaccount/my-orders.php:55
-msgid "Order Number"
-msgstr ""
-
-#: templates/myaccount/my-orders.php:67
+#: templates/myaccount/my-orders.php:77
msgid "%s for %s item"
msgid_plural "%s for %s items"
msgstr[0] ""
@@ -17348,7 +17109,7 @@ msgid "Add a review"
msgstr ""
#: templates/single-product-reviews.php:68
-msgid "Be the first to review"
+msgid "Be the first to review “%s”"
msgstr ""
#: templates/single-product-reviews.php:69
@@ -17428,7 +17189,7 @@ msgctxt "full name"
msgid "%1$s %2$s"
msgstr ""
-#: includes/abstracts/abstract-wc-product.php:1010
+#: includes/abstracts/abstract-wc-product.php:1027
msgctxt "min_price"
msgid "From:"
msgstr ""
@@ -17441,89 +17202,89 @@ msgstr ""
#: includes/admin/class-wc-admin-assets.php:114
#: includes/admin/class-wc-admin-setup-wizard.php:96
-#: includes/class-wc-frontend-scripts.php:324
+#: includes/class-wc-frontend-scripts.php:327
msgctxt "enhanced select"
msgid "One result is available, press enter to select it."
msgstr ""
#: includes/admin/class-wc-admin-assets.php:115
#: includes/admin/class-wc-admin-setup-wizard.php:97
-#: includes/class-wc-frontend-scripts.php:325
+#: includes/class-wc-frontend-scripts.php:328
msgctxt "enhanced select"
msgid "%qty% results are available, use up and down arrow keys to navigate."
msgstr ""
#: includes/admin/class-wc-admin-assets.php:116
#: includes/admin/class-wc-admin-setup-wizard.php:98
-#: includes/class-wc-frontend-scripts.php:326
+#: includes/class-wc-frontend-scripts.php:329
msgctxt "enhanced select"
msgid "No matches found"
msgstr ""
#: includes/admin/class-wc-admin-assets.php:117
#: includes/admin/class-wc-admin-setup-wizard.php:99
-#: includes/class-wc-frontend-scripts.php:327
+#: includes/class-wc-frontend-scripts.php:330
msgctxt "enhanced select"
msgid "Loading failed"
msgstr ""
#: includes/admin/class-wc-admin-assets.php:118
#: includes/admin/class-wc-admin-setup-wizard.php:100
-#: includes/class-wc-frontend-scripts.php:328
+#: includes/class-wc-frontend-scripts.php:331
msgctxt "enhanced select"
msgid "Please enter 1 or more characters"
msgstr ""
#: includes/admin/class-wc-admin-assets.php:119
#: includes/admin/class-wc-admin-setup-wizard.php:101
-#: includes/class-wc-frontend-scripts.php:329
+#: includes/class-wc-frontend-scripts.php:332
msgctxt "enhanced select"
msgid "Please enter %qty% or more characters"
msgstr ""
#: includes/admin/class-wc-admin-assets.php:120
#: includes/admin/class-wc-admin-setup-wizard.php:102
-#: includes/class-wc-frontend-scripts.php:330
+#: includes/class-wc-frontend-scripts.php:333
msgctxt "enhanced select"
msgid "Please delete 1 character"
msgstr ""
#: includes/admin/class-wc-admin-assets.php:121
#: includes/admin/class-wc-admin-setup-wizard.php:103
-#: includes/class-wc-frontend-scripts.php:331
+#: includes/class-wc-frontend-scripts.php:334
msgctxt "enhanced select"
msgid "Please delete %qty% characters"
msgstr ""
#: includes/admin/class-wc-admin-assets.php:122
#: includes/admin/class-wc-admin-setup-wizard.php:104
-#: includes/class-wc-frontend-scripts.php:332
+#: includes/class-wc-frontend-scripts.php:335
msgctxt "enhanced select"
msgid "You can only select 1 item"
msgstr ""
#: includes/admin/class-wc-admin-assets.php:123
#: includes/admin/class-wc-admin-setup-wizard.php:105
-#: includes/class-wc-frontend-scripts.php:333
+#: includes/class-wc-frontend-scripts.php:336
msgctxt "enhanced select"
msgid "You can only select %qty% items"
msgstr ""
#: includes/admin/class-wc-admin-assets.php:124
#: includes/admin/class-wc-admin-setup-wizard.php:106
-#: includes/class-wc-frontend-scripts.php:334
+#: includes/class-wc-frontend-scripts.php:337
msgctxt "enhanced select"
msgid "Loading more results…"
msgstr ""
#: includes/admin/class-wc-admin-assets.php:125
#: includes/admin/class-wc-admin-setup-wizard.php:107
-#: includes/class-wc-frontend-scripts.php:335
+#: includes/class-wc-frontend-scripts.php:338
msgctxt "enhanced select"
msgid "Searching…"
msgstr ""
-#: includes/admin/class-wc-admin-menus.php:149
+#: includes/admin/class-wc-admin-menus.php:142
#: includes/class-wc-post-types.php:303
msgctxt "Admin menu name"
msgid "Orders"
@@ -17576,12 +17337,12 @@ msgstr ""
#: includes/admin/class-wc-admin-permalink-settings.php:196
#: includes/class-wc-post-types.php:231
#: includes/updates/woocommerce-update-2.0.php:55
-#: includes/wc-core-functions.php:621 includes/wc-core-functions.php:656
+#: includes/wc-core-functions.php:630 includes/wc-core-functions.php:665
msgctxt "slug"
msgid "product"
msgstr ""
-#: includes/wc-product-functions.php:230
+#: includes/wc-product-functions.php:236
msgctxt "slug"
msgid "uncategorized"
msgstr ""
@@ -17634,7 +17395,7 @@ msgstr[0] ""
msgstr[1] ""
#: includes/admin/class-wc-admin-webhooks.php:49
-#: includes/admin/class-wc-admin-webhooks.php:187
+#: includes/admin/class-wc-admin-webhooks.php:195
#: includes/admin/settings/views/html-webhooks-edit.php:16
#: includes/api/class-wc-api-webhooks.php:197
#: includes/api/v2/class-wc-api-webhooks.php:197
@@ -17675,27 +17436,27 @@ msgctxt "placeholder"
msgid "To…"
msgstr ""
-#: includes/class-wc-checkout.php:103
+#: includes/class-wc-checkout.php:108
msgctxt "placeholder"
msgid "Username"
msgstr ""
-#: includes/class-wc-checkout.php:112
+#: includes/class-wc-checkout.php:117
msgctxt "placeholder"
msgid "Password"
msgstr ""
-#: includes/class-wc-checkout.php:121
+#: includes/class-wc-checkout.php:126
msgctxt "placeholder"
msgid "Notes about your order, e.g. special notes for delivery."
msgstr ""
-#: includes/class-wc-countries.php:510
+#: includes/class-wc-countries.php:514
msgctxt "placeholder"
msgid "Street address"
msgstr ""
-#: includes/class-wc-countries.php:515
+#: includes/class-wc-countries.php:519
msgctxt "placeholder"
msgid "Apartment, suite, unit etc. (optional)"
msgstr ""
@@ -17740,7 +17501,7 @@ msgid "by"
msgstr ""
#: includes/admin/reports/class-wc-report-customer-list.php:146
-#: templates/myaccount/my-orders.php:57
+#: templates/myaccount/my-orders.php:67
msgctxt "hash before order number"
msgid "#"
msgstr ""
@@ -17772,37 +17533,37 @@ msgctxt "Pagination, like `1 of 3`"
msgid "%1$s of %2$s"
msgstr ""
-#: includes/admin/views/html-admin-page-status-report.php:367
+#: includes/admin/views/html-admin-page-status-report.php:372
msgctxt "Version info"
msgid "%s is available"
msgstr ""
-#: includes/admin/views/html-admin-page-status-report.php:379
+#: includes/admin/views/html-admin-page-status-report.php:384
msgctxt "by author"
msgid "by %s"
msgstr ""
-#: includes/admin/views/html-admin-page-status-report.php:454
+#: includes/admin/views/html-admin-page-status-report.php:459
msgctxt "Page setting"
msgid "Shop Base"
msgstr ""
-#: includes/admin/views/html-admin-page-status-report.php:459
+#: includes/admin/views/html-admin-page-status-report.php:464
msgctxt "Page setting"
msgid "Cart"
msgstr ""
-#: includes/admin/views/html-admin-page-status-report.php:464
+#: includes/admin/views/html-admin-page-status-report.php:469
msgctxt "Page setting"
msgid "Checkout"
msgstr ""
-#: includes/admin/views/html-admin-page-status-report.php:469
+#: includes/admin/views/html-admin-page-status-report.php:474
msgctxt "Page setting"
msgid "My Account"
msgstr ""
-#: includes/admin/views/html-admin-page-status-report.php:483
+#: includes/admin/views/html-admin-page-status-report.php:488
msgctxt "WC Pages links in the System Status"
msgid "Edit %s page"
msgstr ""
@@ -17867,9 +17628,9 @@ msgctxt "Order status"
msgid "Failed"
msgstr ""
-#: includes/class-wc-product-grouped.php:193
-#: includes/class-wc-product-variable.php:374
-#: includes/class-wc-product-variable.php:380
+#: includes/class-wc-product-grouped.php:156
+#: includes/class-wc-product-variable.php:342
+#: includes/class-wc-product-variable.php:348
msgctxt "Price range: from-to"
msgid "%1$s–%2$s"
msgstr ""
@@ -17879,22 +17640,22 @@ msgctxt "Item name in quotes"
msgid "“%s”"
msgstr ""
-#: includes/wc-core-functions.php:79 includes/wc-order-functions.php:629
+#: includes/wc-core-functions.php:79 includes/wc-order-functions.php:633
msgctxt "Order date parsed by strftime"
msgid "%b %d, %Y @ %I:%M %p"
msgstr ""
-#: includes/wc-page-functions.php:112
+#: includes/wc-page-functions.php:116
msgctxt "edit-address-slug"
msgid "billing"
msgstr ""
-#: includes/wc-page-functions.php:113
+#: includes/wc-page-functions.php:117
msgctxt "edit-address-slug"
msgid "shipping"
msgstr ""
-#: includes/wc-template-functions.php:1321
+#: includes/wc-template-functions.php:1353
msgctxt "breadcrumb"
msgid "Home"
msgstr ""
diff --git a/includes/abstracts/abstract-wc-order.php b/includes/abstracts/abstract-wc-order.php
index c97fdc5b995..7e6fba0ca4c 100644
--- a/includes/abstracts/abstract-wc-order.php
+++ b/includes/abstracts/abstract-wc-order.php
@@ -1206,6 +1206,12 @@ abstract class WC_Abstract_Order {
return apply_filters( 'woocommerce_get_item_count', $count, $item_type, $this );
}
+ /**
+ * Get refunds
+ * @return array
+ */
+ public function get_refunds() { return array(); }
+
/**
* Return an array of fees within this order.
*
@@ -1311,16 +1317,8 @@ abstract class WC_Abstract_Order {
public function get_item_meta_array( $order_item_id ) {
global $wpdb;
- // Get cache key - uses cache key wc_orders_cache_prefix to invalidate when needed
- $prefix_num = wp_cache_get( 'wc_orders_cache_prefix', 'orders' );
-
- if ( $prefix_num === false ) {
- $prefix_num = 1;
- wp_cache_set( 'wc_orders_cache_prefix', $prefix_num, 'orders' );
- }
-
- $cache_prefix = 'wc_orders_cache_' . $prefix_num . '_';
- $cache_key = $cache_prefix . 'item_meta_array_' . $order_item_id;
+ // Get cache key - uses get_cache_prefix to invalidate when needed
+ $cache_key = WC_Cache_Helper::get_cache_prefix( 'orders' ) . 'item_meta_array_' . $order_item_id;
$item_meta_array = wp_cache_get( $cache_key, 'orders' );
if ( false === $item_meta_array ) {
@@ -1853,8 +1851,7 @@ abstract class WC_Abstract_Order {
);
}
- if ( $fees = $this->get_fees() )
-
+ if ( $fees = $this->get_fees() ) {
foreach ( $fees as $id => $fee ) {
if ( apply_filters( 'woocommerce_get_order_item_totals_excl_free_fees', $fee['line_total'] + $fee['line_tax'] == 0, $id ) ) {
@@ -1876,9 +1873,10 @@ abstract class WC_Abstract_Order {
);
}
}
+ }
// Tax for tax exclusive prices.
- if ( 'excl' == $tax_display ) {
+ if ( 'excl' === $tax_display ) {
if ( get_option( 'woocommerce_tax_total_display' ) == 'itemized' ) {
@@ -1906,6 +1904,15 @@ abstract class WC_Abstract_Order {
);
}
+ if ( $refunds = $this->get_refunds() ) {
+ foreach ( $refunds as $id => $refund ) {
+ $total_rows[ 'refund_' . $id ] = array(
+ 'label' => $refund->get_refund_reason() ? $refund->get_refund_reason() : __( 'Refund', 'woocommerce' ) . ':',
+ 'value' => wc_price( '-' . $refund->get_refund_amount(), array( 'currency' => $this->get_order_currency() ) )
+ );
+ }
+ }
+
$total_rows['order_total'] = array(
'label' => __( 'Total:', 'woocommerce' ),
'value' => $this->get_formatted_order_total( $tax_display )
@@ -1917,33 +1924,49 @@ abstract class WC_Abstract_Order {
/**
* Output items for display in html emails.
- *
- * @param bool $show_download_links (default: false).
- * @param bool $show_sku (default: false).
- * @param bool $show_purchase_note (default: false).
- * @param bool $show_image (default: false).
- * @param array $image_size (default: array( 32, 32 ).
+ * @param array $args
* @param bool plain text
* @return string
*/
- public function email_order_items_table( $show_download_links = false, $show_sku = false, $show_purchase_note = false, $show_image = false, $image_size = array( 32, 32 ), $plain_text = false ) {
-
+ public function email_order_items_table( $args = array(), $deprecated = null, $deprecated = null, $deprecated = null, $deprecated = null, $deprecated = null ) {
ob_start();
- $template = $plain_text ? 'emails/plain/email-order-items.php' : 'emails/email-order-items.php';
+ if ( ! is_null( $deprecated ) ) {
+ _deprecated_argument( __FUNCTION__, '2.5.0' );
+ }
+
+ $defaults = array(
+ 'show_sku' => false,
+ 'show_image' => false,
+ 'image_size' => array( 32, 32 ),
+ 'plain_text' => false
+ );
+
+ $args = wp_parse_args( $args, $defaults );
+ $template = $args['plain_text'] ? 'emails/plain/email-order-items.php' : 'emails/email-order-items.php';
wc_get_template( $template, array(
- 'order' => $this,
- 'items' => $this->get_items(),
- 'show_download_links' => $show_download_links,
- 'show_sku' => $show_sku,
- 'show_purchase_note' => $show_purchase_note,
- 'show_image' => $show_image,
- 'image_size' => $image_size
+ 'order' => $this,
+ 'items' => $this->get_items(),
+ 'show_download_links' => $this->is_download_permitted(),
+ 'show_sku' => $args['show_sku'],
+ 'show_purchase_note' => $this->is_paid(),
+ 'show_image' => $args['show_image'],
+ 'image_size' => $args['image_size'],
) );
+
return apply_filters( 'woocommerce_email_order_items_table', ob_get_clean(), $this );
}
+ /**
+ * Returns if an order has been paid for based on the order status.
+ * @since 2.5.0
+ * @return bool
+ */
+ public function is_paid() {
+ return apply_filters( 'woocommerce_order_is_paid', $this->has_status( apply_filters( 'woocommerce_order_is_paid_statuses', array( 'processing', 'completed' ) ) ), $this );
+ }
+
/**
* Checks if product download is permitted.
*
@@ -2221,67 +2244,71 @@ abstract class WC_Abstract_Order {
* @param string $new_status Status to change the order to. No internal wc- prefix is required.
* @param string $note (default: '') Optional note to add.
* @param bool $manual is this a manual order status change?
+ * @return bool Successful change or not
*/
public function update_status( $new_status, $note = '', $manual = false ) {
if ( ! $this->id ) {
- return;
+ return false;
}
// Standardise status names.
$new_status = 'wc-' === substr( $new_status, 0, 3 ) ? substr( $new_status, 3 ) : $new_status;
$old_status = $this->get_status();
- // Only update if they differ - and ensure post_status is a 'wc' status.
- if ( $new_status !== $old_status || ! in_array( $this->post_status, array_keys( wc_get_order_statuses() ) ) ) {
-
- // Update the order.
- wp_update_post( array( 'ID' => $this->id, 'post_status' => 'wc-' . $new_status ) );
- $this->post_status = 'wc-' . $new_status;
-
- $this->add_order_note( trim( $note . ' ' . sprintf( __( 'Order status changed from %s to %s.', 'woocommerce' ), wc_get_order_status_name( $old_status ), wc_get_order_status_name( $new_status ) ) ), 0, $manual );
-
- // Status was changed.
- do_action( 'woocommerce_order_status_' . $new_status, $this->id );
- do_action( 'woocommerce_order_status_' . $old_status . '_to_' . $new_status, $this->id );
- do_action( 'woocommerce_order_status_changed', $this->id, $old_status, $new_status );
-
- switch ( $new_status ) {
-
- case 'completed' :
- // Record the sales.
- $this->record_product_sales();
-
- // Increase coupon usage counts.
- $this->increase_coupon_usage_counts();
-
- // Record the completed date of the order.
- update_post_meta( $this->id, '_completed_date', current_time('mysql') );
-
- // Update reports.
- wc_delete_shop_order_transients( $this->id );
- break;
-
- case 'processing' :
- case 'on-hold' :
- // Record the sales.
- $this->record_product_sales();
-
- // Increase coupon usage counts.
- $this->increase_coupon_usage_counts();
-
- // Update reports.
- wc_delete_shop_order_transients( $this->id );
- break;
-
- case 'cancelled' :
- // If the order is cancelled, restore used coupons.
- $this->decrease_coupon_usage_counts();
-
- // Update reports.
- wc_delete_shop_order_transients( $this->id );
- break;
- }
+ // If the statuses are the same there is no need to update, unless the post status is not a valid 'wc' status.
+ if ( $new_status === $old_status && in_array( $this->post_status, array_keys( wc_get_order_statuses() ) ) ) {
+ return false;
}
+
+ // Update the order.
+ wp_update_post( array( 'ID' => $this->id, 'post_status' => 'wc-' . $new_status ) );
+ $this->post_status = 'wc-' . $new_status;
+
+ $this->add_order_note( trim( $note . ' ' . sprintf( __( 'Order status changed from %s to %s.', 'woocommerce' ), wc_get_order_status_name( $old_status ), wc_get_order_status_name( $new_status ) ) ), 0, $manual );
+
+ // Status was changed.
+ do_action( 'woocommerce_order_status_' . $new_status, $this->id );
+ do_action( 'woocommerce_order_status_' . $old_status . '_to_' . $new_status, $this->id );
+ do_action( 'woocommerce_order_status_changed', $this->id, $old_status, $new_status );
+
+ switch ( $new_status ) {
+
+ case 'completed' :
+ // Record the sales.
+ $this->record_product_sales();
+
+ // Increase coupon usage counts.
+ $this->increase_coupon_usage_counts();
+
+ // Record the completed date of the order.
+ update_post_meta( $this->id, '_completed_date', current_time('mysql') );
+
+ // Update reports.
+ wc_delete_shop_order_transients( $this->id );
+ break;
+
+ case 'processing' :
+ case 'on-hold' :
+ // Record the sales.
+ $this->record_product_sales();
+
+ // Increase coupon usage counts.
+ $this->increase_coupon_usage_counts();
+
+ // Update reports.
+ wc_delete_shop_order_transients( $this->id );
+ break;
+
+ case 'cancelled' :
+ // If the order is cancelled, restore used coupons.
+ $this->decrease_coupon_usage_counts();
+
+ // Update reports.
+ wc_delete_shop_order_transients( $this->id );
+ break;
+ }
+
+ return true;
}
@@ -2381,6 +2408,13 @@ abstract class WC_Abstract_Order {
}
update_post_meta( $this->id, '_recorded_sales', 'yes' );
+
+ /**
+ * Called when sales for an order are recorded
+ *
+ * @param int $order_id order id
+ */
+ do_action( 'woocommerce_recorded_sales', $this->id );
}
diff --git a/includes/abstracts/abstract-wc-product.php b/includes/abstracts/abstract-wc-product.php
index 45e031fd828..f5eba997db5 100644
--- a/includes/abstracts/abstract-wc-product.php
+++ b/includes/abstracts/abstract-wc-product.php
@@ -70,6 +70,9 @@ class WC_Product {
*/
protected $shipping_class_id = 0;
+ /** @public string The product's total stock, including that of its children. */
+ public $total_stock;
+
/**
* Supported features such as 'ajax_add_to_cart'.
* @var array
@@ -163,6 +166,17 @@ class WC_Product {
return apply_filters( 'woocommerce_product_supports', in_array( $feature, $this->supports ) ? true : false, $feature, $this );
}
+ /**
+ * Return the product ID
+ *
+ * @since 2.5.0
+ * @return int product (post) ID
+ */
+ public function get_id() {
+
+ return $this->id;
+ }
+
/**
* get_gallery_attachment_ids function.
*
@@ -202,10 +216,24 @@ class WC_Product {
/**
* Get total stock.
*
+ * This is the stock of parent and children combined.
+ *
* @return int
*/
public function get_total_stock() {
- return $this->get_stock_quantity();
+ if ( empty( $this->total_stock ) ) {
+ $this->total_stock = max( 0, $this->get_stock_quantity() );
+
+ if ( sizeof( $this->get_children() ) > 0 ) {
+ foreach ( $this->get_children() as $child_id ) {
+ if ( 'yes' === get_post_meta( $child_id, '_manage_stock', true ) ) {
+ $stock = get_post_meta( $child_id, '_stock', true );
+ $this->total_stock += max( 0, wc_stock_amount( $stock ) );
+ }
+ }
+ }
+ }
+ return wc_stock_amount( $this->total_stock );
}
/**
@@ -436,7 +464,7 @@ class WC_Product {
* @return bool
*/
public function is_virtual() {
- return $this->virtual == 'yes' ? true : false;
+ return apply_filters( 'woocommerce_is_virtual', $this->virtual == 'yes' ? true : false, $this );
}
/**
@@ -1044,22 +1072,15 @@ class WC_Product {
}
/**
- * Get the average rating of product.
- *
+ * Get the average rating of product. This is calculated once and stored in postmeta.
* @return string
*/
public function get_average_rating() {
- $transient_name = 'wc_average_rating_' . $this->id . WC_Cache_Helper::get_transient_version( 'product' );
-
- if ( false === ( $average_rating = get_transient( $transient_name ) ) ) {
-
- global $wpdb;
-
- $average_rating = '';
- $count = $this->get_rating_count();
-
- if ( $count > 0 ) {
+ global $wpdb;
+ // No meta date? Do the calculation
+ if ( ! metadata_exists( 'post', $this->id, '_wc_average_rating' ) ) {
+ if ( $count = $this->get_rating_count() ) {
$ratings = $wpdb->get_var( $wpdb->prepare("
SELECT SUM(meta_value) FROM $wpdb->commentmeta
LEFT JOIN $wpdb->comments ON $wpdb->commentmeta.comment_id = $wpdb->comments.comment_ID
@@ -1068,28 +1089,28 @@ class WC_Product {
AND comment_approved = '1'
AND meta_value > 0
", $this->id ) );
-
- $average_rating = number_format( $ratings / $count, 2 );
+ $average = number_format( $ratings / $count, 2, '.', '' );
+ } else {
+ $average = 0;
}
-
- set_transient( $transient_name, $average_rating, DAY_IN_SECONDS * 30 );
+ update_post_meta( $this->id, '_wc_average_rating', $average );
+ } else {
+ $average = get_post_meta( $this->id, '_wc_average_rating', true );
}
- return $average_rating;
+ return (string) floatval( $average );
}
/**
* Get the total amount (COUNT) of ratings.
- *
- * @param int $value Optional. Rating value to get the count for. By default
- * returns the count of all rating values.
+ * @param int $value Optional. Rating value to get the count for. By default returns the count of all rating values.
* @return int
*/
public function get_rating_count( $value = null ) {
- $transient_name = 'wc_rating_count_' . $this->id . WC_Cache_Helper::get_transient_version( 'product' );
+ global $wpdb;
- if ( ! is_array( $counts = get_transient( $transient_name ) ) ) {
- global $wpdb;
+ // No meta date? Do the calculation
+ if ( ! metadata_exists( 'post', $this->id, '_wc_rating_count' ) ) {
$counts = array();
$raw_counts = $wpdb->get_results( $wpdb->prepare("
SELECT meta_value, COUNT( * ) as meta_value_count FROM $wpdb->commentmeta
@@ -1105,7 +1126,9 @@ class WC_Product {
$counts[ $count->meta_value ] = $count->meta_value_count;
}
- set_transient( $transient_name, $counts, DAY_IN_SECONDS * 30 );
+ update_post_meta( $this->id, '_wc_rating_count', $counts );
+ } else {
+ $counts = get_post_meta( $this->id, '_wc_rating_count', true );
}
if ( is_null( $value ) ) {
@@ -1141,7 +1164,6 @@ class WC_Product {
return apply_filters( 'woocommerce_product_get_rating_html', $rating_html, $rating );
}
-
/**
* Get the total amount (COUNT) of reviews.
*
@@ -1149,13 +1171,10 @@ class WC_Product {
* @return int The total numver of product reviews
*/
public function get_review_count() {
+ global $wpdb;
- $transient_name = 'wc_review_count_' . $this->id . WC_Cache_Helper::get_transient_version( 'product' );
-
- if ( false === ( $count = get_transient( $transient_name ) ) ) {
-
- global $wpdb;
-
+ // No meta date? Do the calculation
+ if ( ! metadata_exists( 'post', $this->id, '_wc_review_count' ) ) {
$count = $wpdb->get_var( $wpdb->prepare("
SELECT COUNT(*) FROM $wpdb->comments
WHERE comment_parent = 0
@@ -1163,13 +1182,14 @@ class WC_Product {
AND comment_approved = '1'
", $this->id ) );
- set_transient( $transient_name, $count, DAY_IN_SECONDS * 30 );
+ update_post_meta( $this->id, '_wc_review_count', $count );
+ } else {
+ $count = get_post_meta( $this->id, '_wc_review_count', true );
}
return apply_filters( 'woocommerce_product_review_count', $count, $this );
}
-
/**
* Returns the upsell product ids.
*
@@ -1258,39 +1278,51 @@ class WC_Product {
/**
* Get and return related products.
*
+ * Notes:
+ * - Results are cached in a transient for faster queries.
+ * - To make results appear random, we query and extra 10 products and shuffle them.
+ * - To ensure we always have enough results, it will check $limit before returning the cached result, if not recalc.
+ * - This used to rely on transient version to invalidate cache, but to avoid multiple transients we now just expire daily.
+ * This means if a related product is edited and no longer related, it won't be removed for 24 hours. Acceptable trade-off for performance.
+ * - Saving a product will flush caches for that product.
+ *
* @param int $limit (default: 5)
* @return array Array of post IDs
*/
public function get_related( $limit = 5 ) {
- $transient_name = 'wc_related_' . $limit . '_' . $this->id . WC_Cache_Helper::get_transient_version( 'product' );
+ global $wpdb;
- if ( false === ( $related_posts = get_transient( $transient_name ) ) ) {
- global $wpdb;
+ $transient_name = 'wc_related_' . $this->id;
+ $related_posts = get_transient( $transient_name );
+ // We want to query related posts if they are not cached, or we don't have enough
+ if ( false === $related_posts || sizeof( $related_posts ) < $limit ) {
// Related products are found from category and tag
$tags_array = $this->get_related_terms( 'product_tag' );
$cats_array = $this->get_related_terms( 'product_cat' );
// Don't bother if none are set
- if ( sizeof( $cats_array ) == 1 && sizeof( $tags_array ) == 1 ) {
+ if ( 1 === sizeof( $cats_array ) && 1 === sizeof( $tags_array )) {
$related_posts = array();
} else {
// Sanitize
$exclude_ids = array_map( 'absint', array_merge( array( 0, $this->id ), $this->get_upsells() ) );
- // Generate query
- $query = $this->build_related_query( $cats_array, $tags_array, $exclude_ids, $limit );
+ // Generate query - but query an extra 10 results to give the appearance of random results
+ $query = $this->build_related_query( $cats_array, $tags_array, $exclude_ids, $limit + 10 );
// Get the posts
$related_posts = $wpdb->get_col( implode( ' ', $query ) );
}
- set_transient( $transient_name, $related_posts, DAY_IN_SECONDS * 30 );
+ set_transient( $transient_name, $related_posts, DAY_IN_SECONDS );
}
+ // Randomise the results
shuffle( $related_posts );
- return $related_posts;
+ // Limit the returned results
+ return array_slice( $related_posts, 0, $limit );
}
/**
diff --git a/includes/abstracts/abstract-wc-widget.php b/includes/abstracts/abstract-wc-widget.php
index b167e4f3ab8..c364534e77f 100644
--- a/includes/abstracts/abstract-wc-widget.php
+++ b/includes/abstracts/abstract-wc-widget.php
@@ -5,7 +5,7 @@
* @author WooThemes
* @category Widgets
* @package WooCommerce/Abstracts
- * @version 2.3.0
+ * @version 2.5.0
* @extends WP_Widget
*/
abstract class WC_Widget extends WP_Widget {
@@ -128,9 +128,9 @@ abstract class WC_Widget extends WP_Widget {
/**
* update function.
*
- * @see WP_Widget->update
- * @param array $new_instance
- * @param array $old_instance
+ * @see WP_Widget->update
+ * @param array $new_instance
+ * @param array $old_instance
* @return array
*/
public function update( $new_instance, $old_instance ) {
@@ -141,12 +141,34 @@ abstract class WC_Widget extends WP_Widget {
return $instance;
}
+ // Loop settings and get values to save.
foreach ( $this->settings as $key => $setting ) {
+ if ( ! isset( $setting['type'] ) ) {
+ continue;
+ }
- if ( isset( $new_instance[ $key ] ) ) {
- $instance[ $key ] = sanitize_text_field( $new_instance[ $key ] );
- } elseif ( 'checkbox' === $setting['type'] ) {
- $instance[ $key ] = 0;
+ // Format the value based on settings type.
+ switch ( $setting['type'] ) {
+ case 'number' :
+ $instance[ $key ] = absint( $new_instance[ $key ] );
+
+ if ( isset( $setting['min'] ) && '' !== $setting['min'] ) {
+ $instance[ $key ] = max( $instance[ $key ], $setting['min'] );
+ }
+
+ if ( isset( $setting['max'] ) && '' !== $setting['max'] ) {
+ $instance[ $key ] = min( $instance[ $key ], $setting['max'] );
+ }
+ break;
+ case 'textarea' :
+ $instance[ $key ] = wp_kses( trim( wp_unslash( $new_instance[ $key ] ) ), wp_kses_allowed_html( 'post' ) );
+ break;
+ case 'checkbox' :
+ $instance[ $key ] = is_null( $new_instance[ $key ] ) ? 0 : 1;
+ break;
+ default:
+ $instance[ $key ] = sanitize_text_field( $new_instance[ $key ] );
+ break;
}
}
@@ -158,7 +180,7 @@ abstract class WC_Widget extends WP_Widget {
/**
* form function.
*
- * @see WP_Widget->form
+ * @see WP_Widget->form
* @param array $instance
*/
public function form( $instance ) {
@@ -169,6 +191,7 @@ abstract class WC_Widget extends WP_Widget {
foreach ( $this->settings as $key => $setting ) {
+ $class = isset( $setting['class'] ) ? $setting['class'] : '';
$value = isset( $instance[ $key ] ) ? $instance[ $key ] : $setting['std'];
switch ( $setting['type'] ) {
@@ -177,7 +200,7 @@ abstract class WC_Widget extends WP_Widget {
?>
- +
- +
-