Alert: 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.

WP_Theme::scandir( string $path, array|string|null $extensions = null, int $depth, string $relative_path = '' ): string[]|false

Scans a directory for files of a certain extension.


Parameters

$path string Required
Absolute path to search.
$extensions array|string|null Optional
Array of extensions to find, string of a single extension, or null for all extensions.

Default: null

$depth int Optional
How many levels deep to search for files. Accepts 0, 1+, or -1 (infinite depth). Default 0.
$relative_path string 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: ''


Top ↑

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.


Top ↑

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;
}

Top ↑

Hooks



Top ↑

Changelog

Changelog
Version Description
3.4.0 Introduced.

Top ↑

User Contributed Notes

You must log in before being able to contribute a note or feedback.