Passed
Push — master ( 678e16...607c16 )
by Warwick
02:49 queued 11s
created

extras.php ➔ lsx_get_thumbnail()   F

Complexity

Conditions 21
Paths 486

Size

Total Lines 77

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 21
nc 486
nop 2
dl 0
loc 77
rs 0.7138
c 0
b 0
f 0

How to fix   Long Method    Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
/**
3
 * LSX functions and definitions - Integrations - Extras
4
 *
5
 * @package    lsx
6
 * @subpackage extras
7
 */
8
9
if ( ! defined( 'ABSPATH' ) ) {
10
	exit;
11
}
12
13
/**
14
 * Enable shortcode for text widget.
15
 *
16
 * @package    lsx
17
 * @subpackage extras
18
 */
19
add_filter( 'widget_text', 'shortcode_unautop' );
20
add_filter( 'widget_text', 'do_shortcode' );
21
22
if ( ! function_exists( 'lsx_kses_allowed_html' ) ) :
23
24
	/**
25
	 * Enable extra attributes (srcset, sizes) in img tag.
26
	 *
27
	 * @package    lsx
28
	 * @subpackage extras
29
	 */
30
	function lsx_kses_allowed_html( $allowedtags, $context ) {
0 ignored issues
show
Unused Code introduced by
The parameter $context is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
31
		$allowedtags['img']['srcset'] = true;
32
		$allowedtags['img']['sizes']  = true;
33
34
		$allowedtags['input']['name']  = true;
35
		$allowedtags['input']['type']  = true;
36
		$allowedtags['input']['value'] = true;
37
		$allowedtags['input']['class'] = true;
38
		$allowedtags['input']['id']    = true;
39
		$allowedtags['script']['type'] = true;
40
		return $allowedtags;
41
	}
42
43
endif;
44
45
add_filter( 'wp_kses_allowed_html', 'lsx_kses_allowed_html', 10, 2 );
46
47
if ( ! function_exists( 'lsx_body_class' ) ) :
48
49
	/**
50
	 * Add and remove body_class() classes.
51
	 *
52
	 * @package    lsx
53
	 * @subpackage extras
54
	 */
55
	function lsx_body_class( $classes ) {
56
		global $post;
57
58
		$header_layout = get_theme_mod( 'lsx_header_layout', 'inline' );
59
		$classes[]     = 'header-' . $header_layout;
60
61
		$mobile_header_layout = get_theme_mod( 'lsx_header_mobile_layout', 'navigation-bar' );
62
		$classes[]            = 'mobile-header-' . $mobile_header_layout;
63
64
		if ( isset( $post ) ) {
65
			$classes[] = $post->post_name;
66
		}
67
68
		if ( class_exists( 'LSX_Banners' ) && empty( apply_filters( 'lsx_banner_plugin_disable', false ) ) ) {
69
			$post_types = array( 'page', 'post' );
70
			$post_types = apply_filters( 'lsx_allowed_post_type_banners', $post_types );
71
72
			$img_group = get_post_meta( $post->ID, 'image_group', true );
73
74
			if ( is_singular( $post_types ) && ! empty( $img_group ) && is_array( $img_group ) && ! empty( $img_group['banner_image'] ) ) {
75
				$classes[] = 'page-has-banner';
76
			}
77
78
			if ( is_singular( $post_types ) && empty( $img_group['banner_image'] ) && ( ! has_post_thumbnail( $post->ID ) ) ) {
79
				$classes[] = 'page-has-no-banner';
80
			}
81
		}
82
83
		if ( function_exists( 'tour_operator' ) ) {
84
			$post_types = array( 'page', 'post' );
0 ignored issues
show
Unused Code introduced by
$post_types is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
85
86
			$classes[] = 'to-active';
87
		}
88
89
		if ( has_nav_menu( 'top-menu' ) || has_nav_menu( 'top-menu-left' ) ) {
90
			$classes[] = 'has-top-menu';
91
		}
92
93
		$fixed_header = get_theme_mod( 'lsx_header_fixed', false );
94
95
		if ( false !== $fixed_header ) {
96
			$classes[] = 'top-menu-fixed';
97
		}
98
99
		$search_form = get_theme_mod( 'lsx_header_search', false );
100
101
		if ( false !== $search_form ) {
102
			$classes[] = 'has-header-search';
103
		}
104
105
		$preloader_content = get_theme_mod( 'lsx_preloader_content_status', false );
106
107
		if ( false !== $preloader_content ) {
108
			$classes[] = 'preloader-content-enable';
109
		}
110
111
		$register_enabled = get_option( 'users_can_register', false );
112
		if ( ( $register_enabled ) && is_page( 'my-account' ) && is_singular() ) {
113
			$classes[] = 'register-enabled';
114
		}
115
116
		return $classes;
117
	}
