WooCommerce Germanized - Version 2.2.10

Version Description

  • Feature: WC 3.6 compatibility
  • Improvement: By default mark post_number as non-required for better gateway compatibility
  • Improvement: Do only replace reviews with TS reviews if product sticker has been enabled
  • Fix: Variable unit price sale displaying
  • Fix: Replace cart product attribute data instead of merging
Download this release

Release Info

Developer vendidero
Plugin Icon 128x128 WooCommerce Germanized
Version 2.2.10
Comparing to
See all releases

Code changes from version 2.2.9 to 2.2.10

i18n/languages/woocommerce-germanized-de_DE_formal.mo CHANGED
Binary file
i18n/languages/woocommerce-germanized-de_DE_formal.po CHANGED
@@ -3,7 +3,7 @@ msgstr ""
3
  "Project-Id-Version: WooCommerce Germanized v1.5.1\n"
4
  "Report-Msgid-Bugs-To: \n"
5
  "POT-Creation-Date: 2019-03-18 13:08+0100\n"
6
- "PO-Revision-Date: 2019-03-18 13:10+0100\n"
7
  "Last-Translator: holzhannes <holzhannes@posteo.de>\n"
8
  "Language-Team: \n"
9
  "Language: de_DE\n"
@@ -1574,7 +1574,7 @@ msgstr ""
1574
  # @ woocommerce-germanized
1575
  #: includes/admin/settings/class-wc-gzd-settings-germanized.php:734
1576
  msgid "Hi {first_name},"
1577
- msgstr "Sehr geehrte{r} {title} {last_name},"
1578
 
1579
  #: includes/admin/settings/class-wc-gzd-settings-germanized.php:739
1580
  msgid "Hide Username"
3
  "Project-Id-Version: WooCommerce Germanized v1.5.1\n"
4
  "Report-Msgid-Bugs-To: \n"
5
  "POT-Creation-Date: 2019-03-18 13:08+0100\n"
6
+ "PO-Revision-Date: 2019-04-03 10:11+0200\n"
7
  "Last-Translator: holzhannes <holzhannes@posteo.de>\n"
8
  "Language-Team: \n"
9
  "Language: de_DE\n"
1574
  # @ woocommerce-germanized
1575
  #: includes/admin/settings/class-wc-gzd-settings-germanized.php:734
1576
  msgid "Hi {first_name},"
1577
+ msgstr "Sehr geehrte(r) {title} {last_name},"
1578
 
1579
  #: includes/admin/settings/class-wc-gzd-settings-germanized.php:739
1580
  msgid "Hide Username"
