Passed
Push — master ( 512c9a...64f2ec )
by
unknown
15:06 queued 09:43
created

lsx_wc_body_class()   A

Complexity

Conditions 5
Paths 4

Size

Total Lines 12
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 5
eloc 6
nc 4
nop 1
dl 0
loc 12
rs 9.6111
c 0
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() ) ) {
364
			if ( $product->is_on_sale() && $product->get_regular_price() ) {
365
				$regular_price = wc_get_price_to_display( $product,
366
					array(
367
						'qty'   => 1,
368
						'price' => $product->get_regular_price(),
369
					)
370
				);
371
372
				$price = wc_format_price_range( $regular_price, esc_html__( 'Free!', 'lsx' ) );
373
			} else {
374
				$price = '<span class="amount">' . esc_html__( 'Free!', 'lsx' ) . '</span>';
375
			}
376
		}
377
378
		return $price;
379
	}
380
381
	add_filter( 'woocommerce_get_price_html', 'lsx_wc_change_price_html', 15, 2 );
382
383
endif;
384
385
if ( ! function_exists( 'lsx_wc_cart_link_fragment' ) ) :
386
387
	/**
388
	 * Cart Fragments.
389
	 * Ensure cart contents update when products are added to the cart via AJAX.
390
	 *
391
	 * @package    lsx
392
	 * @subpackage woocommerce
393
	 */
394
	function lsx_wc_cart_link_fragment( $fragments ) {
395
		global $woocommerce;
396
397
		ob_start();
398
		lsx_wc_cart_link();
399
		$fragments['li.lsx-wc-cart-menu-item > a'] = ob_get_clean();
400
401
		ob_start();
402
		lsx_wc_items_counter();
403
		$items_counter = ob_get_clean();
404
405
		if ( ! empty( $items_counter ) ) {
406
			$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'] );
407
		}
408
409
		return $fragments;
410
	}
411
412
endif;
413
414
if ( ! function_exists( 'lsx_wc_cart_link' ) ) :
415
416
	/**
417
	 * Cart Link.
418
	 * Displayed a link to the cart including the number of items present and the cart total.
419
	 *
420
	 * @package    lsx
421
	 * @subpackage woocommerce
422
	 */
423
	function lsx_wc_cart_link() {
424
		?>
425
			<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">
426
				<span class="lsx-wc-cart-amount"><?php echo wp_kses_data( WC()->cart->get_cart_subtotal() ); ?></span>
427
428
				<?php /* Translators: %s: items quantity */ ?>
429
				<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>
430
431
				<?php if ( ! empty( WC()->cart->get_cart_contents_count() ) ) : ?>
432
					<span class="lsx-wc-cart-count-badge"><?php echo wp_kses_data( WC()->cart->get_cart_contents_count() ); ?></span>
433
				<?php endif; ?>
434
			</a>
435
		<?php
436
	}
437
438
endif;
439
440
if ( ! function_exists( 'lsx_wc_items_counter' ) ) :
441
442
	/**
443
	 * Add car item hidden items counter.
444
	 *
445
	 * @package    lsx
446
	 * @subpackage woocommerce
447
	 */
448
	function lsx_wc_items_counter() {
449
		$count         = (int) WC()->cart->get_cart_contents_count();
450
		$items_counter = '';
451
452
		if ( ! empty( $count ) ) {
453
			$count -= 3;
454
455
			if ( 1 === $count ) {
456
				$items_counter = esc_html__( '1 other item in cart', 'lsx' );
457
			} elseif ( $count > 1 ) {
458
				/* Translators: %s: items counter */
459
				$items_counter = sprintf( esc_html__( '%s other items in cart', 'lsx' ), $count );
460
			}
461
		}
462
		$cart_url = function_exists( 'wc_get_cart_url' ) ? wc_get_cart_url() : WC()->cart->get_cart_url();
463
		if ( ! empty( $items_counter ) ) :
464
			?>
465
				<li class="woocommerce-mini-cart-item mini_cart_item" style="display: block;">
466
					<a href="<?php echo esc_url( $cart_url ); ?>"><?php echo esc_html( $items_counter ); ?></a>
467
				</li>
468
			<?php
469
		endif;
470
	}
471
472
endif;
473
474
if ( ! function_exists( 'lsx_wc_loop_shop_per_page' ) ) :
475
476
	/**
477
	 * Changes the number of products to display on shop.
478
	 *
479
	 * @package    lsx
480
	 * @subpackage woocommerce
481
	 */
