/var/www/html_us/wp-content/plugins/elementor/modules/performance-lab/module.php


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<?php
namespace Elementor\Modules\PerformanceLab;

use 
Elementor\Core\Base\Module as BaseModule;
use 
Elementor\Plugin;

if ( ! 
defined'ABSPATH' ) ) {
    exit; 
// Exit if accessed directly
}

class 
Module extends BaseModule {

    const 
PERFORMANCE_LAB_FUNCTION_NAME 'webp_uploads_img_tag_update_mime_type';
    const 
PERFORMANCE_LAB_OPTION_NAME 'site-health/webp-support';

    public function 
get_name() {
        return 
'performance-lab';
    }

    private function 
is_performance_lab_is_active() {
        if ( 
function_existsself::PERFORMANCE_LAB_FUNCTION_NAME ) ) {
            
$perflab_modules_settings get_optionself::PERFORMANCE_LAB_OPTION_NAME, [] );
            if ( isset( 
$perflab_modules_settings ) && isset( $perflab_modules_settingsself::PERFORMANCE_LAB_OPTION_NAME ] ) &&
                            
'1' === $perflab_modules_settingsself::PERFORMANCE_LAB_OPTION_NAME ]['enabled'] ) {
                return 
true;
            }
        }
        return 
false;
    }

    private function 
performance_lab_get_webp_src$attachment_id$size$url ) {
        
$image_object wp_get_attachment_image_src$attachment_id$size );
        
$image_src call_user_funcself::PERFORMANCE_LAB_FUNCTION_NAME$image_object[0], 'webp'$attachment_id );
        if ( ! empty( 
$image_src ) ) {
            return 
$image_src;
        }
        return 
$url;
    }

    private function 
replace_css_with_webp$value$css_property$matches ) {
        if ( 
=== strpos$css_property'background-image' ) && '{{URL}}' === $matches[0] ) {
            
$value['url'] = $this->performance_lab_get_webp_src$value['id'], 'full'$value['url'] );
        }
        return 
$value;
    }

    public function 
__construct() {
        
parent::__construct();

        if ( 
$this->is_performance_lab_is_active() ) {
            
add_filter'elementor/files/css/property', function( $value$css_property$matches ) {
                return 
$this->replace_css_with_webp$value$css_property$matches );
            }, 
10);
        }
    }
}