Passed
Push — master ( 3b58d6...ef8f55 )
by Warwick
07:53
created

lsx_wc_woocommerce_sku()   A

Complexity

Conditions 5
Paths 2

Size

Total Lines 7
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 5
eloc 6
nc 2
nop 0
dl 0
loc 7
rs 9.6111
c 1
b 0
f 0
1
<?php
2
/**
3
 * LSX functions and definitions - WooCommerce.
4
 *
5
 * @package    lsx
6
 * @subpackage woocommerce
7
 */
8
9
if ( ! defined( 'ABSPATH' ) ) {
10
	exit;
11
}
12
13
if ( ! function_exists( 'lsx_wc_support' ) ) :
14
15
	/**
16
	 * WooCommerce support.
17
	 *
18
	 * @package    lsx
19
	 * @subpackage woocommerce
20
	 */
21
	function lsx_wc_support() {
22
		add_theme_support( 'woocommerce' );
23
		add_theme_support( 'wc-product-gallery-zoom' );
24
		add_theme_support( 'wc-product-gallery-lightbox' );
25
		add_theme_support( 'wc-product-gallery-slider' );
26
	}
27
28
	add_action( 'after_setup_theme', 'lsx_wc_support' );
29
30
endif;
31
32
if ( ! function_exists( 'lsx_wc_scripts_add_styles' ) ) :
33
34
	/**
35
	 * WooCommerce enqueue styles.
36
	 *
37
	 * @package    lsx
38
	 * @subpackage woocommerce
39
	 */
40
	function lsx_wc_scripts_add_styles() {
41
		wp_enqueue_style( 'woocommerce-lsx', get_template_directory_uri() . '/assets/css/woocommerce/woocommerce.css', array( 'lsx_main' ), LSX_VERSION );
42
		wp_style_add_data( 'woocommerce-lsx', 'rtl', 'replace' );
43
44
		// Remove WC Shipping Multiple Addresses specific script causing issues on checkout.
45
		wp_dequeue_script( 'wcms-country-select' );
46
	}
47
48
	add_action( 'wp_enqueue_scripts', 'lsx_wc_scripts_add_styles' );
49
50
endif;
51
52
if ( ! function_exists( 'lsx_wc_checkout_cart_title' ) ) :
53
54
	/**
55
	 * Add title to Woocommerce Cart page anc Checkout page.
56
	 *
57
	 * @package    lsx
58
	 * @subpackage woocommerce
59
	 */
60
	function lsx_wc_checkout_cart_title() {
61
		$default_size = 'sm';
62
		$size         = apply_filters( 'lsx_bootstrap_column_size', $default_size );
63
		if ( function_exists( 'is_woocommerce' ) && ( is_checkout() || is_cart() ) ) {
64
			?>
65
			<div class="checkout-header-wrapper cart-checkout-page col-<?php echo esc_attr( $size ); ?>-12">
66
				<h1 class="archive-title"><?php the_title(); ?></h1>
67
			</div>
68
			<?php
69
		}
70
	}
71
72
	add_action( 'lsx_entry_inside_top', 'lsx_wc_checkout_cart_title' );
73
74
endif;
75
76
if ( ! function_exists( 'lsx_simple_checkout' ) ) :
77
78
	/**
79
	 * Remove footer widgets to make Checkout and Cart simpler.
80
	 *
81
	 * @package    lsx
82
	 * @subpackage config
83
	 */
84
	function lsx_simple_checkout() {
85
86
		if ( class_exists( 'WooCommerce' ) ) {
87
			if ( is_checkout() || is_cart() ) {
88
				remove_action( 'lsx_footer_before', 'lsx_add_footer_sidebar_area' );
89
			}
90
		}
91
	}
92
93
	add_action( 'wp_head', 'lsx_simple_checkout' );
94
95
endif;
96
97
if ( ! function_exists( 'lsx_wc_form_field_args' ) ) :
98
99
	/**
100
	 * WooCommerce form fields.
101
	 *
102
	 * @package    lsx
103
	 * @subpackage woocommerce
104
	 */
105
	function lsx_wc_form_field_args( $args, $key, $value ) {
106
		$args['input_class'][] = 'form-control';
107
108
		return $args;
109
	}
110
111
	add_action( 'woocommerce_form_field_args', 'lsx_wc_form_field_args', 10, 3 );
112
113
endif;
114
115
if ( ! function_exists( 'lsx_wc_theme_wrapper_start' ) ) :
116
117
	/**
118
	 * WooCommerce wrapper start.
119
	 *
120
	 * @package    lsx
121
	 * @subpackage woocommerce
122
	 */
123
	function lsx_wc_theme_wrapper_start() {
124
		lsx_content_wrap_before();
125
		echo '<div id="primary" class="content-area ' . esc_attr( lsx_main_class() ) . '">';
126
		lsx_content_before();
127
		echo '<main id="main" class="site-main" role="main">';
128
		lsx_content_top();
129
	}
130
131
	remove_action( 'woocommerce_before_main_content', 'woocommerce_output_content_wrapper', 10 );
132
	add_action( 'woocommerce_before_main_content', 'lsx_wc_theme_wrapper_start' );
133
134
endif;
135
136
if ( ! function_exists( 'lsx_wc_theme_wrapper_end' ) ) :
137
138
	/**
139
	 * WooCommerce wrapper end.
140
	 *
141
	 * @package    lsx
142
	 * @subpackage woocommerce
143
	 */
144
	function lsx_wc_theme_wrapper_end() {
145
		lsx_content_bottom();
146
		echo '</main>';
147
		lsx_content_after();
148
		echo '</div>';
149
		lsx_content_wrap_after();
150
	}
151
152
	remove_action( 'woocommerce_after_main_content', 'woocommerce_output_content_wrapper_end', 10 );
153
	add_action( 'woocommerce_after_main_content', 'lsx_wc_theme_wrapper_end' );