482
	function lsx_wc_loop_shop_per_page( $items ) {
483
		$items = 12;
484
		return $items;
485
	}
486
487
	add_filter( 'loop_shop_per_page', 'lsx_wc_loop_shop_per_page', 20 );
488
489
endif;
490
491
if ( ! function_exists( 'lsx_wc_add_to_cart_message_html' ) ) :
492
493
	/**
494
	 * Changes the "added to cart" message HTML.
495
	 *
496
	 * @package    lsx
497
	 * @subpackage woocommerce
498
	 */
499
	function lsx_wc_add_to_cart_message_html( $message, $products ) {
500
		$message = '<div class="woocommerce-message-added-to-cart">' . $message . '</div>';
501
		return $message;
502
	}
503
504
	add_filter( 'wc_add_to_cart_message_html', 'lsx_wc_add_to_cart_message_html', 20, 2 );
505
506
endif;
507
508
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...
509
	add_filter( 'woocommerce_add_to_cart_fragments', 'lsx_wc_cart_link_fragment' );
510
} else {
511
	add_filter( 'add_to_cart_fragments', 'lsx_wc_cart_link_fragment' );
512
}
513
514
remove_action( 'woocommerce_after_shop_loop', 'woocommerce_pagination', 10 );
515
516
add_action( 'woocommerce_after_shop_loop', 'lsx_wc_sorting_wrapper', 9 );
517
add_action( 'woocommerce_after_shop_loop', 'woocommerce_catalog_ordering', 10 );
518
add_action( 'woocommerce_after_shop_loop', 'woocommerce_result_count', 20 );
519
add_action( 'woocommerce_after_shop_loop', 'woocommerce_pagination', 30 );
520
add_action( 'woocommerce_after_shop_loop', 'lsx_wc_sorting_wrapper_close', 31 );
521
522
remove_action( 'woocommerce_before_shop_loop', 'woocommerce_result_count', 20 );
523
remove_action( 'woocommerce_before_shop_loop', 'woocommerce_catalog_ordering', 30 );
524
525
add_action( 'woocommerce_before_shop_loop', 'lsx_wc_sorting_wrapper', 9 );
526
add_action( 'woocommerce_before_shop_loop', 'woocommerce_catalog_ordering', 10 );
527
add_action( 'woocommerce_before_shop_loop', 'woocommerce_result_count', 20 );
528
add_action( 'woocommerce_before_shop_loop', 'lsx_wc_woocommerce_pagination', 30 );
529
add_action( 'woocommerce_before_shop_loop', 'lsx_wc_sorting_wrapper_close', 31 );
530
531
if ( ! function_exists( 'lsx_wc_sorting_wrapper' ) ) :
532
533
	/**
534
	 * Sorting wrapper.
535
	 *
536
	 * @package    lsx
537
	 * @subpackage woocommerce
538
	 */
539
	function lsx_wc_sorting_wrapper() {
540
		echo '<div class="lsx-wc-sorting">';
541
	}
542
543
endif;
544
545
if ( ! function_exists( 'lsx_wc_sorting_wrapper_close' ) ) :
546
547
	/**
548
	 * Sorting wrapper close.
549
	 *
550
	 * @package    lsx
551
	 * @subpackage woocommerce
552
	 */
553
	function lsx_wc_sorting_wrapper_close() {
554
		echo '</div>';
555
	}
556
557
endif;
558
559
if ( ! function_exists( 'lsx_wc_product_columns_wrapper_close' ) ) :
560
561
	/**
562
	 * Product columns wrapper close.
563
	 *
564
	 * @package    lsx
565
	 * @subpackage woocommerce
566
	 */
567
	function lsx_wc_product_columns_wrapper_close() {
568
		echo '</div>';
569
	}
570
571
endif;
572
573
if ( ! function_exists( 'lsx_wc_woocommerce_pagination' ) ) :
574
575
	/**
576
	 * LSX WooCommerce Pagination
577
	 * WooCommerce disables the product pagination inside the woocommerce_product_subcategories() function
578
	 * but since LSX adds pagination before that function is excuted we need a separate function to
579
	 * determine whether or not to display the pagination.
580
	 *
581
	 * @package    lsx
582
	 * @subpackage woocommerce
583
	 */
