-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmodule-loader.php
More file actions
32 lines (25 loc) · 950 Bytes
/
module-loader.php
File metadata and controls
32 lines (25 loc) · 950 Bytes
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
<?php
/**
* Module loader: Ensure newest version is loaded when multiple plugins bundle
* the same module. Module must define: name, version (YYYYMMDD), and load().
* The function `load()` is called on `plugins_loaded` action at priority 0.
*/
return function($module) {
$name = $module->name;
$priority = 99999999 - absint( $module->version );
remove_all_filters( $name, $priority ); // Same version
add_action( $name, function() use ($module) {
remove_all_filters( $module->name ); // This instance wins
$module->load();
}, $priority );
$ensure_action = function() use ( $name ) {
if ( ! did_action( $name ) ) do_action( $name );
};
if (doing_action('plugins_loaded') || did_action('plugins_loaded')) {
$ensure_action();
return;
}
add_action('plugins_loaded', $ensure_action, 0);
add_action('after_setup_theme', $ensure_action, 0);
if (method_exists($module, 'init')) $module->init();
};