118
119
endif;
120
121
add_filter( 'body_class', 'lsx_body_class' );
122
123
if ( ! function_exists( 'lsx_embed_wrap' ) ) :
124
125
	/**
126
	 * Wrap embedded media as suggested by Readability.
127
	 *
128
	 * @package    lsx
129
	 * @subpackage extras
130
	 *
131
	 * @link https://gist.github.com/965956
132
	 * @link http://www.readability.com/publishers/guidelines#publisher
133
	 */
134
	function lsx_embed_wrap( $cache, $url, $attr = '', $post_id = '' ) {
0 ignored issues
show
Unused Code introduced by
The parameter $url is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
Unused Code introduced by
The parameter $attr is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
Unused Code introduced by
The parameter $post_id is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
135
		if ( false !== strpos( $cache, '<iframe' ) ) {
136
			return '<div class="entry-content-asset">' . $cache . '</div>';
137
		}
138
139
		return $cache;
140
	}
141
142
endif;
143
144
add_filter( 'embed_oembed_html', 'lsx_embed_wrap', 10, 4 );
145
146
if ( ! function_exists( 'lsx_remove_self_closing_tags' ) ) :
147
148
	/**
149
	 * Remove unnecessary self-closing tags.
150
	 *
151
	 * @package    lsx
152
	 * @subpackage extras
153
	 */
154
	function lsx_remove_self_closing_tags( $input ) {
155
		return str_replace( ' />', '>', $input );
156
	}
157
158
endif;
159
160
add_filter( 'get_avatar', 'lsx_remove_self_closing_tags' ); // <img />
161
add_filter( 'comment_id_fields', 'lsx_remove_self_closing_tags' ); // <input />
162
add_filter( 'post_thumbnail_html', 'lsx_remove_self_closing_tags' ); // <img />
163
164
if ( ! function_exists( 'lsx_is_element_empty' ) ) :
165
166
	/**
167
	 * Checks if a Nav $element is empty or not.
168
	 *
169
	 * @package    lsx
170
	 * @subpackage extras
171
	 */
172
	function lsx_is_element_empty( $element ) {
173
		$element = trim( $element );
174
		return empty( $element ) ? false : true;
175
	}
176
177
endif;
178
179
if ( ! function_exists( 'lsx_get_thumbnail' ) ) :
180
181
	/**
182
	 * return the responsive images.
183
	 *
184
	 * @package    lsx
185
	 * @subpackage extras
186
	 */