584
	function lsx_wc_woocommerce_pagination() {
585
		if ( woocommerce_products_will_display() ) {
586
			woocommerce_pagination();
587
		}
588
	}
589
590
endif;
591
592
if ( ! function_exists( 'lsx_customizer_wc_controls' ) ) :
593
594
	/**
595
	 * Returns an array of the core panel.
596
	 *
597
	 * @package    lsx
598
	 * @subpackage customizer
599
	 *
600
	 * @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...
601
	 */
602
	function lsx_customizer_wc_controls( $lsx_controls ) {
603
		$lsx_controls['panels']['woocommerce'] = array(
604
			'title'       => esc_html__( 'WooCommerce', 'lsx' ),
605
			'description' => esc_html__( 'Change the WooCommerce settings.', 'lsx' ),
606
			'priority'    => 23,
607
		);
608
609
		/**
610
		 * Global.
611
		 */
612
613
		$lsx_controls['sections']['lsx-wc-global'] = array(
614
			'title'       => esc_html__( 'LSX Global', 'lsx' ),
615
			'description' => esc_html__( 'Change the WooCommerce global settings.', 'lsx' ),
616
			'panel'       => 'woocommerce',
617
			'priority'    => 1,
618
		);
619
620
		$lsx_controls['settings']['lsx_wc_trust_footer_bar_status'] = array(
621
			'default'           => '1',
622
			'sanitize_callback' => 'lsx_sanitize_checkbox',
623
		);
624
625
		$lsx_controls['fields']['lsx_wc_trust_footer_bar_status'] = array(
626
			'label'       => esc_html__( 'Footer Trust Factors Section', 'lsx' ),
627
			'description' => esc_html__( 'Enable the footer trust factors section.', 'lsx' ),
628
			'section'     => 'lsx-wc-global',
629
			'type'        => 'checkbox',
630
			'priority'    => 1,
631
		);
632
633
		$lsx_controls['settings']['lsx_wc_mobile_footer_bar_status'] = array(
634
			'default'           => '1',
635
			'sanitize_callback' => 'lsx_sanitize_checkbox',
636
		);
637
638
		$lsx_controls['fields']['lsx_wc_mobile_footer_bar_status'] = array(
639
			'label'       => esc_html__( 'Footer Bar', 'lsx' ),
640
			'description' => esc_html__( 'Enable the mobile footer bar.', 'lsx' ),
641
			'section'     => 'lsx-wc-global',
642
			'type'        => 'checkbox',
643
			'priority'    => 1,
644
		);
645
646
		/**
647
		 * Cart.
648
		 */
649
650
		$lsx_controls['sections']['lsx-wc-cart'] = array(
651
			'title'       => esc_html__( 'LSX Cart', 'lsx' ),
652
			'description' => esc_html__( 'Change the WooCommerce cart settings.', 'lsx' ),
653
			'panel'       => 'woocommerce',
654
			'priority'    => 2,
655
		);
656
657
		$lsx_controls['settings']['lsx_header_wc_cart'] = array(
658
			'default'           => false,
659
			'sanitize_callback' => 'lsx_sanitize_checkbox',
660
		);
661
662
		$lsx_controls['fields']['lsx_header_wc_cart'] = array(
663
			'label'       => esc_html__( 'Menu Item', 'lsx' ),
664
			'description' => esc_html__( 'Enable the cart menu item.', 'lsx' ),
665
			'section'     => 'lsx-wc-cart',
666
			'type'        => 'checkbox',
667
			'priority'    => 1,
668
		);
669
670
		return $lsx_controls;
671
	}
672
673
	add_filter( 'lsx_customizer_controls', 'lsx_customizer_wc_controls' );
674
675
endif;
676
677
if ( ! function_exists( 'lsx_wc_global_header_title' ) ) :
678
679
	/**
680
	 * Move the shop title into the global header
681
	 *
682
	 * @package    lsx
683
	 * @subpackage the-events-calendar
684
	 */
685
	function lsx_wc_global_header_title( $title ) {
686
687
		if ( is_woocommerce() && is_shop() ) {
688
689
			$title = __( 'Shop', 'lsx' );
690
		}
691
692
		return $title;
693
	}
694
	add_filter( 'lsx_global_header_title', 'lsx_wc_global_header_title', 200, 1 );
695
696
endif;
697
698
699
if ( ! function_exists( 'lsx_wc_footer_bar' ) ) :
700
701
	/**
702
	 * Display WC footer bar.
703
	 *
704
	 * @package    lsx
705
	 * @subpackage woocommerce
706
	 */
