-
Notifications
You must be signed in to change notification settings - Fork 4
/
class-asset-seeker.php
87 lines (77 loc) · 1.92 KB
/
class-asset-seeker.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
<?php
/**
* Class Assets_Seeker
*/
class Assets_Seeker {
/**
* An array of asset url.
*
* @var array
*/
private $assets = [];
/**
* Default asset version.
*
* @var string
*/
private $default_version;
/**
* Assets_Seeker constructor.
*/
public function __construct() {
global $wp_styles;
global $wp_scripts;
$this->default_version = get_bloginfo( 'version' );
$styles = $this->search_dependencies( $wp_styles, $wp_styles->queue );
$scripts = $this->search_dependencies( $wp_scripts, $wp_scripts->queue );
$assets = array_merge( $styles, $scripts );
$assets = array_map( function ( $asset ) {
if ( 0 === strpos( $asset, '/' ) ) {
return $asset;
}
if ( false !== strpos( $asset, home_url() ) ) {
return str_replace( trailingslashit( home_url() ), '/', $asset );
}
}, $assets );
$this->assets = array_merge( $this->assets, array_filter( array_unique( $assets ) ) );
}
/**
* Search dependency urls.
*
* @param \WP_Dependencies $dependencies Dependencies object.
* @param array $handles An array of handle dependencies.
*
* @return array
*/
public function search_dependencies( \WP_Dependencies $dependencies, $handles ) {
$paths = [];
foreach ( $handles as $handle ) {
/**
* Dependency object.
*
* @var \_WP_Dependency $asset
*/
$asset = $dependencies->registered[ $handle ];
if ( ! empty( $asset->src ) && is_string( $asset->src ) ) {
$ver = $asset->ver;
if ( ! $ver ) {
$ver = $this->default_version;
}
$paths[] = add_query_arg( 'ver', $ver, $asset->src );
}
if ( ! empty( $asset->deps ) && is_array( $asset->deps ) ) {
$deps = $this->search_dependencies( $dependencies, $asset->deps );
$paths = array_merge( $paths, $deps );
}
}
return $paths;
}
/**
* Getter asset urls.
*
* @return array
*/
public function get_assets() {
return $this->assets;
}
}