187
	function lsx_get_thumbnail( $size, $image_src = false ) {
188
		global $wp_version;
189
190
		if ( false === $image_src ) {
191
			$post_id           = get_the_ID();
192
			$post_thumbnail_id = get_post_thumbnail_id( $post_id );
193
			if ( empty( $post_thumbnail_id ) ) {
194
				$post_thumbnail_id = apply_filters( 'lsx_get_thumbnail_post_placeholder_id', $post_thumbnail_id, $post_id );
195
			}
196
		} elseif ( false !== $image_src ) {
197
			if ( is_numeric( $image_src ) ) {
198
				$post_thumbnail_id = $image_src;
199
			} else {
200
				$post_thumbnail_id = lsx_get_attachment_id_from_src( $image_src );
201
				if ( empty( $post_thumbnail_id ) ) {
202
					$post_thumbnail_id = apply_filters( 'lsx_get_thumbnail_post_placeholder_id', $post_thumbnail_id, $post_id );
0 ignored issues
show
Bug introduced by
The variable $post_id seems only to be defined at a later point. Did you maybe move this code here without moving the variable definition?

This error can happen if you refactor code and forget to move the variable initialization.

Let’s take a look at a simple example:

function someFunction() {
    $x = 5;
    echo $x;
}

The above code is perfectly fine. Now imagine that we re-order the statements:

function someFunction() {
    echo $x;
    $x = 5;
}

In that case, $x would be read before it is initialized. This was a very basic example, however the principle is the same for the found issue.

Loading history...
203
				}
204
			}
205
		}
206
207
		$size      = apply_filters( 'lsx_thumbnail_size', $size );
208
		$img       = '';
209
		$lazy_img  = '';
210
		$image_url = '';
0 ignored issues
show
Unused Code introduced by
$image_url is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
211
212
		if ( 'lsx-thumbnail-single' === $size || 'lsx-thumbnail-wide' === $size || 'lsx-thumbnail-square' === $size || 'thumbnail' === $size ) {
213
			$srcset = false;
214
			if ( ( ( 'team' === get_post_type() ) || ( 'testimonial' === get_post_type() ) ) && is_search() ) {
215
				$img = get_the_post_thumbnail_url( get_the_ID(), 'lsx-thumbnail-wide' );
216
			} else {
217
				$temp_img = wp_get_attachment_image_src( $post_thumbnail_id, $size );
0 ignored issues
show
Bug introduced by
The variable $post_thumbnail_id does not seem to be defined for all execution paths leading up to this point.

If you define a variable conditionally, it can happen that it is not defined for all execution paths.

Let’s take a look at an example:

function myFunction($a) {
    switch ($a) {
        case 'foo':
            $x = 1;
            break;

        case 'bar':
            $x = 2;
            break;
    }

    // $x is potentially undefined here.
    echo $x;
}

In the above example, the variable $x is defined if you pass “foo” or “bar” as argument for $a. However, since the switch statement has no default case statement, if you pass any other value, the variable $x would be undefined.

Available Fixes

  1. Check for existence of the variable explicitly:

    function myFunction($a) {
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
        }
    
        if (isset($x)) { // Make sure it's always set.
            echo $x;
        }
    }
    
  2. Define a default value for the variable:

    function myFunction($a) {
        $x = ''; // Set a default which gets overridden for certain paths.
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
        }
    
        echo $x;
    }
    
  3. Add a value for the missing path:

    function myFunction($a) {
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
    
            // We add support for the missing case.
            default:
                $x = '';
                break;
        }
    
        echo $x;
    }
    
Loading history...
218
				if ( ! empty( $temp_img ) ) {
219
					$img = $temp_img[0];
220
				}
221
			}
222
		} else {
223
			$srcset = true;
224
			$img    = wp_get_attachment_image_srcset( $post_thumbnail_id, $size );
225
226
			$temp_lazy = wp_get_attachment_image_src( $post_thumbnail_id, $size );
227
			if ( ! empty( $temp_lazy ) ) {
228
				$lazy_img = $temp_lazy[0];
229
			}
230
231
			if ( empty( $img ) ) {
232
				$srcset = false;
233
				if ( ! empty( $lazy_img ) ) {
234
					$img = $lazy_img;
235
				}
236
			}
237
		}
238
239
		if ( '' !== $img ) {
240
241
			$image_url = $img;
242
243
			$img = '<img title="' . the_title_attribute( 'echo=0' ) . '" alt="' . the_title_attribute( 'echo=0' ) . '" class="attachment-responsive wp-post-image lsx-responsive" ';
244
245
			if ( version_compare( $wp_version, '5.5', '>=' ) ) {
246
				$img = '<img loading="lazy" title="' . the_title_attribute( 'echo=0' ) . '" alt="' . the_title_attribute( 'echo=0' ) . '" class="attachment-responsive wp-post-image lsx-responsive wp-lazy" ';
247
			}
248
249
			if ( $srcset ) {
250
				$img .= 'srcset="' . esc_attr( $image_url ) . '" ';
251
			} else {
252
				$img .= 'src="' . esc_url( $image_url ) . '" ';
253
			}
254
			$img .= '/>';
255
256
			if ( ! version_compare( $wp_version, '5.5', '>=' ) ) {
257
				$img = apply_filters( 'lsx_lazyload_filter_images', $img );
258
				$img = apply_filters( 'lsx_lazyload_slider_images', $img, $post_thumbnail_id, $size, $srcset, $image_url );
259
			}
260
		}
