On this page
WP_Theme::scandir( string $path, array|string|null $extensions = null, int $depth, string $relative_path = '' ): string[]|false
This function’s access is marked private. This means it is not intended for use by plugin or theme developers, only in other core functions. It is listed here for completeness.
Scans a directory for files of a certain extension.
Parameters
$pathstring Required-
Absolute path to search.
$extensionsarray|string|null Optional-
Array of extensions to find, string of a single extension, or null for all extensions.
Default:
null $depthint Optional-
How many levels deep to search for files. Accepts 0, 1+, or -1 (infinite depth). Default 0.
$relative_pathstring Optional-
The basename of the absolute path. Used to control the returned path for the found files, particularly when this function recurses to lower depths.
Default:
''
Return
string[]|false Array of files, keyed by the path to the file relative to the $path directory prepended with $relative_path, with the values being absolute paths. False otherwise.
Source
File: wp-includes/class-wp-theme.php. View all references
private static function scandir( $path, $extensions = null, $depth = 0, $relative_path = '' ) {
if ( ! is_dir( $path ) ) {
return false;
}
if ( $extensions ) {
$extensions = (array) $extensions;
$_extensions = implode( '|', $extensions );
}
$relative_path = trailingslashit( $relative_path );
if ( '/' === $relative_path ) {
$relative_path = '';
}
$results = scandir( $path );
$files = array();
/**
* Filters the array of excluded directories and files while scanning theme folder.
*
* @since 4.7.4
*
* @param string[] $exclusions Array of excluded directories and files.
*/
$exclusions = (array) apply_filters( 'theme_scandir_exclusions', array( 'CVS', 'node_modules', 'vendor', 'bower_components' ) );
foreach ( $results as $result ) {
if ( '.' === $result[0] || in_array( $result, $exclusions, true ) ) {
continue;
}
if ( is_dir( $path . '/' . $result ) ) {
if ( ! $depth ) {
continue;
}
$found = self::scandir( $path . '/' . $result, $extensions, $depth - 1, $relative_path . $result );
$files = array_merge_recursive( $files, $found );
} elseif ( ! $extensions || preg_match( '~\.(' . $_extensions . ')$~', $result ) ) {
$files[ $relative_path . $result ] = $path . '/' . $result;
}
}
return $files;
}
Hooks
- apply_filters( 'theme_scandir_exclusions',
string[] $exclusions ) -
Filters the array of excluded directories and files while scanning theme folder.
Related
Uses
| Uses | Description |
|---|---|
| WP_Theme::scandir() wp-includes/class-wp-theme.php | Scans a directory for files of a certain extension. |
| trailingslashit() wp-includes/formatting.php | Appends a trailing slash. |
| apply_filters() wp-includes/plugin.php | Calls the callback functions that have been added to a filter hook. |
Used By
| Used By | Description |
|---|---|
| WP_Theme::get_files() wp-includes/class-wp-theme.php | Returns files in the theme’s directory. |
| WP_Theme::scandir() wp-includes/class-wp-theme.php | Scans a directory for files of a certain extension. |
Changelog
| Version | Description |
|---|---|
| 3.4.0 | Introduced. |
© 2003–2022 WordPress Foundation
Licensed under the GNU GPLv2+ License.
https://developer.wordpress.org/reference/classes/wp_theme/scandir