Booster for WooCommerce - Version 3.5.1

Version Description

  • 09/04/2018 =
  • Dev - PRICES & CURRENCIES - Multicurrency (Currency Switcher) - Advanced: Price Filters Priority - Added to all hooks.
  • Dev - PRICES & CURRENCIES - Prices and Currencies by Country - "Advanced: Price Filters Priority" option added.
  • Dev - PRICES & CURRENCIES - Product Open Pricing (Name Your Price) - "Frontend Position" option added.
  • Dev - CART & CHECKOUT - Mini Cart Custom Info - Admin settings restyled.
  • Fix - SHIPPING & ORDERS - Left to Free Shipping - wcj_get_left_to_free_shipping() - WooCommerce below v3.3.0 compatibility issue fixed.
  • Dev - SHIPPING & ORDERS - Shipping Time - Admin settings - Description updated.
  • Dev - Shortcodes - Code refactoring - "Cart" shortcodes moved to new class-wcj-shortcodes-cart.php file.
  • Dev - Shortcodes - Cart - [wcj_cart_items_total_quantity] - Code refactoring.
  • Dev - Shortcodes - Cart - [wcj_cart_items_total_weight] - Code refactoring.
  • Dev - Shortcodes - Cart - [wcj_cart_discount_tax], [wcj_cart_discount_total] shortcodes added.
  • Dev - Shortcodes - Cart - [wcj_cart_fee_tax], [wcj_cart_fee_total] shortcodes added.
  • Dev - Shortcodes - Cart - [wcj_cart_function] shortcode added.
  • Dev - Shortcodes - Cart - [wcj_cart_shipping_total], [wcj_cart_shipping_tax] shortcodes added.
  • Dev - Shortcodes - Cart - [wcj_cart_subtotal], [wcj_cart_subtotal_tax] shortcodes added.
  • Dev - Shortcodes - Cart - [wcj_cart_tax], [wcj_cart_total_ex_tax] shortcodes added.
  • Dev - Shortcodes - Orders - [wcj_order_items_table] - Columns - item_product_input_fields_with_titles column added.
Download this release

Release Info

Developer algoritmika
Plugin Icon 128x128 Booster for WooCommerce
Version 3.5.1
Comparing to
See all releases

Code changes from version 3.5.0 to 3.5.1

