-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathwm-autoload.php
More file actions
89 lines (84 loc) · 3.45 KB
/
wm-autoload.php
File metadata and controls
89 lines (84 loc) · 3.45 KB
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
<?php
/**
* Wiki Modern Theme autoloader.
*
* @package Wiki Modern Theme
*/
/**
* Wiki Modern Theme autoloader.
*
* @param class $class The class to attempt to autoload.
* @return void
*/
function wm_autoloader( $class ) {
if ( ! class_exists( $class, false ) ) {
// Is this a WordPress class?
if ( substr( $class, 0, 2 ) === 'WP' ) {
// Yes. WordPress handles itself, ignore this class call.
return;
// No. How about a Customizer class?
} elseif ( strpos( $class, 'Customizer' ) !== false ) {
// Yes.
$filename = str_replace( array( '_', '\\' ), array( '-', '/' ), strtolower( $class ) );
$filename = substr( $filename, 0, strrpos( $filename, '/' ) ) . '/class-' .
substr( $filename, strrpos( $filename, '/' ) + 1 ) . '.php';
$file = get_template_directory() . '/customizer/classes/' . $filename;
// Did we find the WordPress’ procedural style class?
if ( file_exists( $file ) ) {
// Yes.
require $file;
} else {
// No. Try to load this class PSR style.
$filename = str_replace( array( '_', '\\' ), array( '-', '/' ), $class );
$filename = substr( $filename, 0, strrpos( $filename, '/' ) ) .
substr( $filename, strrpos( $filename, '/' ) ) . '.php';
$file = get_template_directory() . '/classes/' . $filename;
if ( file_exists( $file ) ) {
wm_autoload_use( $file );
require $file;
}
}
} else {
// No. This is a plain 'ol class.
$filename = str_replace( array( '_', '\\' ), array( '-', '/' ), strtolower( $class ) );
$filename = substr( $filename, 0, strrpos( $filename, '/' ) ) . '/class-' .
substr( $filename, strrpos( $filename, '/' ) + 1 ) . '.php';
$file = get_template_directory() . '/classes/' . $filename;
// Did we find the WordPress’ procedural style class?
if ( file_exists( $file ) ) {
// Yes.
require $file;
} else {
// No. Try to load this class PSR style.
$filename = str_replace( array( '_', '\\' ), array( '-', '/' ), $class );
$filename = substr( $filename, 0, strrpos( $filename, '/' ) ) .
substr( $filename, strrpos( $filename, '/' ) ) . '.php';
$file = get_template_directory() . '/classes/' . $filename;
// Do not allow the real Kint class to load in production.
if ( ! WP_DEBUG && strpos( $file, 'Kint' ) !== false ) {
$file = str_replace( 'Kint.php', 'KintFake.php', $file );
}
if ( file_exists( $file ) ) {
require $file;
wm_autoload_use( $file );
}
}
}
}
}
/**
* Check a class file for use statements and load those file(s) too.
*
* @param string $file The path to a class file.
* @return void
*/
function wm_autoload_use( $file ) {
$contents = file_get_contents( $file );
preg_match_all( '/use (.*);\n/', $contents, $uses );
if ( $uses[1] ) {
foreach ( $uses[1] as $use ) {
wm_autoloader( $use );
}
}
}
spl_autoload_register( 'wm_autoloader' );