154
155
endif;
156
157
if ( ! function_exists( 'lsx_wc_disable_lsx_banner_plugin' ) ) :
158
159
	/**
160
	 * Disable LSX Banners plugin in some WC pages.
161
	 *
162
	 * @package    lsx
163
	 * @subpackage woocommerce
164
	 */
165
	function lsx_wc_disable_lsx_banner_plugin( $disabled ) {
166
		global $post;
167
168
		if ( $post && class_exists( 'WC_Wishlists_Pages' ) && WC_Wishlists_Pages::is_wishlist_page( $post->post_name ) ) {
0 ignored issues
show
Bug introduced by
The type WC_Wishlists_Pages was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
169
			$disabled = true;
170
		}
171
172
		return $disabled;
173
	}
174
175
	add_filter( 'lsx_banner_plugin_disable', 'lsx_wc_disable_lsx_banner_plugin' );
176
177
endif;
178
179
if ( ! function_exists( 'lsx_wc_disable_lsx_banner' ) ) :
180
181
	/**
182
	 * Disable LSX Banners banner in some WC pages.
183
	 *
184
	 * @package    lsx
185
	 * @subpackage woocommerce
186
	 */
187
	function lsx_wc_disable_lsx_banner( $disabled ) {
188
		if ( is_shop() || is_product_category() || is_product_tag() || is_product() ) {
189
			$disabled = true;
190
		}
191
192
		return $disabled;
193
	}
194
195
	add_filter( 'lsx_banner_disable', 'lsx_wc_disable_lsx_banner' );
196
197
endif;
198
199
if ( ! function_exists( 'lsx_wc_categories_breadcrumb_filter' ) ) :
200
	/**
201
	 * Improves the category and taxonomy breadcrumbs for woocommerce.
202
	 *
203
	 * @package    lsx
204
	 * @subpackage woocommerce
205
	 */
206
	function lsx_wc_categories_breadcrumb_filter( $crumbs ) {
207
208
		$shop_page_url = get_permalink( wc_get_page_id( 'shop' ) );
209
210
		if ( is_product_category() || is_product_tag() ) {
211
			$new_crumbs    = array();
212
			$new_crumbs[0] = $crumbs[0];
213
214
			if ( function_exists( 'woocommerce_breadcrumb' ) ) {
215
				$new_crumbs[1] = array(
216
					0 => __( 'Shop', 'lsx' ),
217
					1 => $shop_page_url,
218
				);
219
			} else {
220
				$new_crumbs[1] = array(
221
					'text' => __( 'Shop', 'lsx' ),
222
					'url'  => $shop_page_url,
223
				);
224
			}
225
226
			$new_crumbs[2] = $crumbs[1];
227
228
			$crumbs = $new_crumbs;
229
		}
230
		return $crumbs;
231
	}
232
	add_filter( 'wpseo_breadcrumb_links', 'lsx_wc_categories_breadcrumb_filter', 30, 1 );
233
	add_filter( 'woocommerce_get_breadcrumb', 'lsx_wc_categories_breadcrumb_filter', 30, 1 );
234
235
endif;
236
237
if ( ! function_exists( 'lsx_wc_add_cart' ) ) :
238
239
	/**
240
	 * Adds WC cart to the header.
241
	 *
242
	 * @package    lsx
243
	 * @subpackage template-tags
244
	 */