includes/class-wcj-max-products-per-user.php CHANGED
@@ -20,7 +20,7 @@ class WCJ_Max_products_Per_User extends WCJ_Module {
20
  * @since 3.5.0
21
  * @todo (maybe) JS
22
  * @todo (maybe) zero quantity for "Guest"
23
- * @todo (maybe) editable sales date (i.e. change "Qty Bought" for product for user)
24
  */
25
  function __construct() {
26
 
20
  * @since 3.5.0
21
  * @todo (maybe) JS
22
  * @todo (maybe) zero quantity for "Guest"
23
+ * @todo (maybe) editable sales data (i.e. change "Qty Bought" for product for user)
24
  */
25
  function __construct() {
26
 
includes/class-wcj-multicurrency.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Module - Multicurrency (Currency Switcher)
4
  *
5
- * @version 3.5.0
6
  * @since 2.4.3
7
  * @author Algoritmika Ltd.
8
  */
@@ -59,19 +59,18 @@ class WCJ_Multicurrency extends WCJ_Module {
59
  /**
60
  * add_hooks.
61
  *
62
- * @version 3.4.5
63
- * @todo (maybe) replace all `PHP_INT_MAX - 1` with `$this->price_hooks_priority` (especially for `woocommerce_currency_symbol` and `woocommerce_currency`)
64
  */
65
  function add_hooks() {
66
  if ( wcj_is_frontend() ) {
67
 
68
  // Prices - Compatibility - "WooCommerce TM Extra Product Options" plugin
69
- add_filter( 'woocommerce_tm_epo_price_on_cart', array( $this, 'change_price_by_currency_tm_extra_product_options_plugin_cart' ), PHP_INT_MAX - 1, 1 );
70
- add_filter( 'wc_epo_price', array( $this, 'change_price_by_currency_tm_extra_product_options_plugin' ), PHP_INT_MAX - 1, 3 );
71
 
72
  // Currency hooks
73
- add_filter( 'woocommerce_currency_symbol', array( $this, 'change_currency_symbol' ), PHP_INT_MAX - 1, 2 );
74
- add_filter( 'woocommerce_currency', array( $this, 'change_currency_code' ), PHP_INT_MAX - 1, 1 );
75
 
76
  // Add "Change Price" hooks
77
  wcj_add_change_price_hooks( $this, $this->price_hooks_priority );
2
  /**
3
  * Booster for WooCommerce - Module - Multicurrency (Currency Switcher)
4
  *
5
+ * @version 3.5.1
6
  * @since 2.4.3
7
  * @author Algoritmika Ltd.
8
  */
59
  /**
60
  * add_hooks.
61
  *
62
+ * @version 3.5.1
 
63
  */
64
  function add_hooks() {
65
  if ( wcj_is_frontend() ) {
66
 
67
  // Prices - Compatibility - "WooCommerce TM Extra Product Options" plugin
68
+ add_filter( 'woocommerce_tm_epo_price_on_cart', array( $this, 'change_price_by_currency_tm_extra_product_options_plugin_cart' ), $this->price_hooks_priority, 1 );
69
+ add_filter( 'wc_epo_price', array( $this, 'change_price_by_currency_tm_extra_product_options_plugin' ), $this->price_hooks_priority, 3 );
70
 
71
  // Currency hooks
72
+ add_filter( 'woocommerce_currency_symbol', array( $this, 'change_currency_symbol' ), $this->price_hooks_priority, 2 );
73
+ add_filter( 'woocommerce_currency', array( $this, 'change_currency_code' ), $this->price_hooks_priority, 1 );
74
 
75
  // Add "Change Price" hooks
76
  wcj_add_change_price_hooks( $this, $this->price_hooks_priority );
includes/class-wcj-product-open-pricing.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Module - Product Open Pricing
4
  *
5
- * @version 2.9.0
6
  * @since 2.4.8
7
  * @author Algoritmika Ltd.
8
  */
@@ -16,7 +16,7 @@ class WCJ_Product_Open_Pricing extends WCJ_Module {
16
  /**
17
  * Constructor.
18
  *
19
- * @version 2.9.0
20
  * @since 2.4.8
21
  */
22
  function __construct() {
@@ -41,7 +41,8 @@ class WCJ_Product_Open_Pricing extends WCJ_Module {
41
  add_filter( 'woocommerce_product_supports', array( $this, 'disable_add_to_cart_ajax' ), PHP_INT_MAX, 3 );
42
  add_filter( 'woocommerce_product_add_to_cart_url', array( $this, 'add_to_cart_url' ), PHP_INT_MAX, 2 );
43
  add_filter( 'woocommerce_product_add_to_cart_text', array( $this, 'add_to_cart_text' ), PHP_INT_MAX, 2 );
44
- add_action( 'woocommerce_before_add_to_cart_button', array( $this, 'add_open_price_input_field_to_frontend' ), PHP_INT_MAX );
 
45
  add_filter( 'woocommerce_add_to_cart_validation', array( $this, 'validate_open_price_on_add_to_cart' ), PHP_INT_MAX, 2 );
46
  add_filter( 'woocommerce_add_cart_item_data', array( $this, 'add_open_price_to_cart_item_data' ), PHP_INT_MAX, 3 );
47
  add_filter( 'woocommerce_add_cart_item', array( $this, 'add_open_price_to_cart_item' ), PHP_INT_MAX, 2 );
2
  /**
3
  * Booster for WooCommerce - Module - Product Open Pricing
4
  *
5
+ * @version 3.5.1
6
  * @since 2.4.8
7
  * @author Algoritmika Ltd.
8
  */
16
  /**
17
  * Constructor.
18
  *
19
+ * @version 3.5.1
20
  * @since 2.4.8
21
  */
22
  function __construct() {
41
  add_filter( 'woocommerce_product_supports', array( $this, 'disable_add_to_cart_ajax' ), PHP_INT_MAX, 3 );
42
  add_filter( 'woocommerce_product_add_to_cart_url', array( $this, 'add_to_cart_url' ), PHP_INT_MAX, 2 );
43
  add_filter( 'woocommerce_product_add_to_cart_text', array( $this, 'add_to_cart_text' ), PHP_INT_MAX, 2 );
44
+ $position = get_option( 'wcj_product_open_price_position', 'woocommerce_before_add_to_cart_button' );
45
+ add_action( $position, array( $this, 'add_open_price_input_field_to_frontend' ), PHP_INT_MAX );
46
  add_filter( 'woocommerce_add_to_cart_validation', array( $this, 'validate_open_price_on_add_to_cart' ), PHP_INT_MAX, 2 );
47
  add_filter( 'woocommerce_add_cart_item_data', array( $this, 'add_open_price_to_cart_item_data' ), PHP_INT_MAX, 3 );
48
  add_filter( 'woocommerce_add_cart_item', array( $this, 'add_open_price_to_cart_item' ), PHP_INT_MAX, 2 );
includes/core/wcj-shortcodes.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Shortcodes
4
  *
5
- * @version 3.3.0
6
  * @since 3.2.4
7
  * @author Algoritmika Ltd.
8
  */
@@ -15,6 +15,7 @@ if ( ! wcj_is_module_enabled( 'general' ) || ( wcj_is_module_enabled( 'general'
15
 
16
  $wcj_shortcodes_files = array(
17
  'general' => 'class-wcj-shortcodes-general.php',
 
18
  'invoices' => 'class-wcj-shortcodes-invoices.php',
19
  'orders' => 'class-wcj-shortcodes-orders.php',
20
  'order_items' => 'class-wcj-shortcodes-order-items.php',
2
  /**
3
  * Booster for WooCommerce - Shortcodes
4
  *
5
+ * @version 3.5.1
6
  * @since 3.2.4
7
  * @author Algoritmika Ltd.
8
  */
15
 
16
  $wcj_shortcodes_files = array(
17
  'general' => 'class-wcj-shortcodes-general.php',
18
+ 'cart' => 'class-wcj-shortcodes-cart.php',
19
  'invoices' => 'class-wcj-shortcodes-invoices.php',
20
  'orders' => 'class-wcj-shortcodes-orders.php',
21
  'order_items' => 'class-wcj-shortcodes-order-items.php',
includes/functions/wcj-functions-price-currency.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Functions - Price and Currency
4
  *
5
- * @version 3.5.0
6
  * @since 2.7.0
7
  * @author Algoritmika Ltd.
8
  */
@@ -26,12 +26,13 @@ if ( ! function_exists( 'wcj_get_module_price_hooks_priority' ) ) {
26
  /**
27
  * wcj_get_module_price_hooks_priority.
28
  *
29
- * @version 3.2.2
30
  * @since 3.2.2
31
  * @todo add all corresponding modules
32
  */
33
  function wcj_get_module_price_hooks_priority( $module_id ) {
34
  $modules_priorities = array(
 
35
  'multicurrency' => PHP_INT_MAX - 1,
36
  'price_by_user_role' => PHP_INT_MAX - 200,
37
  );
2
  /**
3
  * Booster for WooCommerce - Functions - Price and Currency
4
  *
5
+ * @version 3.5.1
6
  * @since 2.7.0
7
  * @author Algoritmika Ltd.
8
  */
26
  /**
27
  * wcj_get_module_price_hooks_priority.
28
  *
29
+ * @version 3.5.1
30
  * @since 3.2.2
31
  * @todo add all corresponding modules
32
  */
33
  function wcj_get_module_price_hooks_priority( $module_id ) {
34
  $modules_priorities = array(
35
+ 'price_by_country' => PHP_INT_MAX - 1,
36
  'multicurrency' => PHP_INT_MAX - 1,
37
  'price_by_user_role' => PHP_INT_MAX - 200,
38
  );
includes/functions/wcj-functions-products.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Functions - Products
4
  *
5
- * @version 3.5.0
6
  * @since 2.9.0
7
  * @author Algoritmika Ltd.
8
  */
@@ -197,31 +197,59 @@ if ( ! function_exists( 'wcj_get_product_image_url' ) ) {
197
  }
198
  }
199
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
200
  if ( ! function_exists( 'wcj_get_product_input_fields' ) ) {
201
  /*
202
  * wcj_get_product_input_fields.
203
  *
204
- * @version 3.2.1
205
  * @since 2.4.4
206
  * @return string
207
  * @todo (maybe) better handle "file" type
208
  */
209
- function wcj_get_product_input_fields( $item ) {
210
  $product_input_fields = array();
211
  if ( WCJ_IS_WC_VERSION_BELOW_3 ) {
212
  foreach ( $item as $key => $value ) {
213
  if ( false !== strpos( $key, 'wcj_product_input_fields_' ) ) {
214
- $product_input_fields[] = wcj_maybe_unserialize_and_implode( $value );
 
215
  }
216
  }
217
  } else {
218
  foreach ( $item->get_meta_data() as $value ) {
219
  if ( isset( $value->key ) && isset( $value->value ) && false !== strpos( $value->key, 'wcj_product_input_fields_' ) ) {
220
- $product_input_fields[] = wcj_maybe_unserialize_and_implode( $value->value );
 
221
  }
222
  }
223
  }
224
- return ( ! empty( $product_input_fields ) ) ? implode( ', ', array_map( 'wcj_maybe_implode', $product_input_fields ) ) : '';
225
  }
226
  }
227
 
2
  /**
3
  * Booster for WooCommerce - Functions - Products
4
  *
5
+ * @version 3.5.1
6
  * @since 2.9.0
7
  * @author Algoritmika Ltd.
8
  */
197
  }
198
  }
199
 
200
+ if ( ! function_exists( 'wcj_get_product_input_field_value' ) ) {
201
+ /**
202
+ * wcj_get_product_input_field_value.
203
+ *
204
+ * @version 3.5.1
205
+ * @since 3.5.1
206
+ */
207
+ function wcj_get_product_input_field_value( $item, $key, $field ) {
208
+ $key = explode( '_', str_replace( '_wcj_product_input_fields_', '', $key ) );
209
+ $scope = $key[0];
210
+ $option_name = 'wcj_product_input_fields_' . $field . '_' . $scope . '_' . $key[1];
211
+ $product_id = $item['product_id'];
212
+ $default = '';
213
+ if ( 'global' === $scope ) {
214
+ return get_option( $option_name, $default );
215
+ } else { // local
216
+ if ( '' != ( $options = get_post_meta( $product_id, '_' . 'wcj_product_input_fields', true ) ) ) {
217
+ $option_name = str_replace( 'wcj_product_input_fields_', '', $option_name );
218
+ return ( isset( $options[ $option_name ] ) ? $options[ $option_name ] : $default );
219
+ } else { // Booster version < 3.5.0
220
+ return get_post_meta( $product_id, '_' . $option_name, true );
221
+ }
222
+ }
223
+ }
224
+ }
225
+
226
  if ( ! function_exists( 'wcj_get_product_input_fields' ) ) {
227
  /*
228
  * wcj_get_product_input_fields.
229
  *
230
+ * @version 3.5.1
231
  * @since 2.4.4
232
  * @return string
233
  * @todo (maybe) better handle "file" type
234
  */
235
+ function wcj_get_product_input_fields( $item, $do_add_titles = false, $sep = ', ' ) {
236
  $product_input_fields = array();
237
  if ( WCJ_IS_WC_VERSION_BELOW_3 ) {
238
  foreach ( $item as $key => $value ) {
239
  if ( false !== strpos( $key, 'wcj_product_input_fields_' ) ) {
240
+ $title = ( $do_add_titles ? wcj_get_product_input_field_value( $item, $key, 'title' ) . ': ' : '' );
241
+ $product_input_fields[] = $title . wcj_maybe_unserialize_and_implode( $value );
242
  }
243
  }
244
  } else {
245
  foreach ( $item->get_meta_data() as $value ) {
246
  if ( isset( $value->key ) && isset( $value->value ) && false !== strpos( $value->key, 'wcj_product_input_fields_' ) ) {
247
+ $title = ( $do_add_titles ? wcj_get_product_input_field_value( $item, $value->key, 'title' ) . ': ' : '' );
248
+ $product_input_fields[] = $title . wcj_maybe_unserialize_and_implode( $value->value );
249
  }
250
  }
251
  }
252
+ return ( ! empty( $product_input_fields ) ) ? implode( $sep, array_map( 'wcj_maybe_implode', $product_input_fields ) ) : '';
253
  }
254
  }
255
 
includes/functions/wcj-functions-shipping.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Functions - Shipping
4
  *
5
- * @version 3.5.0
6
  * @since 3.5.0
7
  * @author Algoritmika Ltd.
8
  */
@@ -201,7 +201,7 @@ if ( ! function_exists( 'wcj_get_left_to_free_shipping' ) ) {
201
  /*
202
  * wcj_get_left_to_free_shipping.
203
  *
204
- * @version 3.5.0
205
  * @since 2.4.4
206
  * @return string
207
  */
@@ -257,7 +257,9 @@ if ( ! function_exists( 'wcj_get_left_to_free_shipping' ) ) {
257
  if ( isset( WC()->cart ) ) {
258
  // Getting cart total
259
  $total = WC()->cart->get_displayed_subtotal();
260
- if ( WC()->cart->display_prices_including_tax() ) {
 
 
261
  $total = round( $total - ( WC()->cart->get_discount_total() + WC()->cart->get_discount_tax() ), wc_get_price_decimals() );
262
  } else {
263
  $total = round( $total - WC()->cart->get_discount_total(), wc_get_price_decimals() );
2
  /**
3
  * Booster for WooCommerce - Functions - Shipping
4
  *
5
+ * @version 3.5.1
6
  * @since 3.5.0
7
  * @author Algoritmika Ltd.
8
  */
201
  /*
202
  * wcj_get_left_to_free_shipping.
203
  *
204
+ * @version 3.5.1
205
  * @since 2.4.4
206
  * @return string
207
  */
257
  if ( isset( WC()->cart ) ) {
258
  // Getting cart total
259
  $total = WC()->cart->get_displayed_subtotal();
260
+ $is_cart_display_prices_including_tax = ( WCJ_IS_WC_VERSION_BELOW_3_3_0 ?
261
+ ( 'incl' === WC()->cart->tax_display_cart ) : WC()->cart->display_prices_including_tax() );
262
+ if ( $is_cart_display_prices_including_tax ) {
263
  $total = round( $total - ( WC()->cart->get_discount_total() + WC()->cart->get_discount_tax() ), wc_get_price_decimals() );
264
  } else {
265
  $total = round( $total - WC()->cart->get_discount_total(), wc_get_price_decimals() );
includes/input-fields/class-wcj-product-input-fields-core.php CHANGED
@@ -343,6 +343,7 @@ class WCJ_Product_Input_Fields_Core {
343
  * get_value.
344
  *
345
  * @version 3.5.0
 
346
  */
347
  function get_value( $option_name, $product_id, $default ) {
348
  if ( 'global' === $this->scope ) {
343
  * get_value.
344
  *
345
  * @version 3.5.0
346
+ * @todo `wcj_get_product_input_field_value()` is almost identical
347
  */
348
  function get_value( $option_name, $product_id, $default ) {
349
  if ( 'global' === $this->scope ) {
includes/price-by-country/class-wcj-price-by-country-core.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Price by Country - Core
4
  *
5
- * @version 3.5.0
6
  * @author Algoritmika Ltd.
7
  */
8
 
@@ -70,7 +70,7 @@ class WCJ_Price_by_Country_Core {
70
  /**
71
  * add_hooks.
72
  *
73
- * @version 2.9.0
74
  */
75
  function add_hooks() {
76
 
@@ -79,12 +79,14 @@ class WCJ_Price_by_Country_Core {
79
  add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_wselect_scripts' ) );
80
  }
81
 
 
 
82
  // Price hooks
83
- wcj_add_change_price_hooks( $this, PHP_INT_MAX - 1 );
84
 
85
  // Currency hooks
86
- add_filter( 'woocommerce_currency_symbol', array( $this, 'change_currency_symbol' ), PHP_INT_MAX - 1, 2 );
87
- add_filter( 'woocommerce_currency', array( $this, 'change_currency_code' ), PHP_INT_MAX - 1, 1 );
88
 
89
  // Price Filter Widget
90
  if ( 'yes' === get_option( 'wcj_price_by_country_price_filter_widget_support_enabled', 'no' ) ) {
2
  /**
3
  * Booster for WooCommerce - Price by Country - Core
4
  *
5
+ * @version 3.5.1
6
  * @author Algoritmika Ltd.
7
  */
8
 
70
  /**
71
  * add_hooks.
72
  *
73
+ * @version 3.5.1
74
  */
75
  function add_hooks() {
76
 
79
  add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_wselect_scripts' ) );
80
  }
81
 
82
+ $this->price_hooks_priority = wcj_get_module_price_hooks_priority( 'price_by_country' );
83
+
84
  // Price hooks
85
+ wcj_add_change_price_hooks( $this, $this->price_hooks_priority );
86
 
87
  // Currency hooks
88
+ add_filter( 'woocommerce_currency_symbol', array( $this, 'change_currency_symbol' ), $this->price_hooks_priority, 2 );
89
+ add_filter( 'woocommerce_currency', array( $this, 'change_currency_code' ), $this->price_hooks_priority, 1 );
90
 
91
  // Price Filter Widget
92
  if ( 'yes' === get_option( 'wcj_price_by_country_price_filter_widget_support_enabled', 'no' ) ) {
includes/settings/wcj-settings-mini-cart.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Settings - Mini Cart Custom Info
4
  *
5
- * @version 2.8.0
6
  * @since 2.8.0
7
  * @author Algoritmika Ltd.
8
  */
@@ -40,7 +40,7 @@ for ( $i = 1; $i <= apply_filters( 'booster_option', 1, get_option( 'wcj_mini_ca
40
  'id' => 'wcj_mini_cart_custom_info_content_' . $i,
41
  'default' => '[wcj_cart_items_total_weight before="Total weight: " after=" kg"]',
42
  'type' => 'textarea',
43
- 'css' => 'width:30%;min-width:300px;height:100px;',
44
  ),
45
  array(
46
  'title' => __( 'Position', 'woocommerce-jetpack' ),
@@ -52,14 +52,12 @@ for ( $i = 1; $i <= apply_filters( 'booster_option', 1, get_option( 'wcj_mini_ca
52
  'woocommerce_widget_shopping_cart_before_buttons' => __( 'Before buttons', 'woocommerce-jetpack' ),
53
  'woocommerce_after_mini_cart' => __( 'After mini cart', 'woocommerce-jetpack' ),
54
  ),
55
- 'css' => 'width:250px;',
56
  ),
57
  array(
58
  'title' => __( 'Position Order (i.e. Priority)', 'woocommerce-jetpack' ),
59
  'id' => 'wcj_mini_cart_custom_info_priority_' . $i,
60
  'default' => 10,
61
  'type' => 'number',
62
- 'css' => 'width:250px;',
63
  ),
64
  array(
65
  'type' => 'sectionend',
2
  /**
3
  * Booster for WooCommerce - Settings - Mini Cart Custom Info
4
  *
5
+ * @version 3.5.1
6
  * @since 2.8.0
7
  * @author Algoritmika Ltd.
8
  */
40
  'id' => 'wcj_mini_cart_custom_info_content_' . $i,
41
  'default' => '[wcj_cart_items_total_weight before="Total weight: " after=" kg"]',
42
  'type' => 'textarea',
43
+ 'css' => 'width:100%;height:100px;',
44
  ),
45
  array(
46
  'title' => __( 'Position', 'woocommerce-jetpack' ),
52
  'woocommerce_widget_shopping_cart_before_buttons' => __( 'Before buttons', 'woocommerce-jetpack' ),
53
  'woocommerce_after_mini_cart' => __( 'After mini cart', 'woocommerce-jetpack' ),
54
  ),
 
55
  ),
56
  array(
57
  'title' => __( 'Position Order (i.e. Priority)', 'woocommerce-jetpack' ),
58
  'id' => 'wcj_mini_cart_custom_info_priority_' . $i,
59
  'default' => 10,
60
  'type' => 'number',
 
61
  ),
62
  array(
63
  'type' => 'sectionend',
includes/settings/wcj-settings-price-by-country.php CHANGED
@@ -2,9 +2,10 @@
2
  /**
3
  * Booster for WooCommerce - Settings - Prices and Currencies by Country
4
  *
5
- * @version 3.3.0
6
  * @since 2.8.0
7
  * @author Algoritmika Ltd.
 
8
  */
9
 
10
  if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
@@ -142,6 +143,13 @@ $settings = array(
142
  'default' => 'no',
143
  'type' => 'checkbox',
144
  ),
 
 
 
 
 
 
 
145
  array(
146
  'type' => 'sectionend',
147
  'id' => 'wcj_price_by_country_options',
2
  /**
3
  * Booster for WooCommerce - Settings - Prices and Currencies by Country
4
  *
5
+ * @version 3.5.1
6
  * @since 2.8.0
7
  * @author Algoritmika Ltd.
8
+ * @todo clean up
9
  */
10
 
11
  if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
143
  'default' => 'no',
144
  'type' => 'checkbox',
145
  ),
146
+ array(
147
+ 'title' => __( 'Advanced: Price Filters Priority', 'woocommerce-jetpack' ),
148
+ 'desc_tip' => __( 'Priority for all module\'s price filters. Set to zero to use default priority.' ),
149
+ 'id' => 'wcj_price_by_country_advanced_price_hooks_priority',
150
+ 'default' => 0,
151
+ 'type' => 'number',
152
+ ),
153
  array(
154
  'type' => 'sectionend',
155
  'id' => 'wcj_price_by_country_options',
includes/settings/wcj-settings-product-open-pricing.php CHANGED
@@ -2,15 +2,21 @@
2
  /**
3
  * Booster for WooCommerce - Settings - Product Open Pricing
4
  *
5
- * @version 3.3.0
6
  * @since 2.8.0
7
  * @author Algoritmika Ltd.
8
  * @todo set default for "wcj_product_open_price_enable_js_validation" to "yes"
 
 
9
  */
10
 
11
  if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
12
 
13
  $default_price_step = 1 / pow( 10, absint( get_option( 'woocommerce_price_num_decimals', 2 ) ) );
 
 
 
 
14
  return array(
15
  array(
16
  'title' => __( 'Options', 'woocommerce-jetpack' ),
@@ -54,6 +60,13 @@ return array(
54
  'type' => 'number',
55
  'custom_attributes' => array( 'step' => '0.0001', 'min' => '0.0001' ),
56
  ),
 
 
 
 
 
 
 
57
  array(
58
  'title' => __( 'Message on Empty Price', 'woocommerce-jetpack' ),
59
  'id' => 'wcj_product_open_price_messages_required',
2
  /**
3
  * Booster for WooCommerce - Settings - Product Open Pricing
4
  *
5
+ * @version 3.5.1
6
  * @since 2.8.0
7
  * @author Algoritmika Ltd.
8
  * @todo set default for "wcj_product_open_price_enable_js_validation" to "yes"
9
+ * @todo (maybe) `$positions` - add `woocommerce_before_add_to_cart_quantity` and `woocommerce_after_add_to_cart_quantity` (on `! WCJ_IS_WC_VERSION_BELOW_3` and also recheck "Grouped product add to cart" template)
10
+ * @todo (maybe) `$positions` - add "Frontend Position Priority" option
11
  */
12
 
13
  if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
14
 
15
  $default_price_step = 1 / pow( 10, absint( get_option( 'woocommerce_price_num_decimals', 2 ) ) );
16
+ $positions = array(
17
+ 'woocommerce_before_add_to_cart_button' => __( 'Before add to cart button', 'woocommerce-jetpack' ), // since WC v2.1.0
18
+ 'woocommerce_after_add_to_cart_button' => __( 'After add to cart button', 'woocommerce-jetpack' ), // since WC v2.1.0
19
+ );
20
  return array(
21
  array(
22
  'title' => __( 'Options', 'woocommerce-jetpack' ),
60
  'type' => 'number',
61
  'custom_attributes' => array( 'step' => '0.0001', 'min' => '0.0001' ),
62
  ),
63
+ array(
64
+ 'title' => __( 'Frontend Position', 'woocommerce-jetpack' ),
65
+ 'id' => 'wcj_product_open_price_position',
66
+ 'default' => 'woocommerce_before_add_to_cart_button',
67
+ 'type' => 'select',
68
+ 'options' => $positions,
69
+ ),
70
  array(
71
  'title' => __( 'Message on Empty Price', 'woocommerce-jetpack' ),
72
  'id' => 'wcj_product_open_price_messages_required',
includes/settings/wcj-settings-shipping-time.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Settings - Shipping Time
4
  *
5
- * @version 3.5.0
6
  * @since 3.5.0
7
  * @author Algoritmika Ltd.
8
  * @todo estimated date calculation
@@ -36,7 +36,7 @@ $settings = array_merge( $settings, array(
36
  'default' => 'no',
37
  ),
38
  array(
39
- 'title' => __( 'Use Shipping Classes', 'woocommerce-jetpack' ),
40
  'desc' => __( 'Enable', 'woocommerce-jetpack' ),
41
  'desc_tip' => __( 'Enable this if you want to set options for each shipping class separately.', 'woocommerce-jetpack' ) . ' ' .
42
  __( 'Save changes after enabling this option.', 'woocommerce-jetpack' ) . ' ' . apply_filters( 'booster_message', '', 'desc' ),
2
  /**
3
  * Booster for WooCommerce - Settings - Shipping Time
4
  *
5
+ * @version 3.5.1
6
  * @since 3.5.0
7
  * @author Algoritmika Ltd.
8
  * @todo estimated date calculation
36
  'default' => 'no',
37
  ),
38
  array(
39
+ 'title' => __( 'Use Product Shipping Classes', 'woocommerce-jetpack' ),
40
  'desc' => __( 'Enable', 'woocommerce-jetpack' ),
41
  'desc_tip' => __( 'Enable this if you want to set options for each shipping class separately.', 'woocommerce-jetpack' ) . ' ' .
42
  __( 'Save changes after enabling this option.', 'woocommerce-jetpack' ) . ' ' . apply_filters( 'booster_message', '', 'desc' ),
includes/shortcodes/class-wcj-shortcodes-cart.php ADDED
@@ -0,0 +1,272 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Booster for WooCommerce - Shortcodes - Cart
4
+ *
5
+ * @version 3.5.1
6
+ * @since 3.5.1
7
+ * @author Algoritmika Ltd.
8
+ */
9
+
10
+ if ( ! defined( 'ABSPATH' ) ) exit;
11
+
12
+ if ( ! class_exists( 'WCJ_Cart_Shortcodes' ) ) :
13
+
14
+ class WCJ_Cart_Shortcodes extends WCJ_Shortcodes {
15
+
16
+ /**
17
+ * Constructor.
18
+ *
19
+ * @version 3.5.1
20
+ * @since 3.5.1
21
+ * @todo (maybe) add `$atts['multiply_by']` to (all) shortcodes
22
+ */
23
+ function __construct() {
24
+
25
+ $this->the_shortcodes = array(
26
+ 'wcj_cart_discount_tax',
27
+ 'wcj_cart_discount_total',
28
+ 'wcj_cart_items_total_quantity',
29
+ 'wcj_cart_items_total_weight',
30
+ 'wcj_cart_fee_tax',
31
+ 'wcj_cart_fee_total',
32
+ 'wcj_cart_function',
33
+ 'wcj_cart_shipping_total',
34
+ 'wcj_cart_shipping_tax',
35
+ 'wcj_cart_subtotal',
36
+ 'wcj_cart_subtotal_tax',
37
+ 'wcj_cart_tax',
38
+ 'wcj_cart_total',
39
+ 'wcj_cart_total_ex_tax',
40
+ );
41
+
42
+ $this->the_atts = array(
43
+ 'multiply_by' => 1,
44
+ );
45
+
46
+ parent::__construct();
47
+
48
+ }
49
+
50
+ /**
51
+ * wcj_cart_function.
52
+ *
53
+ * @version 3.5.1
54
+ * @since 3.5.1
55
+ * @todo add `$atts['function_args']`
56
+ */
57
+ function wcj_cart_function( $atts ) {
58
+ if ( isset( $atts['function_name'] ) && '' != $atts['function_name'] && ( $_cart = WC()->cart ) ) {
59
+ return $_cart->{$atts['function_name']}();
60
+ }
61
+ return '';
62
+ }
63
+
64
+ /**
65
+ * wcj_cart_fee_tax.
66
+ *
67
+ * @version 3.5.1
68
+ * @since 3.5.1
69
+ */
70
+ function wcj_cart_fee_tax( $atts ) {
71
+ if ( $_cart = WC()->cart ) {
72
+ return wc_price( $_cart->get_fee_tax() );
73
+ }
74
+ return '';
75
+ }
76
+
77
+ /**
78
+ * wcj_cart_fee_total.
79
+ *
80
+ * Get total fee amount.
81
+ *
82
+ * @version 3.5.1
83
+ * @since 3.5.1
84
+ */
85
+ function wcj_cart_fee_total( $atts ) {
86
+ if ( $_cart = WC()->cart ) {
87
+ return wc_price( $_cart->get_fee_total() );
88
+ }
89
+ return '';
90
+ }
91
+
92
+ /**
93
+ * wcj_cart_discount_tax.
94
+ *
95
+ * Get discount_tax.
96
+ *
97
+ * @version 3.5.1
98
+ * @since 3.5.1
99
+ * @todo check `$_cart->get_cart_discount_tax_total( )` // Get the total of all cart tax discounts (used for discounts on tax inclusive prices).
100
+ */
101
+ function wcj_cart_discount_tax( $atts ) {
102
+ if ( $_cart = WC()->cart ) {
103
+ return wc_price( $_cart->get_discount_tax() );
104
+ }
105
+ return '';
106
+ }
107
+
108
+ /**
109
+ * wcj_cart_discount_total.
110
+ *
111
+ * Get discount_total.
112
+ *
113
+ * @version 3.5.1
114
+ * @since 3.5.1
115
+ * @todo check `$_cart->get_cart_discount_total( )` // Get the total of all cart discounts.
116
+ */
117
+ function wcj_cart_discount_total( $atts ) {
118
+ if ( $_cart = WC()->cart ) {
119
+ return wc_price( $_cart->get_discount_total() );
120
+ }
121
+ return '';
122
+ }
123
+
124
+ /**
125
+ * wcj_cart_items_total_quantity.
126
+ *
127
+ * @version 3.5.1
128
+ * @since 2.7.0
129
+ * @todo (maybe) add alias `[wcj_cart_contents_count]`
130
+ */
131
+ function wcj_cart_items_total_quantity( $atts ) {
132
+ if ( $_cart = WC()->cart ) {
133
+ return $_cart->get_cart_contents_count();
134
+ }
135
+ return '';
136
+ }
137
+
138
+ /**
139
+ * wcj_cart_items_total_weight.
140
+ *
141
+ * @version 3.5.1
142
+ * @todo (maybe) add alias `[wcj_cart_contents_weight]`
143
+ */
144
+ function wcj_cart_items_total_weight( $atts ) {
145
+ if ( $_cart = WC()->cart ) {
146
+ return $_cart->get_cart_contents_weight();
147
+ }
148
+ return '';
149
+ }
150
+
151
+ /**
152
+ * wcj_cart_total.
153
+ *
154
+ * Gets the cart contents total (after calculation).
155
+ *
156
+ * @version 3.5.0
157
+ * @since 2.8.0
158
+ * @todo ! check `$_cart->get_total( string $context = 'view' )` // Gets cart total after calculation.
159
+ */
160
+ function wcj_cart_total( $atts ) {
161
+ if ( $_cart = WC()->cart ) {
162
+ if ( 1 != $atts['multiply_by'] ) {
163
+ // `get_cart_contents_total()` - Gets cart total. This is the total of items in the cart, but after discounts. Subtotal is before discounts.
164
+ $cart_total = wc_prices_include_tax() ? WC()->cart->get_cart_contents_total() + WC()->cart->get_cart_contents_tax() : WC()->cart->get_cart_contents_total();
165
+ return wc_price( $atts['multiply_by'] * $cart_total );
166
+ } else {
167
+ return $_cart->get_cart_total();
168
+ }
169
+ }
170
+ return '';
171
+ }
172
+
173
+ /**
174
+ * wcj_cart_subtotal.
175
+ *
176
+ * Gets the sub total (after calculation).
177
+ *
178
+ * @version 3.5.1
179
+ * @since 3.5.1
180
+ * @todo `get_cart_subtotal( boolean $compound = false )` (i.e. add `$atts['compound']`)
181
+ * @todo check `$_cart->get_displayed_subtotal()`
182
+ * @todo check `$_cart->get_subtotal()`
183
+ */
184
+ function wcj_cart_subtotal( $atts ) {
185
+ if ( $_cart = WC()->cart ) {
186
+ return $_cart->get_cart_subtotal();
187
+ }
188
+ return '';
189
+ }
190
+
191
+ /**
192
+ * wcj_cart_subtotal_tax.
193
+ *
194
+ * @version 3.5.1
195
+ * @since 3.5.1
196
+ */
197
+ function wcj_cart_subtotal_tax( $atts ) {
198
+ if ( $_cart = WC()->cart ) {
199
+ return wc_price( $_cart->get_subtotal_tax() );
200
+ }
201
+ return '';
202
+ }
203
+
204
+ /**
205
+ * wcj_cart_tax.
206
+ *
207
+ * Gets the cart tax (after calculation).
208
+ *
209
+ * @version 3.5.1
210
+ * @since 3.5.1
211
+ * @todo check `$_cart->get_total_tax()`
212
+ * @todo check `$_cart->get_cart_contents_tax()`
213
+ * @todo check `$_cart->get_tax_amount( string $tax_rate_id )` // Get a tax amount.
214
+ * @todo check `$_cart->get_taxes_total( boolean $compound = true, boolean $display = true )` // Get tax row amounts with or without compound taxes includes.
215
+ */
216
+ function wcj_cart_tax( $atts ) {
217
+ if ( $_cart = WC()->cart ) {
218
+ return $_cart->get_cart_tax();
219
+ }
220
+ return '';
221
+ }
222
+
223
+ /**
224
+ * wcj_cart_total_ex_tax.
225
+ *
226
+ * Gets the total excluding taxes.
227
+ *
228
+ * @version 3.5.1
229
+ * @since 3.5.1
230
+ */
231
+ function wcj_cart_total_ex_tax( $atts ) {
232
+ if ( $_cart = WC()->cart ) {
233
+ return $_cart->get_total_ex_tax();
234
+ }
235
+ return '';
236
+ }
237
+
238
+ /**
239
+ * wcj_cart_shipping_total.
240
+ *
241
+ * @version 3.5.1
242
+ * @since 3.5.1
243
+ * @todo check `$_cart->get_shipping_total()`
244
+ */
245
+ function wcj_cart_shipping_total( $atts ) {
246
+ if ( $_cart = WC()->cart ) {
247
+ return $_cart->get_cart_shipping_total();
248
+ }
249
+ return '';
250
+ }
251
+
252
+ /**
253
+ * wcj_cart_shipping_tax.
254
+ *
255
+ * Get shipping_tax.
256
+ *
257
+ * @version 3.5.1
258
+ * @since 3.5.1
259
+ * @todo check `$_cart->get_shipping_tax_amount( string $tax_rate_id )` // Get a tax amount
260
+ */
261
+ function wcj_cart_shipping_tax( $atts ) {
262
+ if ( $_cart = WC()->cart ) {
263
+ return wc_price( $_cart->get_shipping_tax() );
264
+ }
265
+ return '';
266
+ }
267
+
268
+ }
269
+
270
+ endif;
271
+
272
+ return new WCJ_Cart_Shortcodes();
includes/shortcodes/class-wcj-shortcodes-general.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Shortcodes - General
4
  *
5
- * @version 3.5.0
6
  * @author Algoritmika Ltd.
7
  */
8
 
@@ -15,16 +15,13 @@ class WCJ_General_Shortcodes extends WCJ_Shortcodes {
15
  /**
16
  * Constructor.
17
  *
18
- * @version 3.5.0
19
  */
20
  function __construct() {
21
 
22
  $this->the_shortcodes = array(
23
  'wcj_barcode',
24
  'wcj_button_toggle_tax_display',
25
- 'wcj_cart_items_total_quantity',
26
- 'wcj_cart_items_total_weight',
27
- 'wcj_cart_total',
28
  'wcj_country_select_drop_down_list',
29
  'wcj_currency_exchange_rate',
30
  'wcj_currency_exchange_rates_table',
@@ -847,47 +844,6 @@ class WCJ_General_Shortcodes extends WCJ_Shortcodes {
847
  return $this->wcj_wpml( $atts, $content );
848
  }
849
 
850
- /**
851
- * wcj_cart_items_total_quantity.
852
- *
853
- * @version 2.7.0
854
- * @since 2.7.0
855
- */
856
- function wcj_cart_items_total_quantity( $atts ) {
857
- $total_quantity = 0;
858
- $_items = WC()->cart->get_cart();
859
- foreach( $_items as $_item ) {
860
- $total_quantity += $_item['quantity'];
861
- }
862
- return $total_quantity;
863
- }
864
-
865
- /**
866
- * wcj_cart_items_total_weight.
867
- */
868
- function wcj_cart_items_total_weight( $atts ) {
869
- $the_cart = WC()->cart;
870
- return $the_cart->cart_contents_weight;
871
- }
872
-
873
- /**
874
- * wcj_cart_total.
875
- *
876
- * @version 3.5.0
877
- * @since 2.8.0
878
- */
879
- function wcj_cart_total( $atts ) {
880
- if ( $_cart = WC()->cart ) {
881
- if ( 1 != $atts['multiply_by'] ) {
882
- $cart_total = wc_prices_include_tax() ? WC()->cart->get_cart_contents_total() + WC()->cart->get_cart_contents_tax() : WC()->cart->get_cart_contents_total();
883
- return wc_price( $atts['multiply_by'] * $cart_total );
884
- } else {
885
- return $_cart->get_cart_total();
886
- }
887
- }
888
- return '';
889
- }
890
-
891
  /**
892
  * wcj_current_date.
893
  *
2
  /**
3
  * Booster for WooCommerce - Shortcodes - General
4
  *
5
+ * @version 3.5.1
6
  * @author Algoritmika Ltd.
7
  */
8
 
15
  /**
16
  * Constructor.
17
  *
18
+ * @version 3.5.1
19
  */
20
  function __construct() {
21
 
22
  $this->the_shortcodes = array(
23
  'wcj_barcode',
24
  'wcj_button_toggle_tax_display',
 
 
 
25
  'wcj_country_select_drop_down_list',
26
  'wcj_currency_exchange_rate',
27
  'wcj_currency_exchange_rates_table',
844
  return $this->wcj_wpml( $atts, $content );
845
  }
846
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
847
  /**
848
  * wcj_current_date.
849
  *
includes/shortcodes/class-wcj-shortcodes-order-items.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Booster for WooCommerce - Shortcodes - Order Items
4
  *
5
- * @version 3.4.0
6
  * @author Algoritmika Ltd.
7
  */
8
 
@@ -440,7 +440,7 @@ class WCJ_Order_Items_Shortcodes extends WCJ_Shortcodes {
440
  /**
441
  * get_cell.
442
  *
443
- * @version 3.4.0
444
  * @since 3.2.0
445
  */
446
  function get_cell( $column, $column_param, $atts, $the_order, $columns, $item_counter, $item_id, $item, $the_product ) {
@@ -529,6 +529,9 @@ class WCJ_Order_Items_Shortcodes extends WCJ_Shortcodes {
529
  case 'item_product_input_fields':
530
  return wcj_get_product_input_fields( $item );
531
 
 
 
 
532
  case 'item_product_addons':
533
  return wcj_get_product_addons( $item, wcj_get_order_currency( $this->the_order ) );
534
 
2
  /**
3
  * Booster for WooCommerce - Shortcodes - Order Items
4
  *
5
+ * @version 3.5.1
6
  * @author Algoritmika Ltd.
7
  */
8
 
440
  /**
441
  * get_cell.
442
  *
443
+ * @version 3.5.1
444
  * @since 3.2.0
445
  */
446
  function get_cell( $column, $column_param, $atts, $the_order, $columns, $item_counter, $item_id, $item, $the_product ) {
529
  case 'item_product_input_fields':
530
  return wcj_get_product_input_fields( $item );
531
 
532
+ case 'item_product_input_fields_with_titles':
533
+ return wcj_get_product_input_fields( $item, true, ( '' != $column_param ? $column_param : ', ' ) );
534
+
535
  case 'item_product_addons':
536
  return wcj_get_product_addons( $item, wcj_get_order_currency( $this->the_order ) );
537
 
readme.txt CHANGED
@@ -3,7 +3,7 @@ Contributors: algoritmika, anbinder
3
  Tags: woocommerce, booster for woocommerce, woocommerce jetpack
4
  Requires at least: 4.4
5
  Tested up to: 4.9
6
- Stable tag: 3.5.0
7
  License: GNU General Public License v3.0
8
  License URI: http://www.gnu.org/licenses/gpl-3.0.html
9
 
@@ -182,6 +182,24 @@ You can see the differences between versions in this [table](https://booster.io/
182
 
183
  == Changelog ==
184
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
185
  = 3.5.0 - 04/04/2018 =
186
  * Dev - PRICES & CURRENCIES - Currency Exchange Rates - Exchange Rates Server - "Bank of England (BOE)" server added.
187
  * Dev - PRICES & CURRENCIES - Currency Exchange Rates - Exchange Rates Server - "Google" server added.
3
  Tags: woocommerce, booster for woocommerce, woocommerce jetpack
4
  Requires at least: 4.4
5
  Tested up to: 4.9
6
+ Stable tag: 3.5.1
7
  License: GNU General Public License v3.0
8
  License URI: http://www.gnu.org/licenses/gpl-3.0.html
9
 
182
 
183
  == Changelog ==
184
 
185
+ = 3.5.1 - 09/04/2018 =
186
+ * Dev - PRICES & CURRENCIES - Multicurrency (Currency Switcher) - Advanced: Price Filters Priority - Added to all hooks.
187
+ * Dev - PRICES & CURRENCIES - Prices and Currencies by Country - "Advanced: Price Filters Priority" option added.
188
+ * Dev - PRICES & CURRENCIES - Product Open Pricing (Name Your Price) - "Frontend Position" option added.
189
+ * Dev - CART & CHECKOUT - Mini Cart Custom Info - Admin settings restyled.
190
+ * Fix - SHIPPING & ORDERS - Left to Free Shipping - `wcj_get_left_to_free_shipping()` - WooCommerce below v3.3.0 compatibility issue fixed.
191
+ * Dev - SHIPPING & ORDERS - Shipping Time - Admin settings - Description updated.
192
+ * Dev - Shortcodes - Code refactoring - "Cart" shortcodes moved to new `class-wcj-shortcodes-cart.php` file.
193
+ * Dev - Shortcodes - Cart - `[wcj_cart_items_total_quantity]` - Code refactoring.
194
+ * Dev - Shortcodes - Cart - `[wcj_cart_items_total_weight]` - Code refactoring.
195
+ * Dev - Shortcodes - Cart - `[wcj_cart_discount_tax]`, `[wcj_cart_discount_total]` shortcodes added.
196
+ * Dev - Shortcodes - Cart - `[wcj_cart_fee_tax]`, `[wcj_cart_fee_total]` shortcodes added.
197
+ * Dev - Shortcodes - Cart - `[wcj_cart_function]` shortcode added.
198
+ * Dev - Shortcodes - Cart - `[wcj_cart_shipping_total]`, `[wcj_cart_shipping_tax]` shortcodes added.
199
+ * Dev - Shortcodes - Cart - `[wcj_cart_subtotal]`, `[wcj_cart_subtotal_tax]` shortcodes added.
200
+ * Dev - Shortcodes - Cart - `[wcj_cart_tax]`, `[wcj_cart_total_ex_tax]` shortcodes added.
201
+ * Dev - Shortcodes - Orders - `[wcj_order_items_table]` - Columns - `item_product_input_fields_with_titles` column added.
202
+
203
  = 3.5.0 - 04/04/2018 =
204
  * Dev - PRICES & CURRENCIES - Currency Exchange Rates - Exchange Rates Server - "Bank of England (BOE)" server added.
205
  * Dev - PRICES & CURRENCIES - Currency Exchange Rates - Exchange Rates Server - "Google" server added.
woocommerce-jetpack.php CHANGED
@@ -3,7 +3,7 @@
3
  Plugin Name: Booster for WooCommerce
4
  Plugin URI: https://booster.io
5
  Description: Supercharge your WooCommerce site with these awesome powerful features.
6
- Version: 3.5.0
7
  Author: Algoritmika Ltd
8
  Author URI: https://booster.io
9
  Text Domain: woocommerce-jetpack
@@ -57,7 +57,7 @@ final class WC_Jetpack {
57
  * @var string
58
  * @since 2.4.7
59
  */
60
- public $version = '3.5.0';
61
 
62
  /**
63
  * @var WC_Jetpack The single instance of the class
3
  Plugin Name: Booster for WooCommerce
4
  Plugin URI: https://booster.io
5
  Description: Supercharge your WooCommerce site with these awesome powerful features.
6
+ Version: 3.5.1
7
  Author: Algoritmika Ltd
8
  Author URI: https://booster.io
9
  Text Domain: woocommerce-jetpack
57
  * @var string
58
  * @since 2.4.7
59
  */
60
+ public $version = '3.5.1';
61
 
62
  /**
63
  * @var WC_Jetpack The single instance of the class