707
	function lsx_wc_footer_bar() {
708
		$cart_url = function_exists( 'wc_get_cart_url' ) ? wc_get_cart_url() : WC()->cart->get_cart_url();
709
		if ( ! empty( get_theme_mod( 'lsx_wc_mobile_footer_bar_status', '1' ) ) ) :
710
			?>
711
			<div class="lsx-wc-footer-bar">
712
				<form role="search" method="get" action="<?php echo esc_url( home_url() ); ?>" class="lsx-wc-footer-bar-form">
713
					<fieldset>
714
						<legend class="screen-reader-text"><?php esc_html_e( 'Search products', 'lsx' ); ?></legend>
715
						<input type="search" name="s" placeholder="<?php esc_attr_e( 'Search products...', 'lsx' ); ?>" class="form-control">
716
					</fieldset>
717
				</form>
718
719
				<ul class="lsx-wc-footer-bar-items">
720
					<li class="lsx-wc-footer-bar-item">
721
						<a href="<?php echo esc_url( home_url() ); ?>" class="lsx-wc-footer-bar-link">
722
							<i class="fa fa-home" aria-hidden="true"></i>
723
							<span><?php esc_html_e( 'Home', 'lsx' ); ?></span>
724
						</a>
725
					</li>
726
727
					<li class="lsx-wc-footer-bar-item">
728
						<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

728
						<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

728
						<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...
729
							<i class="fa fa-user" aria-hidden="true"></i>
730
							<span><?php esc_html_e( 'Account', 'lsx' ); ?></span>
731
						</a>
732
					</li>
733
734
					<li class="lsx-wc-footer-bar-item">
735
						<a href="#" class="lsx-wc-footer-bar-link lsx-wc-footer-bar-link-toogle">
736
							<i class="fa fa-search" aria-hidden="true"></i>
737
							<span><?php esc_html_e( 'Search', 'lsx' ); ?></span>
738
						</a>
739
					</li>
740
741
					<li class="lsx-wc-footer-bar-item">
742
						<a href="<?php echo esc_url( $cart_url ); ?>" class="lsx-wc-footer-bar-link">
743
							<i class="fa fa-shopping-basket" aria-hidden="true"></i>
744
							<?php $count = WC()->cart->get_cart_contents_count(); ?>
745
							<?php if ( ! empty( $count ) ) : ?>
746
								<span class="lsx-wc-footer-bar-count"><?php echo wp_kses_data( $count ); ?></span>
747
							<?php endif; ?>
748
							<span><?php esc_html_e( 'Cart', 'lsx' ); ?></span>
749
						</a>
750
					</li>
751
				</ul>
752
			</div>
753
			<?php
754
		endif;
755
	}
756
757
	add_action( 'lsx_body_bottom', 'lsx_wc_footer_bar', 15 );
758
759
endif;
760
761
if ( ! function_exists( 'lsx_wc_body_class' ) ) :
762
763
	/**
764
	 * Changes body class.
765
	 *
766
	 * @package    lsx
767
	 * @subpackage woocommerce
768
	 */
769
	function lsx_wc_body_class( $classes ) {
770
		global $post;
771
772
		if ( $post && class_exists( 'WC_Wishlists_Pages' ) && WC_Wishlists_Pages::is_wishlist_page( $post->post_name ) ) {
773
			$classes[] = 'woocommerce-page woocommerce-wishlist';
774
		}
775
776
		if ( ! empty( get_theme_mod( 'lsx_wc_mobile_footer_bar_status', '1' ) ) ) {
777
			$classes[] = 'lsx-wc-has-footer-bar';
778
		}
779
780
		return $classes;
781
	}
782
783
	add_filter( 'body_class', 'lsx_wc_body_class', 2999 );
784
785
endif;
786
787
if ( ! function_exists( 'lsx_wc_downloadable_products' ) ) :
788
789
	/**
790
	 * Changes downloads "download" button text.
791
	 *
792
	 * @package    lsx
793
	 * @subpackage woocommerce
794
	 */
795
	function lsx_wc_downloadable_products( $downloads ) {
796
		foreach ( $downloads as $i => $download ) {
797
			$downloads[ $i ]['download_name'] = esc_html__( 'Download', 'lsx' );
798
		}
799
800
		return $downloads;
801
	}