261
262
		return $img;
263
	}
264
265
endif;
266
267
if ( ! function_exists( 'lsx_thumbnail' ) ) :
268
269
	/**
270
	 * Output the Resonsive Images.
271
	 *
272
	 * @package    lsx
273
	 * @subpackage extras
274
	 */
275
	function lsx_thumbnail( $size = 'thumbnail', $image_src = false ) {
276
		echo wp_kses_post( lsx_get_thumbnail( $size, $image_src ) );
277
	}
278
279
endif;
280
281
if ( ! function_exists( 'lsx_get_attachment_id_from_src' ) ) :
282
283
	/**
284
	 * Gets the attachments ID from the src.
285
	 *
286
	 * @package    lsx
287
	 * @subpackage extras
288
	 */
289
	function lsx_get_attachment_id_from_src( $image_src ) {
290
		$post_id = wp_cache_get( $image_src, 'lsx_get_attachment_id_from_src' );
291
292
		if ( false === $post_id ) {
293
			global $wpdb;
294
			$post_id = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM {$wpdb->posts} WHERE guid='%s' LIMIT 1", $image_src ) );
295
			wp_cache_set( $image_src, $post_id, 'lsx_get_attachment_id_from_src', 3600 );
296
		}
297
298
		return $post_id;
299
	}
300
301
endif;
302
303
if ( ! function_exists( 'lsx_page_banner' ) ) :
304
305
	/**
306
	 * Add Featured Image as Banner on Single Pages.
307
	 *
308
	 * @package    lsx
309
	 * @subpackage extras
310
	 */
311
	function lsx_page_banner() {
312
		if ( true === apply_filters( 'lsx_page_banner_disable', false ) ) {
313
			return;
314
		}
315
316
		$post_types = array( 'page', 'post' );
317
		$post_types = apply_filters( 'lsx_allowed_post_type_banners', $post_types );
318
319
		if ( is_singular( $post_types ) && has_post_thumbnail() ) :
320
			$bg_image = '';
321
322
			if ( has_post_thumbnail() ) {
323
				$temp_bg_image = wp_get_attachment_image_src( get_post_thumbnail_id( get_the_ID() ), 'full' );
324
				if ( ! empty( $temp_bg_image ) ) {
325
					$bg_image = $temp_bg_image[0];
326
				}
327
			}
328
329
			if ( '' !== $bg_image ) :
330
				?>
331
					<div class="page-banner-wrap">
332
						<div class="page-banner">
333
							<?php lsx_banner_inner_top(); ?>
334
335
							<div class="page-banner-image" style="background-image:url(<?php echo esc_attr( $bg_image ); ?>);"></div>
336
337
							<div class="container">
338
								<header class="page-header">
339
									<h1 class="page-title"><?php the_title(); ?></h1>
340
									<?php lsx_banner_content(); ?>
341
								</header>
342
							</div>
343
344
							<?php lsx_banner_inner_bottom(); ?>
345
						</div>
346
					</div>
347
				<?php
348
			endif;
349
		endif;
350
	}
351
352
endif;
353
354
add_filter( 'lsx_banner_disable', 'lsx_disable_banner_for_blocks' );
355
add_filter( 'lsx_global_header_disable', 'lsx_disable_banner_for_blocks' );
356
357
358
if ( ! function_exists( 'lsx_disable_banner_for_blocks' ) ) :
359
360
	/**
361
	 * Disable the Banner if the page is using Blocks
362
	 *
363
	 * @package    lsx
364
	 * @subpackage extras
365
	 *
366
	 * @param  $disable boolean
367
	 * @return boolean
368
	 */
369
	function lsx_disable_banner_for_blocks( $disable ) {
370
		$queried_object = get_queried_object_id();
371
		$show_on_front  = get_option( 'show_on_front' );
372
373
		if ( 'page' === $show_on_front && (int) get_option( 'page_for_posts' ) === $queried_object ) {
374
			return $disable;
375
		}
376
377
		if ( function_exists( 'has_blocks' ) && has_blocks() && ( ! is_archive() ) ) {
378
			$disable = true;
379
		}
380
381
		// Single projects will still have banners.
382
		if ( function_exists( 'has_blocks' ) && has_blocks() && ( is_singular( 'project' ) ) ) {
383
			$disable = false;
384
		}
385
		return $disable;
386
	}