245
	function lsx_wc_add_cart( $items, $args ) {
246
		$cart_menu_item_position = apply_filters( 'lsx_wc_cart_menu_item_position', 'primary' );
247
248
		$cart_logged_out_position = $cart_menu_item_position . '_logged_out';
249
250
		if ( $cart_menu_item_position === $args->theme_location || $cart_logged_out_position === $args->theme_location ) {
251
			$customizer_option = get_theme_mod( 'lsx_header_wc_cart', false );
252
253
			if ( ! empty( $customizer_option ) ) {
254
				ob_start();
255
				the_widget( 'WC_Widget_Cart', 'title=' );
0 ignored issues
show
Bug introduced by
'title=' of type string is incompatible with the type array expected by parameter $instance of the_widget(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

255
				the_widget( 'WC_Widget_Cart', /** @scrutinizer ignore-type */ 'title=' );
Loading history...
256
				$widget = ob_get_clean();
257
258
				if ( is_cart() ) {
259
					$class = 'current-menu-item';
260
				} else {
261
					$class = '';
262
				}
263
264
				$item_class = 'menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children dropdown lsx-wc-cart-menu-item ' . $class;
265
				$item_class = apply_filters( 'lsx_wc_cart_menu_item_class', $item_class );
266
267
				$item = '<li class="' . $item_class . '">' .
268
							'<a title="' . esc_attr__( 'View your shopping cart', 'lsx' ) . '" href="' . esc_url( wc_get_cart_url() ) . '" data-toggle="dropdown" class="dropdown-toggle" aria-haspopup="true">' .
269
								'<span class="lsx-wc-cart-amount">' . wp_kses_data( WC()->cart->get_cart_subtotal() ) . '</span>' .
270
								/* Translators: %s: items quantity */
271
								'<span class="lsx-wc-cart-count">' . wp_kses_data( sprintf( _n( '%d item', '%d items', WC()->cart->get_cart_contents_count(), 'lsx' ), WC()->cart->get_cart_contents_count() ) ) . '</span>' .
272
								( ! empty( WC()->cart->get_cart_contents_count() ) ? '<span class="lsx-wc-cart-count-badge">' . wp_kses_data( WC()->cart->get_cart_contents_count() ) . '</span>' : '' ) .
273
							'</a>' .
274
							'<ul role="menu" class=" dropdown-menu lsx-wc-cart-sub-menu">' .
275
								'<li>' .
276
									'<div class="lsx-wc-cart-dropdown">' . $widget . '</div>' .
277
								'</li>' .
278
							'</ul>' .
279
						'</li>';
280
281
				if ( 'top-menu' === $args->theme_location ) {
282
					$items = $item . $items;
283
				} else {
284
					$items = $items . $item;
285
				}
286
			}
287
		}
288
289
		return $items;
290
	}
291
292
	add_filter( 'wp_nav_menu_items', 'lsx_wc_add_cart', 10, 2 );
293
294
endif;
295
296
if ( ! function_exists( 'lsx_wc_products_widget_wrapper_before' ) ) :
297
298
	/**
299
	 * Change WC products widget wrapper (before).
300
	 *
301
	 * @package    lsx
302
	 * @subpackage woocommerce
303
	 */
304
	function lsx_wc_products_widget_wrapper_before( $html ) {
305
		$html = '<div class="lsx-woocommerce-slider lsx-woocommerce-shortcode">';
306
		return $html;
307
	}
308
309
	add_filter( 'woocommerce_before_widget_product_list', 'lsx_wc_products_widget_wrapper_before', 15 );
310
311
endif;
312
313
if ( ! function_exists( 'lsx_wc_products_widget_wrapper_after' ) ) :
314
315
	/**
316
	 * Change WC products widget wrapper (after).
317
	 *
318
	 * @package    lsx
319
	 * @subpackage woocommerce
320
	 */
321
	function lsx_wc_products_widget_wrapper_after( $html ) {
322
		$html = '</div>';
323
		return $html;
324
	}
325
326
	add_filter( 'woocommerce_after_widget_product_list', 'lsx_wc_products_widget_wrapper_after', 15 );
327
328
endif;
329
330
if ( ! function_exists( 'lsx_wc_reviews_widget_override' ) ) :
331
332
	/**
333
	 * Override WC ewviews widget.
334
	 *
335
	 * @package    lsx
336
	 * @subpackage woocommerce
337
	 */
338
	function lsx_wc_reviews_widget_override() {
339
		if ( class_exists( 'WC_Widget_Recent_Reviews' ) ) {
340
			unregister_widget( 'WC_Widget_Recent_Reviews' );
341
			require get_template_directory() . '/includes/classes/class-lsx-wc-widget-recent-reviews.php';
342
			register_widget( 'LSX_WC_Widget_Recent_Reviews' );
343
		}
344
	}
345
346
	add_action( 'widgets_init', 'lsx_wc_reviews_widget_override', 15 );
347
348
endif;
349
350
if ( ! function_exists( 'lsx_wc_change_price_html' ) ) :
351
352
	/**
353
	 * Change WC ZERO price to "free".
354
	 *
355
	 * @package    lsx
356
	 * @subpackage woocommerce
357
	 *
358
	 * @param $price string
359
	 * @param $product WC_Product
360
	 * @return string
361
	 */
362
	function lsx_wc_change_price_html( $price, $product ) {
363
		if ( empty( $product->get_price() ) && 'variable' !== $product->get_type() ) {
364
			if ( $product->is_on_sale() && $product->get_regular_price() ) {
365
				$regular_price = wc_get_price_to_display(
366
					$product,
367
					array(
368
						'qty'   => 1,
369
						'price' => $product->get_regular_price(),
370
					)
371
				);
372
373
				$price = wc_format_price_range( $regular_price, esc_html__( 'Free!', 'lsx' ) );
374
			} else {
375
				$price = '<span class="amount">' . esc_html__( 'Free!', 'lsx' ) . '</span>';
376
			}
377
		}
378
379
		return $price;
380
	}
381
382
	add_filter( 'woocommerce_get_price_html', 'lsx_wc_change_price_html', 15, 2 );
383
384
endif;
385
386
if ( ! function_exists( 'lsx_wc_cart_link_fragment' ) ) :
387
388
	/**
389
	 * Cart Fragments.
390
	 * Ensure cart contents update when products are added to the cart via AJAX.
391
	 *
392
	 * @package    lsx
393
	 * @subpackage woocommerce
394
	 */
395
	function lsx_wc_cart_link_fragment( $fragments ) {
396
		global $woocommerce;
397
398
		ob_start();
399
		lsx_wc_cart_link();
400
		$fragments['li.lsx-wc-cart-menu-item > a'] = ob_get_clean();
401
402
		ob_start();
403
		lsx_wc_items_counter();
404
		$items_counter = ob_get_clean();
405
406
		if ( ! empty( $items_counter ) ) {
407
			$fragments['div.widget_shopping_cart_content'] = preg_replace( '/(.+)(<\/ul>)[\s\n]*(<p class="woocommerce-mini-cart__total)(.+)/', '$1' . $items_counter . '$2$3$4', $fragments['div.widget_shopping_cart_content'] );
408
		}
409
410
		return $fragments;
411
	}
412
413
endif;
414
415
if ( ! function_exists( 'lsx_wc_cart_link' ) ) :
416
417
	/**
418
	 * Cart Link.
419
	 * Displayed a link to the cart including the number of items present and the cart total.
420
	 *
421
	 * @package    lsx
422
	 * @subpackage woocommerce
423
	 */
424
	function lsx_wc_cart_link() {
425
		?>
426
			<a title="<?php esc_attr_e( 'View your shopping cart', 'lsx' ); ?>" href="<?php echo esc_url( wc_get_cart_url() ); ?>" data-toggle="dropdown" class="dropdown-toggle" aria-haspopup="true">
427
				<span class="lsx-wc-cart-amount"><?php echo wp_kses_data( WC()->cart->get_cart_subtotal() ); ?></span>
428
429
				<?php /* Translators: %s: items quantity */ ?>
430
				<span class="lsx-wc-cart-count"><?php echo wp_kses_data( sprintf( _n( '%d item', '%d items', WC()->cart->get_cart_contents_count(), 'lsx' ), WC()->cart->get_cart_contents_count() ) ); ?></span>
431
432
				<?php if ( ! empty( WC()->cart->get_cart_contents_count() ) ) : ?>
433
					<span class="lsx-wc-cart-count-badge"><?php echo wp_kses_data( WC()->cart->get_cart_contents_count() ); ?></span>
434
				<?php endif; ?>
435
			</a>
436
		<?php
437
	}
438
439
endif;
440
441
if ( ! function_exists( 'lsx_wc_items_counter' ) ) :
442
443
	/**
444
	 * Add car item hidden items counter.
445
	 *
446
	 * @package    lsx
447
	 * @subpackage woocommerce
448
	 */
449
	function lsx_wc_items_counter() {
450
		$count         = (int) WC()->cart->get_cart_contents_count();
451
		$items_counter = '';
452
453
		if ( ! empty( $count ) ) {
454
			$count -= 3;
455
456
			if ( 1 === $count ) {
457
				$items_counter = esc_html__( '1 other item in cart', 'lsx' );
458
			} elseif ( $count > 1 ) {
459
				/* Translators: %s: items counter */
460
				$items_counter = sprintf( esc_html__( '%s other items in cart', 'lsx' ), $count );
461
			}
462
		}
463
		$cart_url = function_exists( 'wc_get_cart_url' ) ? wc_get_cart_url() : WC()->cart->get_cart_url();
464
		if ( ! empty( $items_counter ) ) :
465
			?>
466
				<li class="woocommerce-mini-cart-item mini_cart_item" style="display: block;">
467
					<a href="<?php echo esc_url( $cart_url ); ?>"><?php echo esc_html( $items_counter ); ?></a>
468
				</li>
469
			<?php
470
		endif;
471
	}
472
473
endif;
474
475
if ( ! function_exists( 'lsx_wc_loop_shop_per_page' ) ) :
476
477
	/**
478
	 * Changes the number of products to display on shop.
479
	 *
480
	 * @package    lsx
481
	 * @subpackage woocommerce
482
	 */
483
	function lsx_wc_loop_shop_per_page( $items ) {
484
		$items = 12;
485
		return $items;
486
	}
487
488
	add_filter( 'loop_shop_per_page', 'lsx_wc_loop_shop_per_page', 20 );
489
490
endif;
491
492
if ( ! function_exists( 'lsx_wc_add_to_cart_message_html' ) ) :
493
494
	/**
495
	 * Changes the "added to cart" message HTML.
496
	 *
497
	 * @package    lsx
498
	 * @subpackage woocommerce
499
	 */
500
	function lsx_wc_add_to_cart_message_html( $message, $products ) {
501
		$message = '<div class="woocommerce-message-added-to-cart">' . $message . '</div>';
502
		return $message;
503
	}
504
505
	add_filter( 'wc_add_to_cart_message_html', 'lsx_wc_add_to_cart_message_html', 20, 2 );
506
507
endif;
508
509
if ( defined( 'WC_VERSION' ) && version_compare( WC_VERSION, '2.3', '>=' ) ) {
0 ignored issues
show
Bug introduced by
The constant WC_VERSION was not found. Maybe you did not declare it correctly or list all dependencies?
Loading history...
510
	add_filter( 'woocommerce_add_to_cart_fragments', 'lsx_wc_cart_link_fragment' );
511
} else {
512
	add_filter( 'add_to_cart_fragments', 'lsx_wc_cart_link_fragment' );
513
}
514
515
remove_action( 'woocommerce_after_shop_loop', 'woocommerce_pagination', 10 );
516
517
add_action( 'woocommerce_after_shop_loop', 'lsx_wc_sorting_wrapper', 9 );
518
add_action( 'woocommerce_after_shop_loop', 'woocommerce_catalog_ordering', 10 );
519
add_action( 'woocommerce_after_shop_loop', 'woocommerce_result_count', 20 );
520
add_action( 'woocommerce_after_shop_loop', 'woocommerce_pagination', 30 );
521
add_action( 'woocommerce_after_shop_loop', 'lsx_wc_sorting_wrapper_close', 31 );
522
523
remove_action( 'woocommerce_before_shop_loop', 'woocommerce_result_count', 20 );
524
remove_action( 'woocommerce_before_shop_loop', 'woocommerce_catalog_ordering', 30 );
525
526
add_action( 'woocommerce_before_shop_loop', 'lsx_wc_sorting_wrapper', 9 );
527
add_action( 'woocommerce_before_shop_loop', 'woocommerce_catalog_ordering', 10 );
528
add_action( 'woocommerce_before_shop_loop', 'woocommerce_result_count', 20 );
529
add_action( 'woocommerce_before_shop_loop', 'lsx_wc_woocommerce_pagination', 30 );
530
add_action( 'woocommerce_before_shop_loop', 'lsx_wc_sorting_wrapper_close', 31 );
531
532
if ( ! function_exists( 'lsx_wc_sorting_wrapper' ) ) :
533
534
	/**
535
	 * Sorting wrapper.
536
	 *
537
	 * @package    lsx
538
	 * @subpackage woocommerce
539
	 */
540
	function lsx_wc_sorting_wrapper() {
541
		echo '<div class="lsx-wc-sorting">';
542
	}
543
544
endif;
545
546
if ( ! function_exists( 'lsx_wc_sorting_wrapper_close' ) ) :
547
548
	/**
549
	 * Sorting wrapper close.
550
	 *
551
	 * @package    lsx
552
	 * @subpackage woocommerce
553
	 */
554
	function lsx_wc_sorting_wrapper_close() {
555
		echo '</div>';
556
	}
557
558
endif;
559
560
if ( ! function_exists( 'lsx_wc_product_columns_wrapper_close' ) ) :
561
562
	/**
563
	 * Product columns wrapper close.
564
	 *
565
	 * @package    lsx
566
	 * @subpackage woocommerce
567
	 */
568
	function lsx_wc_product_columns_wrapper_close() {
569
		echo '</div>';
570
	}
571
572
endif;
573
574
if ( ! function_exists( 'lsx_wc_woocommerce_pagination' ) ) :
575
576
	/**
577
	 * LSX WooCommerce Pagination
578
	 * WooCommerce disables the product pagination inside the woocommerce_product_subcategories() function
579
	 * but since LSX adds pagination before that function is excuted we need a separate function to
580
	 * determine whether or not to display the pagination.
581
	 *
582
	 * @package    lsx
583
	 * @subpackage woocommerce
584
	 */
585
	function lsx_wc_woocommerce_pagination() {
586
		if ( woocommerce_products_will_display() ) {
587
			woocommerce_pagination();
588
		}
589
	}
590
591
endif;
592
593
if ( ! function_exists( 'lsx_customizer_wc_controls' ) ) :
594
595
	/**
596
	 * Returns an array of the core panel.
597
	 *
598
	 * @package    lsx
599
	 * @subpackage customizer
600
	 *
601
	 * @return $lsx_controls array()
0 ignored issues
show
Documentation Bug introduced by
The doc comment $lsx_controls at position 0 could not be parsed: Unknown type name '$lsx_controls' at position 0 in $lsx_controls.
Loading history...
602
	 */
603
	function lsx_customizer_wc_controls( $lsx_controls ) {
604
		$lsx_controls['panels']['woocommerce'] = array(
605
			'title'       => esc_html__( 'WooCommerce', 'lsx' ),
606
			'description' => esc_html__( 'Change the WooCommerce settings.', 'lsx' ),
607
			'priority'    => 23,
608
		);
609
610
		/**
611
		 * Global.
612
		 */
613
614
		$lsx_controls['sections']['lsx-wc-global'] = array(
615
			'title'       => esc_html__( 'LSX Global', 'lsx' ),
616
			'description' => esc_html__( 'Change the WooCommerce global settings.', 'lsx' ),
617
			'panel'       => 'woocommerce',
618
			'priority'    => 1,
619
		);
620
621
		$lsx_controls['settings']['lsx_wc_trust_footer_bar_status'] = array(
622
			'default'           => '1',
623
			'sanitize_callback' => 'lsx_sanitize_checkbox',
624
		);
625
626
		$lsx_controls['fields']['lsx_wc_trust_footer_bar_status'] = array(
627
			'label'       => esc_html__( 'Footer Trust Factors Section', 'lsx' ),
628
			'description' => esc_html__( 'Enable the footer trust factors section.', 'lsx' ),
629
			'section'     => 'lsx-wc-global',
630
			'type'        => 'checkbox',
631
			'priority'    => 1,
632
		);
633
634
		$lsx_controls['settings']['lsx_wc_mobile_footer_bar_status'] = array(
635
			'default'           => '1',
636
			'sanitize_callback' => 'lsx_sanitize_checkbox',
637
		);
638
639
		$lsx_controls['fields']['lsx_wc_mobile_footer_bar_status'] = array(
640
			'label'       => esc_html__( 'Footer Bar', 'lsx' ),
641
			'description' => esc_html__( 'Enable the mobile footer bar.', 'lsx' ),
642
			'section'     => 'lsx-wc-global',
643
			'type'        => 'checkbox',
644
			'priority'    => 1,
645
		);
646
647
		/**
648
		 * Cart.
649
		 */
650
651
		$lsx_controls['sections']['lsx-wc-cart'] = array(
652
			'title'       => esc_html__( 'LSX Cart', 'lsx' ),
653
			'description' => esc_html__( 'Change the WooCommerce cart settings.', 'lsx' ),
654
			'panel'       => 'woocommerce',
655
			'priority'    => 2,
656
		);
657
658
		$lsx_controls['settings']['lsx_header_wc_cart'] = array(
659
			'default'           => false,
660
			'sanitize_callback' => 'lsx_sanitize_checkbox',
661
		);
662
663
		$lsx_controls['fields']['lsx_header_wc_cart'] = array(
664
			'label'       => esc_html__( 'Menu Item', 'lsx' ),
665
			'description' => esc_html__( 'Enable the cart menu item.', 'lsx' ),
666
			'section'     => 'lsx-wc-cart',
667
			'type'        => 'checkbox',
668
			'priority'    => 1,
669
		);
670
671
		return $lsx_controls;
672
	}
673
674
	add_filter( 'lsx_customizer_controls', 'lsx_customizer_wc_controls' );
675
676
endif;
677
678
if ( ! function_exists( 'lsx_wc_global_header_title' ) ) :
679
680
	/**
681
	 * Move the shop title into the global header
682
	 *
683
	 * @package    lsx
684
	 * @subpackage the-events-calendar
685
	 */
686
	function lsx_wc_global_header_title( $title ) {
687
688
		if ( is_woocommerce() && is_shop() ) {
689
690
			$title = __( 'Shop', 'lsx' );
691
		}
692
693
		return $title;
694
	}
695
	add_filter( 'lsx_global_header_title', 'lsx_wc_global_header_title', 200, 1 );
696
697
endif;
698
699
700
if ( ! function_exists( 'lsx_wc_footer_bar' ) ) :
701
702
	/**
703
	 * Display WC footer bar.
704
	 *
705
	 * @package    lsx
706
	 * @subpackage woocommerce
707
	 */
708
	function lsx_wc_footer_bar() {
709
		$cart_url = function_exists( 'wc_get_cart_url' ) ? wc_get_cart_url() : WC()->cart->get_cart_url();
710
		if ( ! empty( get_theme_mod( 'lsx_wc_mobile_footer_bar_status', '1' ) ) ) :
711
			?>
712
			<div class="lsx-wc-footer-bar">
713
				<form role="search" method="get" action="<?php echo esc_url( home_url() ); ?>" class="lsx-wc-footer-bar-form">
714
					<fieldset>
715
						<legend class="screen-reader-text"><?php esc_html_e( 'Search products', 'lsx' ); ?></legend>
716
						<input type="search" name="s" placeholder="<?php esc_attr_e( 'Search products...', 'lsx' ); ?>" class="form-control">
717
					</fieldset>
718
				</form>
719
720
				<ul class="lsx-wc-footer-bar-items">
721
					<li class="lsx-wc-footer-bar-item">
722
						<a href="<?php echo esc_url( home_url() ); ?>" class="lsx-wc-footer-bar-link">
723
							<i class="fa fa-home" aria-hidden="true"></i>
724
							<span><?php esc_html_e( 'Home', 'lsx' ); ?></span>
725
						</a>
726
					</li>
727
728
					<li class="lsx-wc-footer-bar-item">
729
						<a href="<?php echo esc_url( get_permalink( get_option( 'woocommerce_myaccount_page_id' ) ) ); ?>" class="lsx-wc-footer-bar-link">
0 ignored issues
show
Bug introduced by
It seems like get_permalink(get_option...ce_myaccount_page_id')) can also be of type false; however, parameter $url of esc_url() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

729
						<a href="<?php echo esc_url( /** @scrutinizer ignore-type */ get_permalink( get_option( 'woocommerce_myaccount_page_id' ) ) ); ?>" class="lsx-wc-footer-bar-link">
Loading history...
Bug introduced by
It seems like get_option('woocommerce_myaccount_page_id') can also be of type false; however, parameter $post of get_permalink() does only seem to accept WP_Post|integer, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

729
						<a href="<?php echo esc_url( get_permalink( /** @scrutinizer ignore-type */ get_option( 'woocommerce_myaccount_page_id' ) ) ); ?>" class="lsx-wc-footer-bar-link">
Loading history...
730
							<i class="fa fa-user" aria-hidden="true"></i>
731
							<span><?php esc_html_e( 'Account', 'lsx' ); ?></span>
732
						</a>
733
					</li>
734
735
					<li class="lsx-wc-footer-bar-item">
736
						<a href="#" class="lsx-wc-footer-bar-link lsx-wc-footer-bar-link-toogle">
737
							<i class="fa fa-search" aria-hidden="true"></i>
738
							<span><?php esc_html_e( 'Search', 'lsx' ); ?></span>
739
						</a>
740
					</li>
741
742
					<li class="lsx-wc-footer-bar-item">
743
						<a href="<?php echo esc_url( $cart_url ); ?>" class="lsx-wc-footer-bar-link">
744
							<i class="fa fa-shopping-basket" aria-hidden="true"></i>
745
							<?php $count = WC()->cart->get_cart_contents_count(); ?>
746
							<?php if ( ! empty( $count ) ) : ?>
747
								<span class="lsx-wc-footer-bar-count"><?php echo wp_kses_data( $count ); ?></span>
748
							<?php endif; ?>
749
							<span><?php esc_html_e( 'Cart', 'lsx' ); ?></span>
750
						</a>
751
					</li>
752
				</ul>
753
			</div>
754
			<?php
755
		endif;
756
	}
757
758
	add_action( 'lsx_body_bottom', 'lsx_wc_footer_bar', 15 );
759
760
endif;
761
762
if ( ! function_exists( 'lsx_wc_body_class' ) ) :
763
764
	/**
765
	 * Changes body class.
766
	 *
767
	 * @package    lsx
768
	 * @subpackage woocommerce
769
	 */
770
	function lsx_wc_body_class( $classes ) {
771
		global $post;
772
773
		if ( $post && class_exists( 'WC_Wishlists_Pages' ) && WC_Wishlists_Pages::is_wishlist_page( $post->post_name ) ) {
774
			$classes[] = 'woocommerce-page woocommerce-wishlist';
775
		}
776
777
		if ( ! empty( get_theme_mod( 'lsx_wc_mobile_footer_bar_status', '1' ) ) ) {
778
			$classes[] = 'lsx-wc-has-footer-bar';
779
		}
780
781
		return $classes;
782
	}
783
784
	add_filter( 'body_class', 'lsx_wc_body_class', 2999 );
785
786
endif;
787
788
if ( ! function_exists( 'lsx_wc_downloadable_products' ) ) :
789
790
	/**
791
	 * Changes downloads "download" button text.
792
	 *
793
	 * @package    lsx
794
	 * @subpackage woocommerce
795
	 */
796
	function lsx_wc_downloadable_products( $downloads ) {
797
		foreach ( $downloads as $i => $download ) {
798
			$downloads[ $i ]['download_name'] = esc_html__( 'Download', 'lsx' );
799
		}
800
801
		return $downloads;
802
	}
803
804
	add_filter( 'woocommerce_customer_get_downloadable_products', 'lsx_wc_downloadable_products', 2999 );
805
806
endif;
807
808
if ( ! function_exists( 'lsx_wc_move_bundle_products' ) ) :
809
810
	/**
811
	 * WooCommerce - Move the bundle products to a tab.
812
	 *
813
	 * @package    lsx
814
	 * @subpackage woocommerce
815
	 */
816
	function lsx_wc_move_bundle_products( $tabs ) {
817
		global $product, $post;
818
819
		if ( method_exists( $product, 'get_bundled_items' ) ) {
820
			$bundled_items = $product->get_bundled_items();
821
822
			if ( ! empty( $bundled_items ) ) {
823
				$tabs['bundled_products'] = array(
824
					'title'    => __( 'Included Products', 'lsx' ),
825
					'priority' => 10,
826
					'callback' => 'lsx_wc_bundle_products',
827
				);
828
			}
829
		}
830
831
		if ( isset( $tabs['description'] ) ) {
832
			$tabs['description']['priority'] = 5;
833
		}
834
835
		if ( isset( $tabs['reviews'] ) ) {
836
			$tabs['reviews']['priority'] = 15;
837
		}
838
839
		if ( isset( $tabs['product_enquiry'] ) ) {
840
			$tabs['product_enquiry']['priority'] = 20;
841
		}
842
843
		return $tabs;
844
	}
845
846
	add_action( 'woocommerce_product_tabs', 'lsx_wc_move_bundle_products', 50 );
847
848
endif;
849
850
if ( ! function_exists( 'lsx_wc_bundle_products' ) ) :
851
852
	function lsx_wc_bundle_products() {
853
		global $product, $post;
854
855
		if ( method_exists( $product, 'get_bundled_items' ) ) {
856
			$bundled_items = $product->get_bundled_items();
857
858
			// do_action( 'woocommerce_before_bundled_items', $product );
859
860
			// foreach ( $bundled_items as $bundled_item ) {
861
			// 	do_action( 'woocommerce_bundled_item_details', $bundled_item, $product );
862
			// }
863
864
			// do_action( 'woocommerce_after_bundled_items', $product );
865
866
			$product_original = $product;
867
868
			// $this->widget_start( $args, $instance );
869
870
			// @codingStandardsIgnoreLine
871
			echo apply_filters( 'woocommerce_before_widget_product_list', '<ul class="product_list_widget">' );
872
873
			foreach ( $bundled_items as $bundled_item ) {
874
				$product = wc_get_product( $bundled_item->item_data['product_id'] );
875
				wc_get_template( 'content-widget-product.php' );
876
				$product = $product_original;
877
			}
878
879
			// @codingStandardsIgnoreLine
880
			echo apply_filters( 'woocommerce_after_widget_product_list', '</ul>' );
881
		}
882
883
		// $this->widget_end( $args );
884
	}
885
886
endif;
887
888
889
if ( ! function_exists( 'lsx_wc_product_searchform' ) ) :
890
	/**
891
	 * woo_custom_product_searchform
892
	 *
893
	 * @access      public
894
	 * @since       1.0
895
	 * @return      void
896
	 */
897
	function lsx_wc_product_searchform( $form ) {
898
899
		ob_start();
900
		?>
901
		<form role="search" method="get" class="search-form form-inline" id="searchform" action="<?php echo esc_url( home_url() ); ?>">
902
903
		<div class="input-group">
904
			<input type="search" value="<?php if ( is_search() ) { echo esc_html( get_search_query() ); } ?>" name="s" class="search-field form-control" placeholder="<?php esc_attr_e( 'Search', 'lsx' ); ?> <?php echo esc_attr( get_bloginfo( 'name' ) ); ?>">
905
			<label class="hide"><?php esc_html_e( 'Search for:', 'lsx' ); ?></label>
906
907
			<span class="input-group-btn">
908
				<button type="submit" class="search-submit btn btn-default"><span class="fa fa-search"></span></button>
909
			</span>
910
		</div>
911
912
		<input type="hidden" name="post_type" value="product" />
913
		</form>
914
		<?php
915
		$form = ob_get_clean();
916
		return $form;
917
918
	}
919
endif;
920
add_filter( 'get_product_search_form', 'lsx_wc_product_searchform', 10, 1 );
921
922
	/**
923
	 * Output the pagination.
924
	 */
925
function woocommerce_pagination() {
926
	if ( ! wc_get_loop_prop( 'is_paginated' ) || ! woocommerce_products_will_display() ) {
927
		return;
928
	}
929
	$args = array(
930
		'total'   => wc_get_loop_prop( 'total_pages' ),
931
		'current' => wc_get_loop_prop( 'current_page' ),
932
	);
933
934
	if ( wc_get_loop_prop( 'is_shortcode' ) ) {
935
		$args['base']   = esc_url_raw( add_query_arg( 'product-page', '%#%', false ) );
936
		$args['format'] = '?product-page = %#%';
937
	} else {
938
		$args['base']   = esc_url_raw( str_replace( 999999999, '%#%', remove_query_arg( 'add-to-cart', get_pagenum_link( 999999999, false ) ) ) );
939
		$args['format'] = '';
940
	}
941
942
	echo wp_kses_post( '<div class="lsx-pagination-wrapper">' );
943
	$template = wc_get_template_html( 'loop/pagination.php', $args );
944
	$template = str_replace( 'woocommerce-pagination', 'lsx-pagination', $template );
945
	echo wp_kses_post( $template );
946
	echo wp_kses_post( '</div>' );
947
}
948
949
function lsx_wc_pagination_args( $args ) {
950
	$args['prev_text'] = '<span class="meta-nav">&larr;</span> ' . esc_html__( 'Previous', 'lsx' );
951
	$args['next_text'] = esc_html__( 'Next', 'lsx' ) . ' <span class="meta-nav">&rarr;</span>';
952
	$args['type']      = 'plain';
953
	return $args;
954
}
955
add_filter( 'woocommerce_pagination_args', 'lsx_wc_pagination_args', 10, 1 );
956
957
958
/**
959
 * Returns the location of our product widget
960
 *
961
 * @param $located
962
 * @param $template_name
963
 *
964
 * @return array
965
 */
966
function lsx_wc_product_widget_template( $located, $template_name ) {
967
	if ( 'content-widget-product.php' === $template_name || 'content-widget-review.php' === $template_name ) {
968
969
		$new_location = get_stylesheet_directory() . '/partials/' . $template_name;
970
		if ( file_exists( $new_location ) ) {
971
			$located = $new_location;
972
		} else {
973
			$new_location = get_parent_theme_file_path() . '/partials/' . $template_name;
974
			if ( file_exists( $new_location ) ) {
975
				$located = $new_location;
976
			}
977
		}
978
	}
979
	return $located;
980
}
981
add_filter( 'wc_get_template', 'lsx_wc_product_widget_template', 90, 2 );
982
983
if ( ! function_exists( 'lsx_payment_gateway_logos' ) ) {
984
	/**
985
	 * Add Lets Encrypt and PayFast logos to cart.
986
	 **/
987
	function lsx_payment_gateway_logos() {
988
		$encript_image        = get_template_directory_uri() . '/assets/images/lets-encript.svg';
989
		$payfast_image        = get_template_directory_uri() . '/assets/images/payfast-footer-logo.svg';
990
		$payment_logos        = get_template_directory_uri() . '/assets/images/payment-logos.svg';
991
		$payment_logos_mobile = get_template_directory_uri() . '/assets/images/payment-logos-mobile.svg';
992
		if ( ( is_checkout() || is_cart() ) && ( ! empty( get_theme_mod( 'lsx_wc_trust_footer_bar_status', '1' ) ) ) ) {
993
		?>
994
		<div class="row text-center vertical-align lsx-full-width-base-small checkout-cta-bottom">
995
			<div class="col-md-12 img-payfast">
996
				<img src="<?php echo esc_url( $payfast_image ); ?>" alt="payfast"/>
997
			</div>
998
			<div class="col-md-12 img-payments hidden-xs">
999
				<img src="<?php echo esc_url( $payment_logos ); ?>" alt="payments"/>
1000
			</div>
1001
			<div class="col-md-12 img-payments hidden-sm hidden-md hidden-lg">
1002
				<img src="<?php echo esc_url( $payment_logos_mobile ); ?>" alt="payments"/>
1003
			</div>
1004
			<div class="col-md-12 img-encrypt">
1005
				<img src="<?php echo esc_url( $encript_image ); ?>" alt="lets_encrypt"/>
1006
			</div>
1007
		</div>
1008
1009
		<?php
1010
		}
1011
	}
1012
	add_action( 'lsx_footer_before', 'lsx_payment_gateway_logos' );
1013
}
1014
1015
if ( ! function_exists( 'lsx_wc_archive_header' ) ) {
1016
	/**
1017
	 * Add Lets Encrypt and PayFast logos to cart.
1018
	 **/
1019
	function lsx_wc_archive_header() {
1020
		if ( class_exists( 'WooCommerce' ) && ( is_shop() || is_product_category() || is_product_tag() ) ) {
1021
1022
			if ( function_exists( 'lsx_search' ) ) {
1023
				$search = lsx_search();
1024
				remove_action( 'lsx_content_wrap_before', array( $search->frontend, 'wc_archive_header' ), 140 );
1025
			}
1026
1027
			$default_size = 'sm';
1028
			$size         = apply_filters( 'lsx_bootstrap_column_size', $default_size );
1029
			?>
1030
				<div class="archive-header-wrapper banner-woocommerce col-<?php echo esc_attr( $size ); ?>-12">
1031
					<?php lsx_global_header_inner_bottom(); ?>
1032
					<header class="archive-header">
1033
						<h1 class="archive-title"><?php woocommerce_page_title(); ?></h1>
1034
						<?php
1035
						if ( is_product_category() || is_product_tag() ) {
1036
							$description = get_the_archive_description();
1037
							if ( ! empty( $description ) && '' !== $description ) {
1038
								echo wp_kses_post( $description );
1039
							}
1040
						} else {
1041
							$shop_page = wc_get_page_id( 'shop' );
1042
							if ( 0 < $shop_page ) {
1043
								$shop_page = get_post( $shop_page );
1044
								if ( ! empty( $shop_page->post_excerpt ) ) {
1045
									echo wp_kses_post( '<p>' . $shop_page->post_excerpt . '</p>' );
1046
								}
1047
							}
1048
						}
1049
						?>
1050
					</header>
1051
				</div>
1052
			<?php
1053
		}
1054
	}
1055
	add_action( 'lsx_content_wrap_before', 'lsx_wc_archive_header', 100 );
1056
}
1057
1058
/**
1059
 * Moving the Reset Variations link.
1060
 **/
1061
function lsx_wc_reset_variations_link() {
1062
	echo '<a class="reset_variations" href="#">' . esc_html__( 'Clear', 'lsx' ) . '</a>';
1063
	add_filter( 'woocommerce_reset_variations_link', 'lsx_wc_disable_default_reset_variations_link', 10, 1 );
1064
}
1065
add_action( 'woocommerce_before_variations_form', 'lsx_wc_reset_variations_link', 10 );
1066
1067
/**
1068
 * Disables the default link.
1069
 *
1070
 * @param string $link
1071
 * @return string
1072
 */
1073
function lsx_wc_disable_default_reset_variations_link( $link = '' ) {
1074
	return '';
1075
}
1076
1077
/*if ( ! function_exists( 'lsx_wc_template_single_meta' ) ) {
1078
	function lsx_wc_template_single_meta_top() {
1079
		global $product;
1080
1081
		remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_meta', 40 );
1082
		?>
1083
		<div class="product_meta">
1084
			<?php echo wc_get_product_category_list( $product->get_id(), ', ', '<span class="posted_in">' . _n( 'Category:', 'Categories:', count( $product->get_category_ids() ), 'woocommerce' ) . ' ', '</span>' ); ?>
1085
		</div>
1086
		<?php
1087
	}
1088
	add_action( 'woocommerce_single_product_summary', 'lsx_wc_template_single_meta_top', 7 );
1089
}
1090
*/
1091
1092
if ( ! function_exists( 'lsx_wc_template_single_meta' ) ) {
1093
	/**
1094
	 * Undocumented function
1095
	 *
1096
	 * @return void
1097
	 */
1098
	function lsx_wc_woocommerce_sku() {
1099
		global $product;
1100
		if ( function_exists( 'wc_product_sku_enabled' ) && wc_product_sku_enabled() && ( $product->get_sku() || $product->is_type( 'variable' ) ) ) {
1101
			?>
1102
			<span class="sku_wrapper"><?php esc_html_e( 'SKU:', 'lsx' ); ?> <span class="sku"><?php echo esc_attr( $product->get_sku() ); ?></span></span>
1103
			<?php
1104
			add_filter( 'wc_product_sku_enabled', 'lsx_wc_default_woocommerce_sku_disable' );
1105
		}
1106
	}
1107
	add_action( 'woocommerce_product_meta_start', 'woocommerce_template_single_meta', 10 );
1108
	/**
1109
	 * Disabled the default WC SKU
1110
	 *
1111
	 * @param boolean $enable
1112
	 * @return boolean
1113
	 */
1114
	function lsx_wc_default_woocommerce_sku_disable( $enable = false ) {
1115
		$enable = false;
1116
		return $enable;
1117
	}
1118
	
1119
}
1120