802
803
	add_filter( 'woocommerce_customer_get_downloadable_products', 'lsx_wc_downloadable_products', 2999 );
804
805
endif;
806
807
if ( ! function_exists( 'lsx_wc_move_bundle_products' ) ) :
808
809
	/**
810
	 * WooCommerce - Move the bundle products to a tab.
811
	 *
812
	 * @package    lsx
813
	 * @subpackage woocommerce
814
	 */
815
	function lsx_wc_move_bundle_products( $tabs ) {
816
		global $product, $post;
817
818
		if ( method_exists( $product, 'get_bundled_items' ) ) {
819
			$bundled_items = $product->get_bundled_items();
820
821
			if ( ! empty( $bundled_items ) ) {
822
				$tabs['bundled_products'] = array(
823
					'title'    => __( 'Included Products', 'lsx' ),
824
					'priority' => 10,
825
					'callback' => 'lsx_wc_bundle_products',
826
				);
827
			}
828
		}
829
830
		if ( isset( $tabs['description'] ) ) {
831
			$tabs['description']['priority'] = 5;
832
		}
833
834
		if ( isset( $tabs['reviews'] ) ) {
835
			$tabs['reviews']['priority'] = 15;
836
		}
837
838
		if ( isset( $tabs['product_enquiry'] ) ) {
839
			$tabs['product_enquiry']['priority'] = 20;
840
		}
841
842
		return $tabs;
843
	}
844
845
	add_action( 'woocommerce_product_tabs', 'lsx_wc_move_bundle_products', 50 );
846
847
endif;
848
849
if ( ! function_exists( 'lsx_wc_bundle_products' ) ) :
850
851
	function lsx_wc_bundle_products() {
852
		global $product, $post;
853
854
		if ( method_exists( $product, 'get_bundled_items' ) ) {
855
			$bundled_items = $product->get_bundled_items();
856
857
			// do_action( 'woocommerce_before_bundled_items', $product );
858
859
			// foreach ( $bundled_items as $bundled_item ) {
860
			// 	do_action( 'woocommerce_bundled_item_details', $bundled_item, $product );
861
			// }
862
863
			// do_action( 'woocommerce_after_bundled_items', $product );
864
865
			$product_original = $product;
866
867
			// $this->widget_start( $args, $instance );
868
869
			// @codingStandardsIgnoreLine
870
			echo apply_filters( 'woocommerce_before_widget_product_list', '<ul class="product_list_widget">' );
871
872
			foreach ( $bundled_items as $bundled_item ) {
873
				$product = wc_get_product( $bundled_item->item_data['product_id'] );
874
				wc_get_template( 'content-widget-product.php' );
875
				$product = $product_original;
876
			}
877
878
			// @codingStandardsIgnoreLine
879
			echo apply_filters( 'woocommerce_after_widget_product_list', '</ul>' );
880
		}
881
882
		// $this->widget_end( $args );
883
	}
884
885
endif;
886
887
888
if ( ! function_exists( 'lsx_wc_product_searchform' ) ) :
889
	/**
890
	 * woo_custom_product_searchform
891
	 *
892
	 * @access      public
893
	 * @since       1.0
894
	 * @return      void
895
	 */