387
388
endif;
389
390
add_action( 'lsx_header_after', 'lsx_page_banner' );
391
392
if ( ! function_exists( 'lsx_form_submit_button' ) ) :
393
394
	/**
395
	 * filter the Gravity Forms button type.
396
	 *
397
	 * @package    lsx
398
	 * @subpackage extras
399
	 *
400
	 * @param  $button String
401
	 * @param  $form   Object
402
	 * @return String
403
	 */
404
	function lsx_form_submit_button( $button, $form ) {
0 ignored issues
show
Unused Code introduced by
The parameter $button is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
405
		return "<button class='btn btn-primary' id='gform_submit_button_{$form["id"]}'><span>Submit</span></button>";
406
	}
407
408
endif;
409
410
add_filter( 'gform_submit_button', 'lsx_form_submit_button', 10, 2 );
411
412
if ( ! function_exists( 'lsx_excerpt_more' ) ) :
413
414
	/**
415
	 * Replaces the excerpt "more" text by a link.
416
	 *
417
	 * @package    lsx
418
	 * @subpackage extras
419
	 */
420
	function lsx_excerpt_more( $more ) {
0 ignored issues
show
Unused Code introduced by
The parameter $more is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
421
		return '...';
422
	}
423
424
endif;
425
426
add_filter( 'excerpt_more', 'lsx_excerpt_more' );
427
428
if ( ! function_exists( 'lsx_the_excerpt_filter' ) ) :
429
430
	/**
431
	 * Add a continue reading link to the excerpt.
432
	 *
433
	 * @package    lsx
434
	 * @subpackage extras
435
	 */
436
	function lsx_the_excerpt_filter( $excerpt ) {
437
438
		$post_formats = array(
439
			'aside'   => 'aside',
440
			'gallery' => 'gallery',
441
			'link'    => 'link',
442
			'image'   => 'image',
443
			'quote'   => 'quote',
444
			'status'  => 'status',
445
			'video'   => 'video',
446
			'audio'   => 'audio',
447
		);
448
449
		$show_full_content = has_post_format( apply_filters( 'lsx_the_excerpt_filter_post_types', $post_formats ) );
450
451
		if ( ! $show_full_content ) {
452
			if ( '' !== $excerpt && ! stristr( $excerpt, 'moretag' ) ) {
453
				$pagination = wp_link_pages(
454
					array(
455
						'before'      => '<div class="lsx-postnav-wrapper"><div class="lsx-postnav">',
456
						'after'       => '</div></div>',
457
						'link_before' => '<span>',
458
						'link_after'  => '</span>',
459
						'echo'        => 0,
460
					)
461
				);
462
463
				if ( ! empty( $pagination ) ) {
464
					$excerpt .= $pagination;
465
				} else {
466
					$excerpt_more = '<p><a class="moretag" href="' . esc_url( get_permalink() ) . '">' . esc_html__( 'Read More', 'lsx' ) . '</a></p>';
467
					$excerpt .= apply_filters( 'excerpt_more_p', $excerpt_more );
468
				}
469
			}
470
		}
471
472
		return $excerpt;
473
	}
474
475
endif;
476
477
add_filter( 'the_excerpt', 'lsx_the_excerpt_filter', 1, 20 );
478
479
if ( ! function_exists( 'lsx_full_width_widget_classes' ) ) :
480
481
	/**
482
	 * Filter sidebar widget params, to add the widget_lsx_full_width_alt or widget_lsx_full_width classes to the text widget.
483
	 *
484
	 * @package    lsx
485
	 * @subpackage extras
486
	 */
487
	function lsx_full_width_widget_classes( $params ) {
488
		if ( is_admin() ) {
489
			return $params;
490
		}
491
492
		global $wp_registered_widgets;
493
494
		$widget_id   = $params[0]['widget_id'];
495
		$widget_name = $params[0]['widget_name'];
496
497
		if ( 'Text' === $widget_name ) {
498
			$wp_registered_widgets[ $widget_id ]['original_callback'] = $wp_registered_widgets[ $widget_id ]['callback'];
499
			$wp_registered_widgets[ $widget_id ]['callback']          = 'lsx_full_width_widget_custom_callback';
500
		}
501
502
		return $params;
503
	}
