| @@ -1,11 +1,7 @@ | ||
| 1 | 1 | <?php |
| 2 | 2 | function jetpack_require_lib( $slug ) { |
| 3 | - if ( !preg_match( '|^[a-z0-9/_.-]+$|i', $slug ) ) { | |
| 4 | - trigger_error( "Cannot load a library with invalid slug $slug.", E_USER_ERROR ); | |
| 5 | - return; | |
| 6 | - } | |
| 7 | - $basename = basename( $slug ); | |
| 3 | + static $loaded = array(); | |
| 8 | 4 | |
| 9 | 5 | if ( defined( 'ABSPATH' ) && ! defined( 'WP_CONTENT_DIR' ) ) { |
| 10 | 6 | define( 'WP_CONTENT_DIR', ABSPATH . 'wp-content' ); // no trailing slash, full paths only - WP_CONTENT_URL is defined further down |
| 11 | 7 | } |
| @@ -19,17 +15,30 @@ | ||
| 19 | 15 | * |
| 20 | 16 | * @param string $lib_dir Path to the library directory. |
| 21 | 17 | */ |
| 22 | 18 | $lib_dir = apply_filters( 'jetpack_require_lib_dir', $lib_dir ); |
| 23 | - $choices = array( | |
| 24 | - "$lib_dir/$slug.php", | |
| 25 | - "$lib_dir/$slug/0-load.php", | |
| 26 | - "$lib_dir/$slug/$basename.php", | |
| 27 | - ); | |
| 28 | - foreach( $choices as $file_name ) { | |
| 29 | - if ( is_readable( $file_name ) ) { | |
| 30 | - require_once $file_name; | |
| 31 | - return; | |
| 32 | - } | |
| 19 | + | |
| 20 | + $loaded_key = "{$lib_dir}{$slug}"; | |
| 21 | + if ( ! empty( $loaded[ $loaded_key ] ) ) { | |
| 22 | + return; | |
| 33 | 23 | } |
| 34 | - trigger_error( "Cannot find a library with slug $slug.", E_USER_ERROR ); | |
| 24 | + | |
| 25 | + $loaded[ $loaded_key ] = true; | |
| 26 | + | |
| 27 | + $file_name = "$lib_dir/$slug.php"; | |
| 28 | + if ( is_readable( $file_name ) ) { | |
| 29 | + require_once $file_name; | |
| 30 | + | |
| 31 | + return; | |
| 32 | + } | |
| 33 | + | |
| 34 | + $file_name = "$lib_dir/$slug/0-load.php"; | |
| 35 | + if ( is_readable( $file_name ) ) { | |
| 36 | + require_once $file_name; | |
| 37 | + | |
| 38 | + return; | |
| 39 | + } | |
| 40 | + | |
| 41 | + $basename = basename( $slug ); | |
| 42 | + $file_name = "$lib_dir/$slug/$basename.php"; | |
| 43 | + require_once $file_name; | |
| 35 | 44 | } |