/var/www/html_us/wp-content/plugins/woocommerce/includes/class-wc-autoloader.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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
<?php
/**
 * WooCommerce Autoloader.
 *
 * @package WooCommerce\Classes
 * @version 2.3.0
 */

defined'ABSPATH' ) || exit;

/**
 * Autoloader class.
 */
class WC_Autoloader {

    
/**
     * Path to the includes directory.
     *
     * @var string
     */
    
private $include_path '';

    
/**
     * The Constructor.
     */
    
public function __construct() {
        if ( 
function_exists'__autoload' ) ) {
            
spl_autoload_register'__autoload' );
        }

        
spl_autoload_register( array( $this'autoload' ) );

        
$this->include_path untrailingslashitplugin_dir_pathWC_PLUGIN_FILE ) ) . '/includes/';
    }

    
/**
     * Take a class name and turn it into a file name.
     *
     * @param  string $class Class name.
     * @return string
     */
    
private function get_file_name_from_class$class ) {
        return 
'class-' str_replace'_''-'$class ) . '.php';
    }

    
/**
     * Include a class file.
     *
     * @param  string $path File path.
     * @return bool Successful or not.
     */
    
private function load_file$path ) {
        if ( 
$path && is_readable$path ) ) {
            include_once 
$path;
            return 
true;
        }
        return 
false;
    }

    
/**
     * Auto-load WC classes on demand to reduce memory consumption.
     *
     * @param string $class Class name.
     */
    
public function autoload$class ) {
        
$class strtolower$class );

        if ( 
!== strpos$class'wc_' ) ) {
            return;
        }

        
// The Legacy REST API was removed in WooCommerce 9.0, but some servers still have
        // the includes/class-wc-api.php file after they upgrade, which causes a fatal error when executing
        // "class_exists('WC_API')". This will prevent this error, while still making the class visible
        // when it's provided by the WooCommerce Legacy REST API plugin.
        
if ( 'wc_api' === $class ) {
            return;
        }

        
// If the class is already loaded from a merged package, prevent autoloader from loading it as well.
        
if ( \Automattic\WooCommerce\Packages::should_load_class$class ) ) {
            return;
        }

        
$file $this->get_file_name_from_class$class );
        
$path '';

        if ( 
=== strpos$class'wc_addons_gateway_' ) ) {
            
$path $this->include_path 'gateways/' substrstr_replace'_''-'$class ), 18 ) . '/';
        } elseif ( 
=== strpos$class'wc_gateway_' ) ) {
            
$path $this->include_path 'gateways/' substrstr_replace'_''-'$class ), 11 ) . '/';
        } elseif ( 
=== strpos$class'wc_shipping_' ) ) {
            
$path $this->include_path 'shipping/' substrstr_replace'_''-'$class ), 12 ) . '/';
        } elseif ( 
=== strpos$class'wc_shortcode_' ) ) {
            
$path $this->include_path 'shortcodes/';
        } elseif ( 
=== strpos$class'wc_meta_box' ) ) {
            
$path $this->include_path 'admin/meta-boxes/';
        } elseif ( 
=== strpos$class'wc_admin' ) ) {
            
$path $this->include_path 'admin/';
        } elseif ( 
=== strpos$class'wc_payment_token_' ) ) {
            
$path $this->include_path 'payment-tokens/';
        } elseif ( 
=== strpos$class'wc_log_handler_' ) ) {
            
$path $this->include_path 'log-handlers/';
        } elseif ( 
=== strpos$class'wc_integration' ) ) {
            
$path $this->include_path 'integrations/' substrstr_replace'_''-'$class ), 15 ) . '/';
        } elseif ( 
=== strpos$class'wc_notes_' ) ) {
            
$path $this->include_path 'admin/notes/';
        }

        if ( empty( 
$path ) || ! $this->load_file$path $file ) ) {
            
$this->load_file$this->include_path $file );
        }
    }
}

new 
WC_Autoloader();