includes/abstracts/abstract-wc-gzd-product.php CHANGED
@@ -547,7 +547,7 @@ class WC_GZD_Product {
547
  * @return boolean
548
  */
549
  public function is_on_unit_sale() {
550
- return apply_filters( 'woocommerce_gzd_product_is_on_unit_sale', ( $this->get_unit_sale_price() !== $this->get_unit_regular_price() && $this->get_unit_sale_price() == $this->get_unit_price() ), $this );
551
  }
552
 
553
  /**
547
  * @return boolean
548
  */
549
  public function is_on_unit_sale() {
550
+ return apply_filters( 'woocommerce_gzd_product_is_on_unit_sale', ( $this->get_unit_sale_price() !== $this->get_unit_regular_price() && $this->get_unit_sale_price() == $this->get_unit_price_raw() ), $this );
551
  }
552
 
553
  /**
includes/class-wc-gzd-dhl-parcel-shops.php CHANGED
@@ -154,9 +154,10 @@ class WC_GZD_DHL_Parcel_Shops {
154
  'priority' => 50,
155
  );
156
 
 
157
  $fields['parcelshop_post_number'] = array(
158
  'type' => 'text',
159
- 'required' => true,
160
  'label' => __( 'Postnumber', 'woocommerce-germanized' ),
161
  'before' => 'address_1',
162
  'group' => array( 'shipping' ),
@@ -232,10 +233,9 @@ class WC_GZD_DHL_Parcel_Shops {
232
  return $fields;
233
  }
234
 
235
- if ( ! isset( $_POST['shipping_parcelshop'] ) && isset( $fields['shipping_parcelshop_post_number'] ) ) {
236
- $fields['shipping_parcelshop_post_number']['required'] = false;
237
- } else {
238
- $fields['shipping_address_1']['label'] = __( 'Parcel Shop', 'woocommerce-germanized' );
239
  }
240
 
241
  return $fields;
@@ -275,6 +275,7 @@ class WC_GZD_DHL_Parcel_Shops {
275
  WC()->checkout()->checkout_fields = $fields;
276
  } else {
277
  $fields = WC()->checkout()->checkout_fields;
 
278
  $fields['shipping']['shipping_address_1']['label'] = __( 'Parcel Shop', 'wooocommerce-germanized' );
279
  WC()->checkout()->checkout_fields = $fields;
280
  }
@@ -288,8 +289,9 @@ class WC_GZD_DHL_Parcel_Shops {
288
  );
289
 
290
  foreach( $required as $req ) {
291
- if ( ! isset( $data[ $req ] ) || empty( $data[ $req ] ) )
292
  return;
 
293
  }
294
 
295
  $is_valid_postnumber = (bool) preg_match( '/^([0-9]*)$/', $data[ 'shipping_parcelshop_post_number' ] );
154
  'priority' => 50,
155
  );
156
 
157
+ // By default mark as non-required for better gateway compatibility
158
  $fields['parcelshop_post_number'] = array(
159
  'type' => 'text',
160
+ 'required' => false,
161
  'label' => __( 'Postnumber', 'woocommerce-germanized' ),
162
  'before' => 'address_1',
163
  'group' => array( 'shipping' ),
233
  return $fields;
234
  }
235
 
236
+ if ( isset( $_POST['shipping_parcelshop'] ) ) {
237
+ $fields['shipping_address_1']['label'] = __( 'Parcel Shop', 'woocommerce-germanized' );
238
+ $fields['shipping_parcelshop_post_number']['required'] = true;
 
239
  }
240
 
241
  return $fields;
275
  WC()->checkout()->checkout_fields = $fields;
276
  } else {
277
  $fields = WC()->checkout()->checkout_fields;
278
+ $fields['shipping']['shipping_parcelshop_post_number']['required'] = true;
279
  $fields['shipping']['shipping_address_1']['label'] = __( 'Parcel Shop', 'wooocommerce-germanized' );
280
  WC()->checkout()->checkout_fields = $fields;
281
  }
289
  );
290
 
291
  foreach( $required as $req ) {
292
+ if ( ! isset( $data[ $req ] ) || empty( $data[ $req ] ) ) {
293
  return;
294
+ }
295
  }
296
 
297
  $is_valid_postnumber = (bool) preg_match( '/^([0-9]*)$/', $data[ 'shipping_parcelshop_post_number' ] );
includes/class-wc-gzd-product-attribute-helper.php CHANGED
@@ -101,7 +101,7 @@ class WC_GZD_Product_Attribute_Helper {
101
  $item_data_product = wc_gzd_get_gzd_product( $cart_product )->get_checkout_attributes( $item_data, isset( $cart_item['variation'] ) ? $cart_item['variation'] : array() );
102
 
103
  if ( $item_data !== $item_data_product ) {
104
- $item_data = array_merge( $item_data, $item_data_product );
105
  }
106
 
107
  return $item_data;
101
  $item_data_product = wc_gzd_get_gzd_product( $cart_product )->get_checkout_attributes( $item_data, isset( $cart_item['variation'] ) ? $cart_item['variation'] : array() );
102
 
103
  if ( $item_data !== $item_data_product ) {
104
+ $item_data = array_replace_recursive( $item_data, $item_data_product );
105
  }
106
 
107
  return $item_data;
includes/class-wc-gzd-product-variable.php CHANGED
@@ -14,6 +14,8 @@ if ( ! defined( 'ABSPATH' ) )
14
  */
15
  class WC_GZD_Product_Variable extends WC_GZD_Product {
16
 
 
 
17
  /**
18
  * Get the min or max variation unit regular price.
19
  * @param string $min_or_max - min or max
@@ -108,17 +110,23 @@ class WC_GZD_Product_Variable extends WC_GZD_Product {
108
 
109
  if ( $this->has_unit() ) {
110
 
111
- $min_price = current( $prices['price'] );
112
- $max_price = end( $prices['price'] );
 
 
113
 
114
  if ( wc_gzd_get_dependencies()->woocommerce_version_supports_crud() ) {
115
 
116
  if ( $min_price !== $max_price ) {
117
- $price = apply_filters( 'woocommerce_gzd_variable_unit_price_html', wc_format_price_range( $min_price, $max_price ), $this );
 
 
118
  } else {
119
- $price = apply_filters( 'woocommerce_gzd_variable_unit_price_html', wc_price( $min_price ), $this );
120
  }
121
 
 
 
122
  } else {
123
 
124
  $price = $min_price !== $max_price ? sprintf( _x( '%1$s&ndash;%2$s', 'Price range: from-to', 'woocommerce-germanized' ), wc_price( $min_price ), wc_price( $max_price ) ) : wc_price( $min_price );
@@ -271,7 +279,6 @@ class WC_GZD_Product_Variable extends WC_GZD_Product {
271
  }
272
 
273
  return $this->unit_prices_array[ $price_hash ];
274
-
275
  }
276
 
277
  }
14
  */
15
  class WC_GZD_Product_Variable extends WC_GZD_Product {
16
 
17
+ protected $unit_prices_array = array();
18
+
19
  /**
20
  * Get the min or max variation unit regular price.
21
  * @param string $min_or_max - min or max
110
 
111
  if ( $this->has_unit() ) {
112
 
113
+ $min_price = current( $prices['price'] );
114
+ $max_price = end( $prices['price'] );
115
+ $min_reg_price = current( $prices['regular_price'] );
116
+ $max_reg_price = end( $prices['regular_price'] );
117
 
118
  if ( wc_gzd_get_dependencies()->woocommerce_version_supports_crud() ) {
119
 
120
  if ( $min_price !== $max_price ) {
121
+ $price = wc_format_price_range( $min_price, $max_price );
122
+ } elseif ( $this->is_on_sale() && $min_reg_price === $max_reg_price ) {
123
+ $price = wc_format_sale_price( wc_price( $max_reg_price ), wc_price( $min_price ) );
124
  } else {
125
+ $price = wc_price( $min_price );
126
  }
127
 
128
+ $price = apply_filters( 'woocommerce_gzd_variable_unit_price_html', $price, $this );
129
+
130
  } else {
131
 
132
  $price = $min_price !== $max_price ? sprintf( _x( '%1$s&ndash;%2$s', 'Price range: from-to', 'woocommerce-germanized' ), wc_price( $min_price ), wc_price( $max_price ) ) : wc_price( $min_price );
279
  }
280
 
281
  return $this->unit_prices_array[ $price_hash ];
 
282
  }
283
 
284
  }
includes/class-wc-gzd-shipping-rate.php CHANGED
@@ -4,6 +4,8 @@ class WC_GZD_Shipping_Rate extends WC_Shipping_Rate {
4
 
5
  public $tax_shares = array();
6
 
 
 
7
  public function __construct( WC_Shipping_Rate $rate ) {
8
  $num = 5;
9
 
@@ -19,25 +21,25 @@ class WC_GZD_Shipping_Rate extends WC_Shipping_Rate {
19
  }
20
 
21
  if ( get_option( 'woocommerce_gzd_shipping_tax' ) === 'yes' && ( ! empty( $rate->taxes ) || get_option( 'woocommerce_gzd_shipping_tax_force' ) === 'yes' ) ) {
22
- if ( $this->get_shipping_tax() > 0 ) {
23
  $this->set_shared_taxes();
24
  }
25
  }
26
 
 
27
  $this->set_costs();
28
  }
29
 
30
- public function set_shared_taxes() {
31
- $cart = WC()->cart;
32
- $this->tax_shares = wc_gzd_get_cart_tax_share();
33
 
34
  // Calculate tax class share
35
  if ( ! empty( $this->tax_shares ) ) {
36
 
37
  foreach ( $this->tax_shares as $rate => $class ) {
38
  $tax_rates = WC_Tax::get_rates( $rate );
39
- $this->tax_shares[ $rate ]['shipping_tax_share'] = $this->cost * $class[ 'share' ];
40
- $this->tax_shares[ $rate ]['shipping_tax'] = WC_Tax::calc_tax( ( $this->cost * $class[ 'share' ] ), $tax_rates, ( WC()->cart->tax_display_cart === 'incl' ) );
41
  }
42
 
43
  $taxes = array();
@@ -56,7 +58,7 @@ class WC_GZD_Shipping_Rate extends WC_Shipping_Rate {
56
 
57
  public function set_costs() {
58
  if ( WC()->cart->tax_display_cart === 'incl' || WC()->customer->is_vat_exempt() ) {
59
- $cost = $this->cost - array_sum( $this->taxes );
60
 
61
  if ( WC()->customer->is_vat_exempt() ) {
62
  $shipping_rates = WC_Tax::get_shipping_tax_rates();
@@ -75,7 +77,6 @@ class WC_GZD_Shipping_Rate extends WC_Shipping_Rate {
75
  public function get_shared_taxes() {
76
  return $this->taxes;
77
  }
78
-
79
  }
80
 
81
  ?>
4
 
5
  public $tax_shares = array();
6
 
7
+ protected $default_cost = 0;
8
+
9
  public function __construct( WC_Shipping_Rate $rate ) {
10
  $num = 5;
11
 
21
  }
22
 
23
  if ( get_option( 'woocommerce_gzd_shipping_tax' ) === 'yes' && ( ! empty( $rate->taxes ) || get_option( 'woocommerce_gzd_shipping_tax_force' ) === 'yes' ) ) {
24
+ if ( $this->get_shipping_tax() > 0 ) {
25
  $this->set_shared_taxes();
26
  }
27
  }
28
 
29
+ $this->default_cost = $rate->cost;
30
  $this->set_costs();
31
  }
32
 
33
+ public function set_shared_taxes( $cart_contents = array() ) {
34
+ $this->tax_shares = wc_gzd_get_cart_tax_share( 'shipping', $cart_contents );
 
35
 
36
  // Calculate tax class share
37
  if ( ! empty( $this->tax_shares ) ) {
38
 
39
  foreach ( $this->tax_shares as $rate => $class ) {
40
  $tax_rates = WC_Tax::get_rates( $rate );
41
+ $this->tax_shares[ $rate ]['shipping_tax_share'] = $this->default_cost * $class[ 'share' ];
42
+ $this->tax_shares[ $rate ]['shipping_tax'] = WC_Tax::calc_tax( ( $this->default_cost * $class[ 'share' ] ), $tax_rates, ( WC()->cart->tax_display_cart === 'incl' ) );
43
  }
44
 
45
  $taxes = array();
58
 
59
  public function set_costs() {
60
  if ( WC()->cart->tax_display_cart === 'incl' || WC()->customer->is_vat_exempt() ) {
61
+ $cost = $this->default_cost - array_sum( $this->taxes );
62
 
63
  if ( WC()->customer->is_vat_exempt() ) {
64
  $shipping_rates = WC_Tax::get_shipping_tax_rates();
77
  public function get_shared_taxes() {
78
  return $this->taxes;
79
  }
 
80
  }
81
 
82
  ?>
includes/class-wc-gzd-shortcodes.php CHANGED
@@ -118,10 +118,12 @@ class WC_GZD_Shortcodes {
118
  $legal = ob_get_clean();
119
 
120
  ob_start();
 
121
  woocommerce_gzd_template_single_price_unit();
 
122
  $unit = ob_get_clean();
123
 
124
- return $price . strip_tags( $unit . $legal, '<span><a>' );
125
  }
126
 
127
  public static function gzd_add_to_cart( $atts ) {
118
  $legal = ob_get_clean();
119
 
120
  ob_start();
121
+ echo '<span class="price price-unit">';
122
  woocommerce_gzd_template_single_price_unit();
123
+ echo '</span>';
124
  $unit = ob_get_clean();
125
 
126
+ return $price . '<span class="wc-gzd-legal-price-info">' . strip_tags( $unit . $legal, '<span><a><ins><del>' ) . '</span>';
127
  }
128
 
129
  public static function gzd_add_to_cart( $atts ) {
includes/gateways/direct-debit/class-wc-gzd-gateway-direct-debit.php CHANGED
@@ -499,11 +499,15 @@ Please notice: Period for pre-information of the SEPA direct debit is shortened
499
  }
500
 
501
  public function set_order_meta( $order_id ) {
502
-
503
  $order = wc_get_order( $order_id );
504
 
505
- if ( ! ( wc_gzd_get_crud_data( $order, 'payment_method' ) === $this->id ) )
506
- return;
 
 
 
 
 
507
 
508
  $holder = ( isset( $_POST[ 'direct_debit_account_holder' ] ) ? wc_clean( $_POST[ 'direct_debit_account_holder' ] ) : '' );
509
  $iban = ( isset( $_POST[ 'direct_debit_account_iban' ] ) ? $this->maybe_encrypt( strtoupper( $this->clean_whitespaces( wc_clean( $_POST[ 'direct_debit_account_iban' ] ) ) ) ) : '' );
499
  }
500
 
501
  public function set_order_meta( $order_id ) {
 
502
  $order = wc_get_order( $order_id );
503
 
504
+ if ( ! $order ) {
505
+ return;
506
+ }
507
+
508
+ if ( ! ( wc_gzd_get_crud_data( $order, 'payment_method' ) === $this->id ) ) {
509
+ return;
510
+ }
511
 
512
  $holder = ( isset( $_POST[ 'direct_debit_account_holder' ] ) ? wc_clean( $_POST[ 'direct_debit_account_holder' ] ) : '' );
513
  $iban = ( isset( $_POST[ 'direct_debit_account_iban' ] ) ? $this->maybe_encrypt( strtoupper( $this->clean_whitespaces( wc_clean( $_POST[ 'direct_debit_account_iban' ] ) ) ) ) : '' );
includes/trusted-shops/class-wc-gzd-trusted-shops-admin.php CHANGED
@@ -452,7 +452,6 @@ class WC_GZD_Trusted_Shops_Admin {
452
 
453
  array(
454
  'title' => _x( 'Collect Product Reviews', 'trusted-shops', 'woocommerce-germanized' ),
455
- 'desc' => _x( '(WooCommerce Product Reviews will be replaced)', 'trusted-shops', 'woocommerce-germanized' ),
456
  'desc_tip' => _x( 'Show Product Reviews on the product page in a separate tab, just as shown on the picture on the right.', 'trusted-shops', 'woocommerce-germanized' ),
457
  'id' => 'woocommerce_' . $this->base->option_prefix . 'trusted_shops_reviews_enable',
458
  'type' => 'gzd_toggle',
452
 
453
  array(
454
  'title' => _x( 'Collect Product Reviews', 'trusted-shops', 'woocommerce-germanized' ),
 
455
  'desc_tip' => _x( 'Show Product Reviews on the product page in a separate tab, just as shown on the picture on the right.', 'trusted-shops', 'woocommerce-germanized' ),
456
  'id' => 'woocommerce_' . $this->base->option_prefix . 'trusted_shops_reviews_enable',
457
  'type' => 'gzd_toggle',
includes/trusted-shops/class-wc-gzd-trusted-shops-template-hooks.php CHANGED
@@ -29,11 +29,11 @@ class WC_GZD_Trusted_Shops_Template_Hooks {
29
  add_action( 'wp_footer', array( $this, 'template_trustbadge' ), 250 );
30
  }
31
 
32
- if ( $this->base->is_product_reviews_enabled() ) {
33
  add_filter( 'woocommerce_product_tabs', array( $this, 'remove_review_tab' ), 40, 1 );
34
  }
35
 
36
- if ( $this->base->is_product_sticker_enabled() ) {
37
  add_filter( 'woocommerce_product_tabs', array( $this, 'review_tab' ), 50, 1 );
38
  }
39
 
29
  add_action( 'wp_footer', array( $this, 'template_trustbadge' ), 250 );
30
  }
31
 
32
+ if ( $this->base->product_reviews_visible() ) {
33
  add_filter( 'woocommerce_product_tabs', array( $this, 'remove_review_tab' ), 40, 1 );
34
  }
35
 
36
+ if ( $this->base->product_reviews_visible() ) {
37
  add_filter( 'woocommerce_product_tabs', array( $this, 'review_tab' ), 50, 1 );
38
  }
39
 
includes/trusted-shops/class-wc-gzd-trusted-shops.php CHANGED
@@ -187,7 +187,7 @@ class WC_GZD_Trusted_Shops {
187
 
188
  public function refresh() {
189
  $this->id = $this->__get( 'id' );
190
- $this->api_url = 'http://api.trustedshops.com/rest/public/v2/shops/'. $this->id .'/quality.json';
191
  }
192
 
193
  public function get_multi_language_compatibility() {
@@ -311,6 +311,10 @@ class WC_GZD_Trusted_Shops {
311
  return ( $this->reviews_enable === 'yes' && $this->is_enabled() ? true : false );
312
  }
313
 
 
 
 
 
314
  public function is_product_sticker_enabled() {
315
  return ( $this->is_product_reviews_enabled() && $this->product_sticker_enable === 'yes' ? true : false );
316
  }
187
 
188
  public function refresh() {
189
  $this->id = $this->__get( 'id' );
190
+ $this->api_url = 'https://api.trustedshops.com/rest/public/v2/shops/'. $this->id .'/quality.json';
191
  }
192
 
193
  public function get_multi_language_compatibility() {
311
  return ( $this->reviews_enable === 'yes' && $this->is_enabled() ? true : false );
312
  }
313
 
314
+ public function product_reviews_visible() {
315
+ return ( $this->is_enabled() && $this->is_product_sticker_enabled() ? true : false );
316
+ }
317
+
318
  public function is_product_sticker_enabled() {
319
  return ( $this->is_product_reviews_enabled() && $this->product_sticker_enable === 'yes' ? true : false );
320
  }
includes/wc-gzd-cart-functions.php CHANGED
@@ -239,9 +239,9 @@ function wc_gzd_cart_product_units( $title, $cart_item, $cart_item_key = '' ) {
239
  * @param string $type
240
  * @return array
241
  */
242
- function wc_gzd_get_cart_tax_share( $type = 'shipping' ) {
243
 
244
- $cart = WC()->cart->cart_contents;
245
  $tax_shares = array();
246
  $item_totals = 0;
247
 
@@ -277,20 +277,21 @@ function wc_gzd_get_cart_tax_share( $type = 'shipping' ) {
277
  $tax_shares[ $class ]['total'] = 0;
278
  $tax_shares[ $class ]['key'] = '';
279
  }
280
-
 
281
  $tax_shares[ $class ]['total'] += ( $item['line_total'] + $item['line_tax'] );
282
  $tax_shares[ $class ]['key'] = key( $item['line_tax_data']['total'] );
 
283
  $item_totals += ( $item['line_total'] + $item['line_tax'] );
284
  }
285
  }
286
-
287
- if ( ! empty( $tax_shares ) ) {
288
 
 
289
  $default = ( $item_totals == 0 ? 1 / sizeof( $tax_shares ) : 0 );
290
 
291
- foreach ( $tax_shares as $key => $class )
292
  $tax_shares[ $key ]['share'] = ( $item_totals > 0 ? $class['total'] / $item_totals : $default );
293
-
294
  }
295
 
296
  return $tax_shares;
239
  * @param string $type
240
  * @return array
241
  */
242
+ function wc_gzd_get_cart_tax_share( $type = 'shipping', $cart_contents = array() ) {
243
 
244
+ $cart = empty( $cart_contents ) ? WC()->cart->cart_contents : $cart_contents;
245
  $tax_shares = array();
246
  $item_totals = 0;
247
 
277
  $tax_shares[ $class ]['total'] = 0;
278
  $tax_shares[ $class ]['key'] = '';
279
  }
280
+
281
+ // Does not contain pricing data in case of recurring Subscriptions
282
  $tax_shares[ $class ]['total'] += ( $item['line_total'] + $item['line_tax'] );
283
  $tax_shares[ $class ]['key'] = key( $item['line_tax_data']['total'] );
284
+
285
  $item_totals += ( $item['line_total'] + $item['line_tax'] );
286
  }
287
  }
 
 