896
	function lsx_wc_product_searchform( $form ) {
897
898
		$form = '
899
			<form role="search" method="get" class="search-form form-inline" id="searchform" action="<?php echo esc_url( home_url( \'/\' ) ); ?>">
900
				<div class="input-group">
901
					<input type="search" value="<?php if ( is_search() ) { echo get_search_query(); } ?>" name="s" class="search-field form-control" placeholder="<?php esc_attr_e( \'Search\', \'lsx\' ); ?> <?php echo esc_attr( get_bloginfo( \'name\' ) ); ?>">
902
					<label class="hide"><?php esc_html_e( \'Search for:\', \'lsx\' ); ?></label>
903
904
					<span class="input-group-btn">
905
						<button type="submit" class="search-submit btn btn-default"><span class="fa fa-search"></span></button>
906
					</span>
907
				</div>
908
909
				<input type="hidden" name="post_type" value="product" />
910
			</form>
911
		';
912
913
		return $form;
914
915
	}
916
endif;
917
add_filter( 'get_product_search_form', 'lsx_wc_product_searchform', 10, 1 );
918
919
	/**
920
	 * Output the pagination.
921
	 */
922
function woocommerce_pagination() {
923
	if ( ! wc_get_loop_prop( 'is_paginated' ) || ! woocommerce_products_will_display() ) {
924
		return;
925
	}
926
	$args = array(
927
		'total'   => wc_get_loop_prop( 'total_pages' ),
928
		'current' => wc_get_loop_prop( 'current_page' ),
929
	);
930
931
	if ( wc_get_loop_prop( 'is_shortcode' ) ) {
932
		$args['base']   = esc_url_raw( add_query_arg( 'product-page', '%#%', false ) );
933
		$args['format'] = '?product-page = %#%';
934
	} else {
935
		$args['base']   = esc_url_raw( str_replace( 999999999, '%#%', remove_query_arg( 'add-to-cart', get_pagenum_link( 999999999, false ) ) ) );
936
		$args['format'] = '';
937
	}
938
939
	echo wp_kses_post( '<div class="lsx-pagination-wrapper">' );
940
	$template = wc_get_template_html( 'loop/pagination.php', $args );
941
	$template = str_replace( 'woocommerce-pagination', 'lsx-pagination', $template );
942
	echo wp_kses_post( $template );
943
	echo wp_kses_post( '</div>' );
944
}
945
946
function lsx_wc_pagination_args( $args ) {
947
	$args['prev_text'] = '<span class="meta-nav">&larr;</span> ' . esc_html__( 'Previous', 'lsx' );
948
	$args['next_text'] = esc_html__( 'Next', 'lsx' ) . ' <span class="meta-nav">&rarr;</span>';
949
	$args['type']      = 'plain';
950
	return $args;
951
}
952
add_filter( 'woocommerce_pagination_args', 'lsx_wc_pagination_args', 10, 1 );
953
954
955
/**
956
 * Returns the location of our product widget
957
 *
958
 * @param $located
959
 * @param $template_name
960
 *
961
 * @return array
962
 */
963
function lsx_wc_product_widget_template( $located, $template_name ) {
964
	if ( 'content-widget-product.php' === $template_name || 'content-widget-review.php' === $template_name ) {
965
966
		$new_location = get_stylesheet_directory() . '/partials/' . $template_name;
967
		if ( file_exists( $new_location ) ) {
968
			$located = $new_location;
969
		} else {
970
			$new_location = get_parent_theme_file_path() . '/partials/' . $template_name;
971
			if ( file_exists( $new_location ) ) {
972
				$located = $new_location;
973
			}
974
		}
975
	}
976
	return $located;
977
}
978
add_filter( 'wc_get_template', 'lsx_wc_product_widget_template', 90, 2 );
979
980
if ( ! function_exists( 'lsx_payment_gateway_logos' ) ) {
981
	/**
982
	 * Add Lets Encrypt and PayFast logos to cart.
983
	 **/
984
	function lsx_payment_gateway_logos() {
985
		$encript_image        = get_template_directory_uri() . '/assets/images/lets-encript.svg';
986
		$payfast_image        = get_template_directory_uri() . '/assets/images/payfast-footer-logo.svg';
987
		$payment_logos        = get_template_directory_uri() . '/assets/images/payment-logos.svg';
988
		$payment_logos_mobile = get_template_directory_uri() . '/assets/images/payment-logos-mobile.svg';
989
		if ( ( is_checkout() || is_cart() ) && ( ! empty( get_theme_mod( 'lsx_wc_trust_footer_bar_status', '1' ) ) ) ) {
990
		?>
991
		<div class="row text-center vertical-align lsx-full-width-base-small checkout-cta-bottom">
992
			<div class="col-md-12 img-payfast">
993
				<img src="<?php echo esc_url( $payfast_image ); ?>" alt="payfast"/>
994
			</div>
995
			<div class="col-md-12 img-payments hidden-xs">
996
				<img src="<?php echo esc_url( $payment_logos ); ?>" alt="payments"/>
997
			</div>
998
			<div class="col-md-12 img-payments hidden-sm hidden-md hidden-lg">
999
				<img src="<?php echo esc_url( $payment_logos_mobile ); ?>" alt="payments"/>
1000
			</div>
1001
			<div class="col-md-12 img-encrypt">
1002
				<img src="<?php echo esc_url( $encript_image ); ?>" alt="lets_encrypt"/>
1003
			</div>
1004
		</div>
1005
1006
		<?php
1007
		}
1008
	}
1009
	add_action( 'lsx_footer_before', 'lsx_payment_gateway_logos' );
1010
}
1011