504
505
endif;
506
507
add_filter( 'dynamic_sidebar_params', 'lsx_full_width_widget_classes' );
508
509
if ( ! function_exists( 'lsx_full_width_widget_custom_callback' ) ) :
510
511
	/**
512
	 * Filter sidebar widget params, to add the widget_lsx_full_width_alt or widget_lsx_full_width classes to the text widget.
513
	 *
514
	 * @package    lsx
515
	 * @subpackage extras
516
	 */
517
	function full_width_widget_custom_callback() {
518
		global $wp_registered_widgets;
519
520
		$original_callback_params = func_get_args();
521
		$widget_id                = $original_callback_params[0]['widget_id'];
522
523
		$original_callback                               = $wp_registered_widgets[ $widget_id ]['original_callback'];
524
		$wp_registered_widgets[ $widget_id ]['callback'] = $original_callback;
525
526
		$widget_id_base = $wp_registered_widgets[ $widget_id ]['callback'][0]->id_base;
527
528
		$widget_classname = '';
529
530
		if ( is_callable( $original_callback ) ) {
531
			ob_start();
532
			call_user_func_array( $original_callback, $original_callback_params );
533
			$widget_output = ob_get_clean();
534
535
			echo wp_kses_post( apply_filters( 'lsx_widget_output', $widget_output, $widget_id_base, $widget_classname, $widget_id ) );
536
		}
537
	}
538
539
endif;
540
541
if ( ! function_exists( 'lsx_full_width_widget_output' ) ) :
542
543
	/**
544
	 * Filter sidebar widget params, to add the widget_lsx_full_width_alt or widget_lsx_full_width classes to the text widget.
545
	 *
546
	 * @package    lsx
547
	 * @subpackage extras
548
	 */
549
	function lsx_full_width_widget_output( $widget_output, $widget_id_base, $widget_id ) {
0 ignored issues
show
Unused Code introduced by
The parameter $widget_id is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
550
		if ( 'text' === $widget_id_base ) {
551
			if ( false !== strpos( $widget_output, '<div class="lsx-full-width-alt">' ) ) {
552
				$widget_output = str_replace( 'class="widget widget_text"', 'class="widget widget_text widget_lsx_full_width_alt"', $widget_output );
553
			} elseif ( false !== strpos( $widget_output, '<div class="lsx-full-width">' ) ) {
554
				$widget_output = str_replace( 'class="widget widget_text"', 'class="widget widget_text widget_lsx_full_width"', $widget_output );
555
			}
556
		}
557
558
		return $widget_output;
559
	}
560
561
endif;
562
563
add_filter( 'lsx_widget_output', 'lsx_full_width_widget_output', 10, 3 );
564
565
/**
566
 * Check if the content has a restricted post format that needs to show a full excerpt.
567
 */
568
function lsx_post_format_force_content_on_list() {
569
	$post_formats = apply_filters( 'lsx_post_format_force_content_on_list',
570
		array(
571
			'video' => 'video',
572
			'audio' => 'audio',
573
			'quote' => 'quote',
574
			'link'  => 'link',
575
		)
576
	);
577
	$return       = false;
578
	if ( ! has_post_format( $post_formats ) ) {
579
		$return = true;
580
	}
581
	return $return;
582
}
583
584
/**
585
 * Remove the Hentry Class Every
586
 */
587
function lsx_remove_hentry( $classes ) {
588
	if ( 'post' !== get_post_type() ) {
589
		$classes = array_diff( $classes, array( 'hentry' ) );
590
	}
591
	return $classes;
592
}
593
add_filter( 'post_class', 'lsx_remove_hentry' );
594
595
/**
596
 * Strip Excerpts.
597
 */
598
function lsx_strip_excerpt( $content ) {
599
	if ( is_search() || is_archive() || ( is_blog_installed() && ! is_single() && ! is_page() ) ) {
600
		$content = strip_shortcodes( $content );
601
		$content = str_replace( ']]>', ']]&gt;', $content );
602
		$content = strip_tags( $content );
603
	}
604
	return $content;
605
}
606
add_filter( 'the_content', 'lsx_strip_excerpt' );
607
608
/**
609
 * Disable Gutenberg for LSX Custom Post Types.
610
 */