288
 
289
+ if ( ! empty( $tax_shares ) ) {
290
  $default = ( $item_totals == 0 ? 1 / sizeof( $tax_shares ) : 0 );
291
 
292
+ foreach ( $tax_shares as $key => $class ) {
293
  $tax_shares[ $key ]['share'] = ( $item_totals > 0 ? $class['total'] / $item_totals : $default );
294
+ }
295
  }
296
 
297
  return $tax_shares;
readme.txt CHANGED
@@ -4,8 +4,8 @@ Tags: woocommerce, woocommerce german, woocommerce DE, woocommerce germany, wooc
4
  Requires at least: 3.8
5
  Tested up to: 5.1
6
  WC requires at least: 2.4
7
- WC tested up to: 3.5
8
- Stable tag: 2.2.9
9
  Requires PHP: 5.3
10
  License: GPLv3
11
  License URI: http://www.gnu.org/licenses/gpl-3.0.html
@@ -142,9 +142,6 @@ By adjusting parameter width=55 (55 means 55px width/height) you may optionally
142
  `[trusted_shops_rich_snippets]`
143
  If you are using Trusted Shop's review functionality, you may insert a Google Rich Snippet to show your current shop's rating.
144
 
145
- `[trusted_shops_reviews]`
146
- Inserts your current Trusted Shops rating as an image (provided by Trusted Shops).
147
-
148
  `[ekomi_badge]`
