Version Description
- 12/04/2018 =
- Dev - PRODUCTS - Cross Sells - Initial module release.
- Dev - PRODUCTS - Product Input Fields - Shortcodes are now processed in product input fields titles and placeholders.
- Dev - PRODUCTS - Upsells - Initial module release.
- Fix - CART & CHECKOUT - Empty Cart Button - Button position on the Checkout page - Some possible positions removed (fixes the issue with "Place order" button not working etc.).
- Dev - CART & CHECKOUT - Empty Cart Button - Button position on the Cart page - More possible positions added.
- Fix - PDF INVOICING & PACKING SLIPS - Email Options - Checking for invoice to be created before attaching it to email (fixes the issue with empty invoices attached with zero total orders, and "Do not create if order total equals zero" option enabled).
- Dev - EMAILS & MISC. - Admin Tools - "Show Booster Menus Only to Admin" option added.
Download this release
Release Info
Developer | algoritmika |
Plugin | Booster for WooCommerce |
Version | 3.5.3 |
Comparing to | |
See all releases |
Code changes from version 3.5.2 to 3.5.3
- includes/admin/class-wcj-tools.php +3 -3
- includes/admin/wcj-modules-cats.php +3 -1
- includes/class-wcj-cross-sells.php +90 -0
- includes/class-wcj-empty-cart-button.php +17 -3
- includes/class-wcj-upsells.php +82 -0
- includes/core/class-wcj-admin.php +3 -3
- includes/core/wcj-modules.php +3 -1
- includes/input-fields/class-wcj-product-input-fields-core.php +8 -7
- includes/pdf-invoices/submodules/class-wcj-pdf-invoicing-emails.php +7 -3
- includes/price-by-country/class-wcj-price-by-country-core.php +1 -0
- includes/settings/wcj-settings-admin-tools.php +8 -1
- includes/settings/wcj-settings-cross-sells.php +77 -0
- includes/settings/wcj-settings-empty-cart.php +15 -16
- includes/settings/wcj-settings-upsells.php +62 -0
- readme.txt +12 -1
- woocommerce-jetpack.php +2 -2
includes/admin/class-wcj-tools.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
/**
|
3 |
* Booster for WooCommerce Tools
|
4 |
*
|
5 |
-
* @version
|
6 |
* @author Algoritmika Ltd.
|
7 |
*/
|
8 |
|
@@ -24,14 +24,14 @@ class WCJ_Tools {
|
|
24 |
/**
|
25 |
* add_wcj_tools.
|
26 |
*
|
27 |
-
* @version
|
28 |
*/
|
29 |
function add_wcj_tools() {
|
30 |
add_submenu_page(
|
31 |
'woocommerce',
|
32 |
__( 'Booster for WooCommerce Tools', 'woocommerce-jetpack' ),
|
33 |
__( 'Booster Tools', 'woocommerce-jetpack' ),
|
34 |
-
'manage_woocommerce',
|
35 |
'wcj-tools',
|
36 |
array( $this, 'create_tools_page' )
|
37 |
);
|
2 |
/**
|
3 |
* Booster for WooCommerce Tools
|
4 |
*
|
5 |
+
* @version 3.5.3
|
6 |
* @author Algoritmika Ltd.
|
7 |
*/
|
8 |
|
24 |
/**
|
25 |
* add_wcj_tools.
|
26 |
*
|
27 |
+
* @version 3.5.3
|
28 |
*/
|
29 |
function add_wcj_tools() {
|
30 |
add_submenu_page(
|
31 |
'woocommerce',
|
32 |
__( 'Booster for WooCommerce Tools', 'woocommerce-jetpack' ),
|
33 |
__( 'Booster Tools', 'woocommerce-jetpack' ),
|
34 |
+
( 'yes' === get_option( 'wcj_' . 'admin_tools' . '_enabled', 'no' ) && 'yes' === get_option( 'wcj_admin_tools_show_menus_to_admin_only', 'no' ) ? 'manage_options' : 'manage_woocommerce' ),
|
35 |
'wcj-tools',
|
36 |
array( $this, 'create_tools_page' )
|
37 |
);
|
includes/admin/wcj-modules-cats.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
/**
|
3 |
* Booster for WooCommerce - Modules Array
|
4 |
*
|
5 |
-
* @version 3.5.
|
6 |
* @since 2.2.0
|
7 |
* @author Algoritmika Ltd.
|
8 |
* @todo (maybe) split "Shipping & Orders", "Cart & Checkout", "Products", "Prices & Currencies" etc.
|
@@ -66,6 +66,8 @@ return apply_filters( 'wcj_modules', array(
|
|
66 |
'product_tabs',
|
67 |
'product_custom_info',
|
68 |
'related_products',
|
|
|
|
|
69 |
'sorting',
|
70 |
'sku',
|
71 |
'stock',
|
2 |
/**
|
3 |
* Booster for WooCommerce - Modules Array
|
4 |
*
|
5 |
+
* @version 3.5.3
|
6 |
* @since 2.2.0
|
7 |
* @author Algoritmika Ltd.
|
8 |
* @todo (maybe) split "Shipping & Orders", "Cart & Checkout", "Products", "Prices & Currencies" etc.
|
66 |
'product_tabs',
|
67 |
'product_custom_info',
|
68 |
'related_products',
|
69 |
+
'cross_sells',
|
70 |
+
'upsells',
|
71 |
'sorting',
|
72 |
'sku',
|
73 |
'stock',
|
includes/class-wcj-cross-sells.php
ADDED
@@ -0,0 +1,90 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Booster for WooCommerce - Module - Cross-sells
|
4 |
+
*
|
5 |
+
* @version 3.5.3
|
6 |
+
* @since 3.5.3
|
7 |
+
* @author Algoritmika Ltd.
|
8 |
+
*/
|
9 |
+
|
10 |
+
if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
|
11 |
+
|
12 |
+
if ( ! class_exists( 'WCJ_Cross_Sells' ) ) :
|
13 |
+
|
14 |
+
class WCJ_Cross_Sells extends WCJ_Module {
|
15 |
+
|
16 |
+
/**
|
17 |
+
* Constructor.
|
18 |
+
*
|
19 |
+
* @version 3.5.3
|
20 |
+
* @since 3.5.3
|
21 |
+
* @todo use `woocommerce_product_get_cross_sell_ids` (since WC v3.0.0)
|
22 |
+
*/
|
23 |
+
function __construct() {
|
24 |
+
|
25 |
+
$this->id = 'cross_sells';
|
26 |
+
$this->short_desc = __( 'Cross-sells', 'woocommerce-jetpack' );
|
27 |
+
$this->extra_desc = __( 'Cross-sells are products which you promote in the cart, based on the current product.', 'woocommerce' );
|
28 |
+
$this->desc = __( 'Customize WooCommerce cross-sells products display.', 'woocommerce-jetpack' );
|
29 |
+
$this->link_slug = 'woocommerce-cross-sells';
|
30 |
+
parent::__construct();
|
31 |
+
|
32 |
+
if ( $this->is_enabled() ) {
|
33 |
+
add_filter( 'woocommerce_cross_sells_total', array( $this, 'cross_sells_total' ), PHP_INT_MAX );
|
34 |
+
add_filter( 'woocommerce_cross_sells_columns', array( $this, 'cross_sells_columns' ), PHP_INT_MAX );
|
35 |
+
add_filter( 'woocommerce_cross_sells_orderby', array( $this, 'cross_sells_orderby' ), PHP_INT_MAX );
|
36 |
+
if ( ! WCJ_IS_WC_VERSION_BELOW_3_3_0 ) {
|
37 |
+
add_filter( 'woocommerce_cross_sells_order', array( $this, 'cross_sells_order' ), PHP_INT_MAX );
|
38 |
+
}
|
39 |
+
}
|
40 |
+
|
41 |
+
}
|
42 |
+
|
43 |
+
/**
|
44 |
+
* cross_sells_order.
|
45 |
+
*
|
46 |
+
* @version 3.5.3
|
47 |
+
* @since 3.5.3
|
48 |
+
*/
|
49 |
+
function cross_sells_order( $order ) {
|
50 |
+
return ( 'no_changes' != ( $_order = get_option( 'wcj_cross_sells_order', 'no_changes' ) ) ? $_order : $order );
|
51 |
+
}
|
52 |
+
|
53 |
+
/**
|
54 |
+
* cross_sells_orderby.
|
55 |
+
*
|
56 |
+
* @version 3.5.3
|
57 |
+
* @since 3.5.3
|
58 |
+
*/
|
59 |
+
function cross_sells_orderby( $orderby ) {
|
60 |
+
return ( 'no_changes' != ( $_orderby = get_option( 'wcj_cross_sells_orderby', 'no_changes' ) ) ? $_orderby : $orderby );
|
61 |
+
}
|
62 |
+
|
63 |
+
/**
|
64 |
+
* cross_sells_columns.
|
65 |
+
*
|
66 |
+
* @version 3.5.3
|
67 |
+
* @since 3.5.3
|
68 |
+
*/
|
69 |
+
function cross_sells_columns( $columns ) {
|
70 |
+
return ( 0 != ( $_columns = get_option( 'wcj_cross_sells_columns', 0 ) ) ? $_columns : $columns );
|
71 |
+
}
|
72 |
+
|
73 |
+
/**
|
74 |
+
* cross_sells_total.
|
75 |
+
*
|
76 |
+
* @version 3.5.3
|
77 |
+
* @since 3.5.3
|
78 |
+
*/
|
79 |
+
function cross_sells_total( $limit ) {
|
80 |
+
if ( 'yes' === get_option( 'wcj_cross_sells_hide', 'no' ) ) {
|
81 |
+
return 0;
|
82 |
+
}
|
83 |
+
return ( 0 != ( $_limit = get_option( 'wcj_cross_sells_total', 0 ) ) ? $_limit : $limit );
|
84 |
+
}
|
85 |
+
|
86 |
+
}
|
87 |
+
|
88 |
+
endif;
|
89 |
+
|
90 |
+
return new WCJ_Cross_Sells();
|
includes/class-wcj-empty-cart-button.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
/**
|
3 |
* Booster for WooCommerce - Module - Empty Cart Button
|
4 |
*
|
5 |
-
* @version
|
6 |
* @since 2.2.1
|
7 |
* @author Algoritmika Ltd.
|
8 |
*/
|
@@ -16,8 +16,9 @@ class WCJ_Empty_Cart_Button extends WCJ_Module {
|
|
16 |
/**
|
17 |
* Constructor.
|
18 |
*
|
19 |
-
* @version
|
20 |
-
* @
|
|
|
21 |
*/
|
22 |
function __construct() {
|
23 |
|
@@ -35,6 +36,19 @@ class WCJ_Empty_Cart_Button extends WCJ_Module {
|
|
35 |
add_action( $empty_cart_cart_position, array( $this, 'add_empty_cart_link' ) );
|
36 |
}
|
37 |
if ( 'disable' != ( $empty_cart_checkout_position = get_option( 'wcj_empty_cart_checkout_position', 'disable' ) ) ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
38 |
add_action( $empty_cart_checkout_position, array( $this, 'add_empty_cart_link' ) );
|
39 |
}
|
40 |
}
|
2 |
/**
|
3 |
* Booster for WooCommerce - Module - Empty Cart Button
|
4 |
*
|
5 |
+
* @version 3.5.3
|
6 |
* @since 2.2.1
|
7 |
* @author Algoritmika Ltd.
|
8 |
*/
|
16 |
/**
|
17 |
* Constructor.
|
18 |
*
|
19 |
+
* @version 3.5.3
|
20 |
+
* @since 2.2.1
|
21 |
+
* @todo recheck and maybe copy additional options form "Empty Cart Button" plugin
|
22 |
*/
|
23 |
function __construct() {
|
24 |
|
36 |
add_action( $empty_cart_cart_position, array( $this, 'add_empty_cart_link' ) );
|
37 |
}
|
38 |
if ( 'disable' != ( $empty_cart_checkout_position = get_option( 'wcj_empty_cart_checkout_position', 'disable' ) ) ) {
|
39 |
+
$deprecated_hooks = array(
|
40 |
+
'woocommerce_checkout_before_customer_details' => 'woocommerce_before_checkout_form',
|
41 |
+
'woocommerce_checkout_billing' => 'woocommerce_before_checkout_form',
|
42 |
+
'woocommerce_checkout_shipping' => 'woocommerce_before_checkout_form',
|
43 |
+
'woocommerce_checkout_after_customer_details' => 'woocommerce_after_checkout_form',
|
44 |
+
'woocommerce_checkout_before_order_review' => 'woocommerce_after_checkout_form',
|
45 |
+
'woocommerce_checkout_order_review' => 'woocommerce_after_checkout_form',
|
46 |
+
'woocommerce_checkout_after_order_review' => 'woocommerce_after_checkout_form',
|
47 |
+
);
|
48 |
+
if ( isset( $deprecated_hooks[ $empty_cart_checkout_position ] ) ) {
|
49 |
+
$empty_cart_checkout_position = $deprecated_hooks[ $empty_cart_checkout_position ];
|
50 |
+
update_option( 'wcj_empty_cart_checkout_position', $empty_cart_checkout_position );
|
51 |
+
}
|
52 |
add_action( $empty_cart_checkout_position, array( $this, 'add_empty_cart_link' ) );
|
53 |
}
|
54 |
}
|
includes/class-wcj-upsells.php
ADDED
@@ -0,0 +1,82 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Booster for WooCommerce - Module - Upsells
|
4 |
+
*
|
5 |
+
* @version 3.5.3
|
6 |
+
* @since 3.5.3
|
7 |
+
* @author Algoritmika Ltd.
|
8 |
+
*/
|
9 |
+
|
10 |
+
if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
|
11 |
+
|
12 |
+
if ( ! class_exists( 'WCJ_Upsells' ) ) :
|
13 |
+
|
14 |
+
class WCJ_Upsells extends WCJ_Module {
|
15 |
+
|
16 |
+
/**
|
17 |
+
* Constructor.
|
18 |
+
*
|
19 |
+
* @version 3.5.3
|
20 |
+
* @since 3.5.3
|
21 |
+
* @todo (maybe) Hide Upsells - maybe better by `remove_action( 'woocommerce_after_single_product_summary', 'woocommerce_upsell_display', 15 );`
|
22 |
+
* @todo (maybe) use `apply_filters( 'woocommerce_upsell_display_args', array( 'posts_per_page' => $limit, 'orderby' => $orderby, 'columns' => $columns ) );`
|
23 |
+
* @todo (maybe) use `apply_filters( 'woocommerce_product_upsell_ids', $this->get_upsell_ids(), $this );` and `woocommerce_product_get_upsell_ids` (since WC v3.0.0)
|
24 |
+
*/
|
25 |
+
function __construct() {
|
26 |
+
|
27 |
+
$this->id = 'upsells';
|
28 |
+
$this->short_desc = __( 'Upsells', 'woocommerce-jetpack' );
|
29 |
+
$this->extra_desc = __( 'Upsells are products which you recommend instead of the currently viewed product, for example, products that are more profitable or better quality or more expensive.', 'woocommerce' );
|
30 |
+
$this->desc = __( 'Customize WooCommerce upsells products display.', 'woocommerce-jetpack' );
|
31 |
+
$this->link_slug = 'woocommerce-upsells';
|
32 |
+
parent::__construct();
|
33 |
+
|
34 |
+
if ( $this->is_enabled() ) {
|
35 |
+
add_filter( 'woocommerce_upsells_total', array( $this, 'upsells_total' ), PHP_INT_MAX );
|
36 |
+
add_filter( 'woocommerce_upsells_columns', array( $this, 'upsells_columns' ), PHP_INT_MAX );
|
37 |
+
add_filter( 'woocommerce_upsells_orderby', array( $this, 'upsells_orderby' ), PHP_INT_MAX );
|
38 |
+
}
|
39 |
+
|
40 |
+
}
|
41 |
+
|
42 |
+
/**
|
43 |
+
* upsells_orderby.
|
44 |
+
*
|
45 |
+
* @version 3.5.3
|
46 |
+
* @since 3.5.3
|
47 |
+
* @todo (maybe) check for `isset( $args['orderby'] )`
|
48 |
+
*/
|
49 |
+
function upsells_orderby( $orderby ) {
|
50 |
+
return ( 'no_changes' != ( $_orderby = get_option( 'wcj_upsells_orderby', 'no_changes' ) ) ? $_orderby : $orderby );
|
51 |
+
}
|
52 |
+
|
53 |
+
/**
|
54 |
+
* upsells_columns.
|
55 |
+
*
|
56 |
+
* @version 3.5.3
|
57 |
+
* @since 3.5.3
|
58 |
+
* @todo (maybe) check for `isset( $args['columns'] )`
|
59 |
+
*/
|
60 |
+
function upsells_columns( $columns ) {
|
61 |
+
return ( 0 != ( $_columns = get_option( 'wcj_upsells_columns', 0 ) ) ? $_columns : $columns );
|
62 |
+
}
|
63 |
+
|
64 |
+
/**
|
65 |
+
* upsells_total.
|
66 |
+
*
|
67 |
+
* @version 3.5.3
|
68 |
+
* @since 3.5.3
|
69 |
+
* @todo (maybe) check for `isset( $args['posts_per_page'] )`
|
70 |
+
*/
|
71 |
+
function upsells_total( $limit ) {
|
72 |
+
if ( 'yes' === get_option( 'wcj_upsells_hide', 'no' ) ) {
|
73 |
+
return 0;
|
74 |
+
}
|
75 |
+
return ( 0 != ( $_limit = get_option( 'wcj_upsells_total', 0 ) ) ? $_limit : $limit );
|
76 |
+
}
|
77 |
+
|
78 |
+
}
|
79 |
+
|
80 |
+
endif;
|
81 |
+
|
82 |
+
return new WCJ_Upsells();
|
includes/core/class-wcj-admin.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
/**
|
3 |
* Booster for WooCommerce - Core - Admin
|
4 |
*
|
5 |
-
* @version 3.
|
6 |
* @since 3.2.4
|
7 |
* @author Algoritmika Ltd.
|
8 |
*/
|
@@ -89,14 +89,14 @@ class WCJ_Admin {
|
|
89 |
/**
|
90 |
* Add menu item
|
91 |
*
|
92 |
-
* @version
|
93 |
*/
|
94 |
function booster_menu() {
|
95 |
add_submenu_page(
|
96 |
'woocommerce',
|
97 |
__( 'Booster for WooCommerce', 'woocommerce-jetpack' ),
|
98 |
__( 'Booster Settings', 'woocommerce-jetpack' ) ,
|
99 |
-
'manage_woocommerce',
|
100 |
'admin.php?page=wc-settings&tab=jetpack'
|
101 |
);
|
102 |
}
|
2 |
/**
|
3 |
* Booster for WooCommerce - Core - Admin
|
4 |
*
|
5 |
+
* @version 3.5.3
|
6 |
* @since 3.2.4
|
7 |
* @author Algoritmika Ltd.
|
8 |
*/
|
89 |
/**
|
90 |
* Add menu item
|
91 |
*
|
92 |
+
* @version 3.5.3
|
93 |
*/
|
94 |
function booster_menu() {
|
95 |
add_submenu_page(
|
96 |
'woocommerce',
|
97 |
__( 'Booster for WooCommerce', 'woocommerce-jetpack' ),
|
98 |
__( 'Booster Settings', 'woocommerce-jetpack' ) ,
|
99 |
+
( 'yes' === get_option( 'wcj_' . 'admin_tools' . '_enabled', 'no' ) && 'yes' === get_option( 'wcj_admin_tools_show_menus_to_admin_only', 'no' ) ? 'manage_options' : 'manage_woocommerce' ),
|
100 |
'admin.php?page=wc-settings&tab=jetpack'
|
101 |
);
|
102 |
}
|
includes/core/wcj-modules.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
/**
|
3 |
* Booster for WooCommerce - Modules
|
4 |
*
|
5 |
-
* @version 3.5.
|
6 |
* @since 3.2.4
|
7 |
* @author Algoritmika Ltd.
|
8 |
*/
|
@@ -24,6 +24,8 @@ $wcj_module_files = array(
|
|
24 |
'class-wcj-product-add-to-cart.php',
|
25 |
'class-wcj-add-to-cart-button-visibility.php',
|
26 |
'class-wcj-related-products.php',
|
|
|
|
|
27 |
'class-wcj-sku.php',
|
28 |
'class-wcj-stock.php',
|
29 |
'class-wcj-product-tabs.php',
|
2 |
/**
|
3 |
* Booster for WooCommerce - Modules
|
4 |
*
|
5 |
+
* @version 3.5.3
|
6 |
* @since 3.2.4
|
7 |
* @author Algoritmika Ltd.
|
8 |
*/
|
24 |
'class-wcj-product-add-to-cart.php',
|
25 |
'class-wcj-add-to-cart-button-visibility.php',
|
26 |
'class-wcj-related-products.php',
|
27 |
+
'class-wcj-cross-sells.php',
|
28 |
+
'class-wcj-upsells.php',
|
29 |
'class-wcj-sku.php',
|
30 |
'class-wcj-stock.php',
|
31 |
'class-wcj-product-tabs.php',
|
includes/input-fields/class-wcj-product-input-fields-core.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
/**
|
3 |
* Booster for WooCommerce - Product Input Fields - Core
|
4 |
*
|
5 |
-
* @version 3.5.
|
6 |
* @author Algoritmika Ltd.
|
7 |
*/
|
8 |
|
@@ -20,6 +20,7 @@ class WCJ_Product_Input_Fields_Core {
|
|
20 |
*
|
21 |
* @version 3.4.0
|
22 |
* @todo save all info (e.g. label etc.) in order meta
|
|
|
23 |
*/
|
24 |
function __construct( $scope ) {
|
25 |
$this->scope = $scope;
|
@@ -456,7 +457,7 @@ class WCJ_Product_Input_Fields_Core {
|
|
456 |
/**
|
457 |
* add_product_input_fields_to_frontend.
|
458 |
*
|
459 |
-
* @version 3.5.
|
460 |
* @todo `$set_value` - add "default" option for all other types except checkbox
|
461 |
* @todo `$set_value` - 'file' type
|
462 |
* @todo add `required` attributes
|
@@ -493,10 +494,10 @@ class WCJ_Product_Input_Fields_Core {
|
|
493 |
$datepicker_year = '';
|
494 |
}
|
495 |
|
496 |
-
$timepicker_format
|
497 |
$timepicker_interval = $this->get_value( 'wcj_product_input_fields_type_timepicker_interval_' . $this->scope . '_' . $i, $_product_id, 15 );
|
498 |
-
$timepicker_mintime
|
499 |
-
$timepicker_maxtime
|
500 |
if ( '' != $timepicker_mintime ) {
|
501 |
$timepicker_mintime = ' mintime="' . $timepicker_mintime . '"';
|
502 |
}
|
@@ -639,10 +640,10 @@ class WCJ_Product_Input_Fields_Core {
|
|
639 |
$field_order = $i;
|
640 |
}
|
641 |
$fields[ $field_order ] = apply_filters( 'wcj_product_input_field_frontend_html', $html, array(
|
642 |
-
'title' => $title,
|
643 |
'type' => $type,
|
644 |
'field_name' => $field_name,
|
645 |
-
'placeholder' => $placeholder,
|
646 |
'custom_attributes' => $custom_attributes,
|
647 |
'_product_id' => $_product_id,
|
648 |
'_field_nr' => $i,
|
2 |
/**
|
3 |
* Booster for WooCommerce - Product Input Fields - Core
|
4 |
*
|
5 |
+
* @version 3.5.3
|
6 |
* @author Algoritmika Ltd.
|
7 |
*/
|
8 |
|
20 |
*
|
21 |
* @version 3.4.0
|
22 |
* @todo save all info (e.g. label etc.) in order meta
|
23 |
+
* @todo add `do_shortcode()` to all applicable options (e.g. "Message on required")
|
24 |
*/
|
25 |
function __construct( $scope ) {
|
26 |
$this->scope = $scope;
|
457 |
/**
|
458 |
* add_product_input_fields_to_frontend.
|
459 |
*
|
460 |
+
* @version 3.5.3
|
461 |
* @todo `$set_value` - add "default" option for all other types except checkbox
|
462 |
* @todo `$set_value` - 'file' type
|
463 |
* @todo add `required` attributes
|
494 |
$datepicker_year = '';
|
495 |
}
|
496 |
|
497 |
+
$timepicker_format = $this->get_value( 'wcj_product_input_fields_type_timepicker_format_' . $this->scope . '_' . $i, $_product_id, 'hh:mm p' );
|
498 |
$timepicker_interval = $this->get_value( 'wcj_product_input_fields_type_timepicker_interval_' . $this->scope . '_' . $i, $_product_id, 15 );
|
499 |
+
$timepicker_mintime = $this->get_value( 'wcj_product_input_fields_type_timepicker_mintime_' . $this->scope . '_' . $i, $_product_id, '' );
|
500 |
+
$timepicker_maxtime = $this->get_value( 'wcj_product_input_fields_type_timepicker_maxtime_' . $this->scope . '_' . $i, $_product_id, '' );
|
501 |
if ( '' != $timepicker_mintime ) {
|
502 |
$timepicker_mintime = ' mintime="' . $timepicker_mintime . '"';
|
503 |
}
|
640 |
$field_order = $i;
|
641 |
}
|
642 |
$fields[ $field_order ] = apply_filters( 'wcj_product_input_field_frontend_html', $html, array(
|
643 |
+
'title' => do_shortcode( $title ),
|
644 |
'type' => $type,
|
645 |
'field_name' => $field_name,
|
646 |
+
'placeholder' => do_shortcode( $placeholder ),
|
647 |
'custom_attributes' => $custom_attributes,
|
648 |
'_product_id' => $_product_id,
|
649 |
'_field_nr' => $i,
|
includes/pdf-invoices/submodules/class-wcj-pdf-invoicing-emails.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
/**
|
3 |
* Booster for WooCommerce - PDF Invoicing - Email Options
|
4 |
*
|
5 |
-
* @version 3.
|
6 |
* @author Algoritmika Ltd.
|
7 |
*/
|
8 |
|
@@ -48,23 +48,27 @@ class WCJ_PDF_Invoicing_Emails extends WCJ_Module {
|
|
48 |
/**
|
49 |
* add_pdf_invoice_email_attachment.
|
50 |
*
|
51 |
-
* @version 3.
|
52 |
*/
|
53 |
function add_pdf_invoice_email_attachment( $attachments, $status, $order ) {
|
54 |
if ( ! $order || ! is_object( $order ) ) {
|
55 |
return $attachments;
|
56 |
}
|
57 |
$invoice_types_ids = wcj_get_enabled_invoice_types_ids();
|
|
|
58 |
foreach ( $invoice_types_ids as $invoice_type_id ) {
|
59 |
if ( false === $this->do_attach_for_payment_method( $invoice_type_id, wcj_order_get_payment_method( $order ) ) ) {
|
60 |
continue;
|
61 |
}
|
|
|
|
|
|
|
62 |
$send_on_statuses = get_option( 'wcj_invoicing_' . $invoice_type_id . '_attach_to_emails', array() );
|
63 |
if ( '' == $send_on_statuses ) {
|
64 |
$send_on_statuses = array();
|
65 |
}
|
66 |
if ( in_array( $status, $send_on_statuses ) ) {
|
67 |
-
$the_invoice = wcj_get_pdf_invoice(
|
68 |
$file_name = $the_invoice->get_pdf( 'F' );
|
69 |
if ( '' != $file_name ) {
|
70 |
$attachments[] = $file_name;
|
2 |
/**
|
3 |
* Booster for WooCommerce - PDF Invoicing - Email Options
|
4 |
*
|
5 |
+
* @version 3.5.3
|
6 |
* @author Algoritmika Ltd.
|
7 |
*/
|
8 |
|
48 |
/**
|
49 |
* add_pdf_invoice_email_attachment.
|
50 |
*
|
51 |
+
* @version 3.5.3
|
52 |
*/
|
53 |
function add_pdf_invoice_email_attachment( $attachments, $status, $order ) {
|
54 |
if ( ! $order || ! is_object( $order ) ) {
|
55 |
return $attachments;
|
56 |
}
|
57 |
$invoice_types_ids = wcj_get_enabled_invoice_types_ids();
|
58 |
+
$order_id = wcj_get_order_id( $order );
|
59 |
foreach ( $invoice_types_ids as $invoice_type_id ) {
|
60 |
if ( false === $this->do_attach_for_payment_method( $invoice_type_id, wcj_order_get_payment_method( $order ) ) ) {
|
61 |
continue;
|
62 |
}
|
63 |
+
if ( ! wcj_is_invoice_created( $order_id, $invoice_type_id ) ) {
|
64 |
+
continue;
|
65 |
+
}
|
66 |
$send_on_statuses = get_option( 'wcj_invoicing_' . $invoice_type_id . '_attach_to_emails', array() );
|
67 |
if ( '' == $send_on_statuses ) {
|
68 |
$send_on_statuses = array();
|
69 |
}
|
70 |
if ( in_array( $status, $send_on_statuses ) ) {
|
71 |
+
$the_invoice = wcj_get_pdf_invoice( $order_id, $invoice_type_id );
|
72 |
$file_name = $the_invoice->get_pdf( 'F' );
|
73 |
if ( '' != $file_name ) {
|
74 |
$attachments[] = $file_name;
|
includes/price-by-country/class-wcj-price-by-country-core.php
CHANGED
@@ -224,6 +224,7 @@ class WCJ_Price_by_Country_Core {
|
|
224 |
* get_customer_country_group_id.
|
225 |
*
|
226 |
* @version 3.4.0
|
|
|
227 |
* @todo (maybe) add `cart_and_checkout` override option
|
228 |
*/
|
229 |
function get_customer_country_group_id() {
|
224 |
* get_customer_country_group_id.
|
225 |
*
|
226 |
* @version 3.4.0
|
227 |
+
* @todo ! "We already know the group - nothing to calculate - return group"
|
228 |
* @todo (maybe) add `cart_and_checkout` override option
|
229 |
*/
|
230 |
function get_customer_country_group_id() {
|
includes/settings/wcj-settings-admin-tools.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
/**
|
3 |
* Booster for WooCommerce - Settings - Admin Tools
|
4 |
*
|
5 |
-
* @version 3.3
|
6 |
* @since 2.8.0
|
7 |
* @author Algoritmika Ltd.
|
8 |
*/
|
@@ -15,6 +15,13 @@ return array(
|
|
15 |
'type' => 'title',
|
16 |
'id' => 'wcj_admin_tools_module_options',
|
17 |
),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
18 |
array(
|
19 |
'title' => __( 'Log', 'woocommerce-jetpack' ),
|
20 |
'desc' => __( 'Enable', 'woocommerce-jetpack' ),
|
2 |
/**
|
3 |
* Booster for WooCommerce - Settings - Admin Tools
|
4 |
*
|
5 |
+
* @version 3.5.3
|
6 |
* @since 2.8.0
|
7 |
* @author Algoritmika Ltd.
|
8 |
*/
|
15 |
'type' => 'title',
|
16 |
'id' => 'wcj_admin_tools_module_options',
|
17 |
),
|
18 |
+
array(
|
19 |
+
'title' => __( 'Show Booster Menus Only to Admin', 'woocommerce-jetpack' ),
|
20 |
+
'desc' => __( 'Enable', 'woocommerce-jetpack' ),
|
21 |
+
'id' => 'wcj_admin_tools_show_menus_to_admin_only',
|
22 |
+
'default' => 'no',
|
23 |
+
'type' => 'checkbox',
|
24 |
+
),
|
25 |
array(
|
26 |
'title' => __( 'Log', 'woocommerce-jetpack' ),
|
27 |
'desc' => __( 'Enable', 'woocommerce-jetpack' ),
|
includes/settings/wcj-settings-cross-sells.php
ADDED
@@ -0,0 +1,77 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Booster for WooCommerce - Settings - Cross-sells
|
4 |
+
*
|
5 |
+
* @version 3.5.3
|
6 |
+
* @since 3.5.3
|
7 |
+
* @author Algoritmika Ltd.
|
8 |
+
*/
|
9 |
+
|
10 |
+
if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
|
11 |
+
|
12 |
+
$settings = array(
|
13 |
+
array(
|
14 |
+
'title' => __( 'Options', 'woocommerce-jetpack' ),
|
15 |
+
'type' => 'title',
|
16 |
+
'id' => 'wcj_cross_sells_options',
|
17 |
+
),
|
18 |
+
array(
|
19 |
+
'title' => __( 'Cross-sells Total', 'woocommerce-jetpack' ),
|
20 |
+
'desc_tip' => __( 'Set to zero for WooCommerce default.', 'woocommerce-jetpack' ) . ' ' . __( 'Set to -1 for unlimited.', 'woocommerce-jetpack' ),
|
21 |
+
'type' => 'number',
|
22 |
+
'id' => 'wcj_cross_sells_total',
|
23 |
+
'default' => 0,
|
24 |
+
'custom_attributes' => array( 'min' => -1 ),
|
25 |
+
),
|
26 |
+
array(
|
27 |
+
'title' => __( 'Cross-sells Columns', 'woocommerce-jetpack' ),
|
28 |
+
'desc_tip' => __( 'Set to zero for WooCommerce default.', 'woocommerce-jetpack' ),
|
29 |
+
'type' => 'number',
|
30 |
+
'id' => 'wcj_cross_sells_columns',
|
31 |
+
'default' => 0,
|
32 |
+
'custom_attributes' => array( 'min' => 0 ),
|
33 |
+
),
|
34 |
+
array(
|
35 |
+
'title' => __( 'Cross-sells Order By', 'woocommerce-jetpack' ),
|
36 |
+
'type' => 'select',
|
37 |
+
'id' => 'wcj_cross_sells_orderby',
|
38 |
+
'default' => 'no_changes',
|
39 |
+
'options' => array(
|
40 |
+
'no_changes' => __( 'No changes (default behaviour)', 'woocommerce-jetpack' ),
|
41 |
+
'rand' => __( 'Random', 'woocommerce-jetpack' ),
|
42 |
+
'title' => __( 'Title', 'woocommerce-jetpack' ),
|
43 |
+
'id' => __( 'ID', 'woocommerce-jetpack' ),
|
44 |
+
'date' => __( 'Date', 'woocommerce-jetpack' ),
|
45 |
+
'modified' => __( 'Modified', 'woocommerce-jetpack' ),
|
46 |
+
'menu_order' => __( 'Menu order', 'woocommerce-jetpack' ),
|
47 |
+
'price' => __( 'Price', 'woocommerce-jetpack' ),
|
48 |
+
),
|
49 |
+
),
|
50 |
+
);
|
51 |
+
if ( ! WCJ_IS_WC_VERSION_BELOW_3_3_0 ) {
|
52 |
+
$settings[] = array(
|
53 |
+
'title' => __( 'Cross-sells Order', 'woocommerce-jetpack' ),
|
54 |
+
'type' => 'select',
|
55 |
+
'id' => 'wcj_cross_sells_order',
|
56 |
+
'default' => 'no_changes',
|
57 |
+
'options' => array(
|
58 |
+
'no_changes' => __( 'No changes (default behaviour)', 'woocommerce-jetpack' ),
|
59 |
+
'desc' => __( 'Descending', 'woocommerce-jetpack' ),
|
60 |
+
'asc' => __( 'Ascending', 'woocommerce-jetpack' ),
|
61 |
+
),
|
62 |
+
);
|
63 |
+
};
|
64 |
+
$settings = array_merge( $settings, array(
|
65 |
+
array(
|
66 |
+
'title' => __( 'Hide Cross-sells', 'woocommerce-jetpack' ),
|
67 |
+
'desc' => __( 'Hide', 'woocommerce-jetpack' ),
|
68 |
+
'type' => 'checkbox',
|
69 |
+
'id' => 'wcj_cross_sells_hide',
|
70 |
+
'default' => 'no',
|
71 |
+
),
|
72 |
+
array(
|
73 |
+
'type' => 'sectionend',
|
74 |
+
'id' => 'wcj_cross_sells_options',
|
75 |
+
),
|
76 |
+
) );
|
77 |
+
return $settings;
|
includes/settings/wcj-settings-empty-cart.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
/**
|
3 |
* Booster for WooCommerce Settings - Empty Cart Button
|
4 |
*
|
5 |
-
* @version
|
6 |
* @since 2.8.0
|
7 |
* @author Algoritmika Ltd.
|
8 |
*/
|
@@ -37,11 +37,17 @@ return array(
|
|
37 |
'default' => 'woocommerce_after_cart',
|
38 |
'type' => 'select',
|
39 |
'options' => array(
|
40 |
-
'disable'
|
41 |
-
'
|
42 |
-
'
|
43 |
-
'
|
44 |
-
'
|
|
|
|
|
|
|
|
|
|
|
|
|
45 |
),
|
46 |
'desc' => apply_filters( 'booster_message', '', 'desc' ),
|
47 |
'custom_attributes' => apply_filters( 'booster_message', '', 'disabled' ),
|
@@ -52,16 +58,9 @@ return array(
|
|
52 |
'default' => 'disable',
|
53 |
'type' => 'select',
|
54 |
'options' => array(
|
55 |
-
'disable'
|
56 |
-
'woocommerce_before_checkout_form'
|
57 |
-
'
|
58 |
-
'woocommerce_checkout_billing' => __( 'Billing', 'woocommerce-jetpack' ),
|
59 |
-
'woocommerce_checkout_shipping' => __( 'Shipping', 'woocommerce-jetpack' ),
|
60 |
-
'woocommerce_checkout_after_customer_details' => __( 'After customer details', 'woocommerce-jetpack' ),
|
61 |
-
'woocommerce_checkout_before_order_review' => __( 'Before order review', 'woocommerce-jetpack' ),
|
62 |
-
'woocommerce_checkout_order_review' => __( 'Order review', 'woocommerce-jetpack' ),
|
63 |
-
'woocommerce_checkout_after_order_review' => __( 'After order review', 'woocommerce-jetpack' ),
|
64 |
-
'woocommerce_after_checkout_form' => __( 'After checkout form', 'woocommerce-jetpack' ),
|
65 |
),
|
66 |
),
|
67 |
array(
|
2 |
/**
|
3 |
* Booster for WooCommerce Settings - Empty Cart Button
|
4 |
*
|
5 |
+
* @version 3.5.3
|
6 |
* @since 2.8.0
|
7 |
* @author Algoritmika Ltd.
|
8 |
*/
|
37 |
'default' => 'woocommerce_after_cart',
|
38 |
'type' => 'select',
|
39 |
'options' => array(
|
40 |
+
'disable' => __( 'Do not add', 'woocommerce-jetpack' ),
|
41 |
+
'woocommerce_before_cart' => __( 'Before cart', 'woocommerce-jetpack' ),
|
42 |
+
'woocommerce_before_cart_totals' => __( 'Cart totals: Before cart totals', 'woocommerce-jetpack' ),
|
43 |
+
'woocommerce_cart_totals_before_shipping' => __( 'Cart totals: Before shipping', 'woocommerce-jetpack' ),
|
44 |
+
'woocommerce_cart_totals_after_shipping' => __( 'Cart totals: After shipping', 'woocommerce-jetpack' ),
|
45 |
+
'woocommerce_cart_totals_before_order_total' => __( 'Cart totals: Before order total', 'woocommerce-jetpack' ),
|
46 |
+
'woocommerce_cart_totals_after_order_total' => __( 'Cart totals: After order total', 'woocommerce-jetpack' ),
|
47 |
+
'woocommerce_proceed_to_checkout' => __( 'Cart totals: After proceed to checkout button', 'woocommerce-jetpack' ),
|
48 |
+
'woocommerce_after_cart_totals' => __( 'Cart totals: After cart totals', 'woocommerce-jetpack' ),
|
49 |
+
'woocommerce_cart_collaterals' => __( 'After cart collaterals', 'woocommerce-jetpack' ),
|
50 |
+
'woocommerce_after_cart' => __( 'After cart', 'woocommerce-jetpack' ),
|
51 |
),
|
52 |
'desc' => apply_filters( 'booster_message', '', 'desc' ),
|
53 |
'custom_attributes' => apply_filters( 'booster_message', '', 'disabled' ),
|
58 |
'default' => 'disable',
|
59 |
'type' => 'select',
|
60 |
'options' => array(
|
61 |
+
'disable' => __( 'Do not add', 'woocommerce-jetpack' ),
|
62 |
+
'woocommerce_before_checkout_form' => __( 'Before checkout form', 'woocommerce-jetpack' ),
|
63 |
+
'woocommerce_after_checkout_form' => __( 'After checkout form', 'woocommerce-jetpack' ),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
64 |
),
|
65 |
),
|
66 |
array(
|
includes/settings/wcj-settings-upsells.php
ADDED
@@ -0,0 +1,62 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Booster for WooCommerce - Settings - Upsells
|
4 |
+
*
|
5 |
+
* @version 3.5.3
|
6 |
+
* @since 3.5.3
|
7 |
+
* @author Algoritmika Ltd.
|
8 |
+
*/
|
9 |
+
|
10 |
+
if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
|
11 |
+
|
12 |
+
$settings = array(
|
13 |
+
array(
|
14 |
+
'title' => __( 'Options', 'woocommerce-jetpack' ),
|
15 |
+
'type' => 'title',
|
16 |
+
'id' => 'wcj_upsells_options',
|
17 |
+
),
|
18 |
+
array(
|
19 |
+
'title' => __( 'Upsells Total', 'woocommerce-jetpack' ),
|
20 |
+
'desc_tip' => __( 'Set to zero for WooCommerce default.', 'woocommerce-jetpack' ) . ' ' . __( 'Set to -1 for unlimited.', 'woocommerce-jetpack' ),
|
21 |
+
'type' => 'number',
|
22 |
+
'id' => 'wcj_upsells_total',
|
23 |
+
'default' => 0,
|
24 |
+
'custom_attributes' => array( 'min' => -1 ),
|
25 |
+
),
|
26 |
+
array(
|
27 |
+
'title' => __( 'Upsells Columns', 'woocommerce-jetpack' ),
|
28 |
+
'desc_tip' => __( 'Set to zero for WooCommerce default.', 'woocommerce-jetpack' ),
|
29 |
+
'type' => 'number',
|
30 |
+
'id' => 'wcj_upsells_columns',
|
31 |
+
'default' => 0,
|
32 |
+
'custom_attributes' => array( 'min' => 0 ),
|
33 |
+
),
|
34 |
+
array(
|
35 |
+
'title' => __( 'Upsells Order By', 'woocommerce-jetpack' ),
|
36 |
+
'type' => 'select',
|
37 |
+
'id' => 'wcj_upsells_orderby',
|
38 |
+
'default' => 'no_changes',
|
39 |
+
'options' => array(
|
40 |
+
'no_changes' => __( 'No changes (default behaviour)', 'woocommerce-jetpack' ),
|
41 |
+
'rand' => __( 'Random', 'woocommerce-jetpack' ),
|
42 |
+
'title' => __( 'Title', 'woocommerce-jetpack' ),
|
43 |
+
'id' => __( 'ID', 'woocommerce-jetpack' ),
|
44 |
+
'date' => __( 'Date', 'woocommerce-jetpack' ),
|
45 |
+
'modified' => __( 'Modified', 'woocommerce-jetpack' ),
|
46 |
+
'menu_order' => __( 'Menu order', 'woocommerce-jetpack' ),
|
47 |
+
'price' => __( 'Price', 'woocommerce-jetpack' ),
|
48 |
+
),
|
49 |
+
),
|
50 |
+
array(
|
51 |
+
'title' => __( 'Hide Upsells', 'woocommerce-jetpack' ),
|
52 |
+
'desc' => __( 'Hide', 'woocommerce-jetpack' ),
|
53 |
+
'type' => 'checkbox',
|
54 |
+
'id' => 'wcj_upsells_hide',
|
55 |
+
'default' => 'no',
|
56 |
+
),
|
57 |
+
array(
|
58 |
+
'type' => 'sectionend',
|
59 |
+
'id' => 'wcj_upsells_options',
|
60 |
+
),
|
61 |
+
);
|
62 |
+
return $settings;
|
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.
|
7 |
License: GNU General Public License v3.0
|
8 |
License URI: http://www.gnu.org/licenses/gpl-3.0.html
|
9 |
|
@@ -48,6 +48,7 @@ Booster for WooCommerce is a WordPress plugin that supercharges your site with a
|
|
48 |
* *Admin Products List* - Customize WooCommerce admin products list.
|
49 |
* *Bookings* - Add bookings products to WooCommerce.
|
50 |
* *Cost of Goods* - Save WooCommerce product purchase costs data for admin reports.
|
|
|
51 |
* *Crowdfunding* - Add crowdfunding products to WooCommerce.
|
52 |
* *Product Addons* - Add (paid/free/discount) addons to WooCommerce products.
|
53 |
* *Product Availability by Date* - WooCommerce product availability by date.
|
@@ -69,6 +70,7 @@ Booster for WooCommerce is a WordPress plugin that supercharges your site with a
|
|
69 |
* *Sorting* - Add more WooCommerce sorting options; rename or remove default sorting options; rearrange sorting options on frontend.
|
70 |
* *Stock* - WooCommerce products stock management.
|
71 |
* *Tax Display* - Customize WooCommerce tax display.
|
|
|
72 |
* *User Products* - Let users add new WooCommerce products from frontend.
|
73 |
|
74 |
**Cart & Checkout**
|
@@ -182,6 +184,15 @@ You can see the differences between versions in this [table](https://booster.io/
|
|
182 |
|
183 |
== Changelog ==
|
184 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
185 |
= 3.5.2 - 09/04/2018 =
|
186 |
* Dev - PDF INVOICING & PACKING SLIPS - Bulk Actions - Merge (Print) - Error messages output added.
|
187 |
* Dev - PDF INVOICING & PACKING SLIPS - Bulk Actions - Merge (Print) - Namespaces parse error in PHP < 5.3.0 fixed.
|
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.3
|
7 |
License: GNU General Public License v3.0
|
8 |
License URI: http://www.gnu.org/licenses/gpl-3.0.html
|
9 |
|
48 |
* *Admin Products List* - Customize WooCommerce admin products list.
|
49 |
* *Bookings* - Add bookings products to WooCommerce.
|
50 |
* *Cost of Goods* - Save WooCommerce product purchase costs data for admin reports.
|
51 |
+
* *Cross-sells* - Customize WooCommerce cross-sells products display.
|
52 |
* *Crowdfunding* - Add crowdfunding products to WooCommerce.
|
53 |
* *Product Addons* - Add (paid/free/discount) addons to WooCommerce products.
|
54 |
* *Product Availability by Date* - WooCommerce product availability by date.
|
70 |
* *Sorting* - Add more WooCommerce sorting options; rename or remove default sorting options; rearrange sorting options on frontend.
|
71 |
* *Stock* - WooCommerce products stock management.
|
72 |
* *Tax Display* - Customize WooCommerce tax display.
|
73 |
+
* *Upsells* - Customize WooCommerce upsells products display.
|
74 |
* *User Products* - Let users add new WooCommerce products from frontend.
|
75 |
|
76 |
**Cart & Checkout**
|
184 |
|
185 |
== Changelog ==
|
186 |
|
187 |
+
= 3.5.3 - 12/04/2018 =
|
188 |
+
* Dev - PRODUCTS - Cross Sells - Initial module release.
|
189 |
+
* Dev - PRODUCTS - Product Input Fields - Shortcodes are now processed in product input fields titles and placeholders.
|
190 |
+
* Dev - PRODUCTS - Upsells - Initial module release.
|
191 |
+
* Fix - CART & CHECKOUT - Empty Cart Button - Button position on the Checkout page - Some possible positions removed (fixes the issue with "Place order" button not working etc.).
|
192 |
+
* Dev - CART & CHECKOUT - Empty Cart Button - Button position on the Cart page - More possible positions added.
|
193 |
+
* Fix - PDF INVOICING & PACKING SLIPS - Email Options - Checking for invoice to be created before attaching it to email (fixes the issue with empty invoices attached with zero total orders, and "Do not create if order total equals zero" option enabled).
|
194 |
+
* Dev - EMAILS & MISC. - Admin Tools - "Show Booster Menus Only to Admin" option added.
|
195 |
+
|
196 |
= 3.5.2 - 09/04/2018 =
|
197 |
* Dev - PDF INVOICING & PACKING SLIPS - Bulk Actions - Merge (Print) - Error messages output added.
|
198 |
* Dev - PDF INVOICING & PACKING SLIPS - Bulk Actions - Merge (Print) - Namespaces parse error in PHP < 5.3.0 fixed.
|
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.
|
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.
|
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.3
|
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.3';
|
61 |
|
62 |
/**
|
63 |
* @var WC_Jetpack The single instance of the class
|