611
function lsx_disable_gutenberg_product_type( $is_enabled, $post_type ) {
612
	if ( 'testimonial' === $post_type || 'team' === $post_type || 'project' === $post_type ) {
613
		return false;
614
	}
615
616
	return $is_enabled;
617
}
618
add_filter( 'gutenberg_add_edit_link_for_post_type', 'lsx_disable_gutenberg_product_type', 10, 2 );
619
620
/**
621
 * Add the "Blog" link to the breadcrumbs
622
 *
623
 * @param $crumbs
624
 * @return array
625
 */
626
function lsx_breadcrumbs_blog_link( $crumbs ) {
627
628
	$show_on_front = get_option( 'show_on_front' );
629
630
	if ( 'page' === $show_on_front && ( is_category() || is_tag() ) ) {
631
632
		$blog_page = get_option( 'page_for_posts' );
633
		if ( false !== $blog_page && '' !== $blog_page ) {
634
635
			$new_crumbs    = array();
636
			$new_crumbs[0] = $crumbs[0];
637
638
			if ( function_exists( 'woocommerce_breadcrumb' ) ) {
639
				$new_crumbs[1] = array(
640
					0 => get_the_title( $blog_page ),
641
					1 => get_permalink( $blog_page ),
642
				);
643
			} else {
644
				$new_crumbs[1] = array(
645
					'text' => get_the_title( $blog_page ),
646
					'url'  => get_permalink( $blog_page ),
647
				);
648
			}
649
			$new_crumbs[2] = $crumbs[1];
650
			$crumbs        = $new_crumbs;
651
652
		}
653
	}
654
	return $crumbs;
655
}
656
add_filter( 'wpseo_breadcrumb_links', 'lsx_breadcrumbs_blog_link', 30, 1 );
657
add_filter( 'woocommerce_get_breadcrumb', 'lsx_breadcrumbs_blog_link', 30, 1 );
658
659
/**
660
 * Cover template custom styles
661
 *
662
 * @return void
663
 */
664
function lsx_cover_template_custom_enqueue() {
665
666
	if ( ! is_page_template( 'page-templates/template-cover.php' ) ) {
667
		return;
668
	}
669
	$color_overlay_classes = '';
670
671
	$cover_text_color = get_theme_mod( 'lsx_cover_template_overlay_text_color' );
672
673
	$color_overlay_opacity  = get_theme_mod( 'lsx_cover_template_overlay_opacity' );
674
	$color_overlay_opacity  = ( false === $color_overlay_opacity ) ? 80 : $color_overlay_opacity;
675
	$color_overlay_opacity  = $color_overlay_opacity / 100;
676
	$color_overlay_classes .= $color_overlay_opacity;
677
678
	$custom_css       = ".page-template-template-cover .entry-header .entry-title, .post-template-template-cover .entry-header .entry-title, .post-template-template-cover #primary .entry-categories-inner a, .page-template-template-cover #primary .entry-header *, .post-template-template-cover #primary .entry-header * {color: {$cover_text_color};} .page-template-template-cover .cover-header .cover-header-inner-wrapper .cover-header-inner .cover-color-overlay, .page-template-template-cover .cover-header .cover-header-inner-wrapper .cover-header-inner .cover-color-overlay::before, .post-template-template-cover .cover-header .cover-header-inner-wrapper .cover-header-inner .cover-color-overlay, .post-template-template-cover .cover-header .cover-header-inner-wrapper .cover-header-inner .cover-color-overlay::before {opacity: {$color_overlay_opacity};}";
679
	wp_add_inline_style( 'lsx_main', $custom_css );
680
681
}
682
add_action( 'wp_enqueue_scripts', 'lsx_cover_template_custom_enqueue' );
683
684
/**
685
 * Determines if the request is an REST API request.
686
 *
687
 * @return bool True if it's a REST API request, false otherwise.
688
 */
689
function lsx_is_rest_api_request() {
690
	$rest_helper = LSX_Rest_Helper::get_instance();
691
	return $rest_helper->is_rest_api_request();
692
}
693