Themes: Add filter for excluding directories from being scanned for template files.

Exclude 'node_modules' directories from paths searched in `WP_Theme::scandir()`. Introduces the `theme_scandir_exclusions` filter to allow sites to 
exclude any other paths like `bower_components` or `vendor` from being searched for template files.

Props lukasbesch, dd32, swisspidy, rachelbaker. 
Fixes #38292.

Merges [40301] to the 4.7 branch.



git-svn-id: https://develop.svn.wordpress.org/branches/4.7@40326 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Pascal Birchler 2017-03-24 18:43:13 +00:00
parent d142d7fa23
commit e63968f21d
1 changed files with 12 additions and 2 deletions

View File

@ -1139,11 +1139,21 @@ final class WP_Theme implements ArrayAccess {
$results = scandir( $path );
$files = array();
/**
* Filters the array of excluded directories and files while scanning theme folder.
*
* @since 4.7.4
*
* @param array $exclusions Array of excluded directories and files.
*/
$exclusions = (array) apply_filters( 'theme_scandir_exclusions', array( 'CVS', 'node_modules' ) );
foreach ( $results as $result ) {
if ( '.' == $result[0] )
if ( '.' == $result[0] || in_array( $result, $exclusions, true ) ) {
continue;
}
if ( is_dir( $path . '/' . $result ) ) {
if ( ! $depth || 'CVS' == $result )
if ( ! $depth )
continue;
$found = self::scandir( $path . '/' . $result, $extensions, $depth - 1 , $relative_path . $result );
$files = array_merge_recursive( $files, $found );