149
  Inserts your eKomi badge as image.
150
  By adjusting width=55 (55 means 55px width/height) you may optionally set badge's width.
@@ -184,6 +181,13 @@ Bug reports may be filed via our [GitHub repository](https://github.com/vendider
184
 
185
  == Changelog ==
186
 
 
 
 
 
 
 
 
187
  = 2.2.9 =
188
  * Feature: Adjust email title format and customize it with placeholders e.g. first name or last name
189
  * Improvement: Free shipping auto select implementation
4
  Requires at least: 3.8
5
  Tested up to: 5.1
6
  WC requires at least: 2.4
7
+ WC tested up to: 3.6
8
+ Stable tag: 2.2.10
9
  Requires PHP: 5.3
10
  License: GPLv3
11
  License URI: http://www.gnu.org/licenses/gpl-3.0.html
142
  `[trusted_shops_rich_snippets]`
143
  If you are using Trusted Shop's review functionality, you may insert a Google Rich Snippet to show your current shop's rating.
144
 
 
 
 
145
  `[ekomi_badge]`
146
  Inserts your eKomi badge as image.
147
  By adjusting width=55 (55 means 55px width/height) you may optionally set badge's width.
181
 
182
  == Changelog ==
183
 
184
+ = 2.2.10 =
185
+ * Feature: WC 3.6 compatibility
186
+ * Improvement: By default mark post_number as non-required for better gateway compatibility
187
+ * Improvement: Do only replace reviews with TS reviews if product sticker has been enabled
188
+ * Fix: Variable unit price sale displaying
189
+ * Fix: Replace cart product attribute data instead of merging
190
+
191
  = 2.2.9 =
192
  * Feature: Adjust email title format and customize it with placeholders e.g. first name or last name
193
  * Improvement: Free shipping auto select implementation
woocommerce-germanized.php CHANGED
@@ -3,15 +3,15 @@
3
  * Plugin Name: WooCommerce Germanized
4
  * Plugin URI: https://www.vendidero.de/woocommerce-germanized
5
  * Description: WooCommerce Germanized extends WooCommerce to become a legally compliant store in the german market.
6
- * Version: 2.2.9
7
  * Author: Vendidero
8
  * Author URI: https://vendidero.de
9
  * Requires at least: 3.8
10
  * Tested up to: 5.1
11
  * WC requires at least: 2.4.0
12
- * WC tested up to: 3.5.0
13
  * Requires at least WooCommerce: 2.4
14
- * Tested up to WooCommerce: 3.5
15
  *
16
  * Text Domain: woocommerce-germanized
17
  * Domain Path: /i18n/languages/
@@ -31,7 +31,7 @@ final class WooCommerce_Germanized {
31
  *
32
  * @var string
33
  */
34
- public $version = '2.2.9';
35
 
36
  /**
37
  * Single instance of WooCommerce Germanized Main Class
3
  * Plugin Name: WooCommerce Germanized
4
  * Plugin URI: https://www.vendidero.de/woocommerce-germanized
5
  * Description: WooCommerce Germanized extends WooCommerce to become a legally compliant store in the german market.
6
+ * Version: 2.2.10
7
  * Author: Vendidero
8
  * Author URI: https://vendidero.de
9
  * Requires at least: 3.8
10
  * Tested up to: 5.1
11
  * WC requires at least: 2.4.0
12
+ * WC tested up to: 3.6.0
13
  * Requires at least WooCommerce: 2.4
14
+ * Tested up to WooCommerce: 3.6
15
  *
16
  * Text Domain: woocommerce-germanized
17
  * Domain Path: /i18n/languages/
31
  *
32
  * @var string
33
  */
34
+ public $version = '2.2.10';
35
 
36
  /**
37
  * Single instance of WooCommerce Germanized Main Class