list_files()WP 2.6.0

Получит список файлов из указанной директории и из всех вложенных в нее директорий (до 100 уровней вложенности).

Сколько уровней вложенности нужно просматривать, можно указать во втором параметре $levels.

При указанном ограничении вложенности, функция получит название папки, если дойдет до указанного лимита а в папке есть еще вложенные папки. Так в итоговом списке файлов, будут файлы и папки, см. пример 2.

Для работы функции вне админки, нужно подключить файл:

require_once ABSPATH . 'wp-admin/includes/file.php';

Хуков нет.

Возвращает

Строку[]|false. Массив путей файлов - когда файлы были получены. False - если не удалось получить файлы.

Использование

$list = list_files( $folder = '', $levels = 100 );
$folder(строка)
Путь до папки из которой нужно получить файлы.
По умолчанию: empty
$levels(число)

Уровень вложенности папок, до которого нужно просматривать файлы. ПО умолчанию 100 (лимит PHP).

Например, если тут указать 1, то будут собраны только файлы из указанной папки. Если 2, то будут собраны файлы из указанной папки и из папок в ней. Если 3, то из папки, её папок и папок её папок...
По умолчанию: 100

$exclusions(массив) (с версии 4.9)
Список папок и файлов, которые нужно пропустить.
По умолчанию: array()
$include_hidden(true/false) (с версии 6.3)
Нужно ли включить в список скрытые файлы - файлы начинающиеся с точки ., например .git, .htaccess.
По умолчанию: false

Примеры

0

#1 Пример чтения файлов из каталога

Для примера работы функции, давайте получит все файлы WordPress.

//require_once ABSPATH . 'wp-admin/includes/file.php';

$files = list_files( ABSPATH );

print_r( $files );

/* Получим
Array
(
	[0] => /home/t/public_html/xmlrpc.php
	[1] => /home/t/public_html/wp-mail.php
	[2] => /home/t/public_html/wp-includes/ms-settings.php
	...
	[991] => /home/t/public_html/wp-admin/css/colors/sunrise/colors.css
)
*/
0

#2 Пример получения файлов с ограничением просмотра вложенных папок

//require_once ABSPATH . 'wp-admin/includes/file.php';

$files = list_files( ABSPATH, 1 );

print_r( $files );

/* Получим
Array
(
	[0] => /home/t/public_html/xmlrpc.php
	[1] => /home/t/public_html/wp-mail.php
	[2] => /home/t/public_html/wp-includes/
	[3] => /home/t/public_html/wp-settings.php
	[4] => /home/t/public_html/wp-config-sample.php
	[5] => /home/t/public_html/wp-comments-post.php
	[6] => /home/t/public_html/wp-admin/
	[7] => /home/t/public_html/wp-blog-header.php
	[8] => /home/t/public_html/wp-links-opml.php
	[9] => /home/t/public_html/index.php
	[10] => /home/t/public_html/wp-login.php
	[11] => /home/t/public_html/wp-trackback.php
	[12] => /home/t/public_html/wp-activate.php
	[13] => /home/t/public_html/wp-load.php
	[14] => /home/t/public_html/wp-signup.php
	[15] => /home/t/public_html/wp-cron.php
)
*/

Обратите внимание, что кроме файлов также были получены и названия вложенных папок.

Список изменений

С версии 2.6.0 Введена.
С версии 4.9.0 Added the $exclusions parameter.
С версии 6.3.0 Added the $include_hidden parameter.

Код list_files() WP 6.5.2

function list_files( $folder = '', $levels = 100, $exclusions = array(), $include_hidden = false ) {
	if ( empty( $folder ) ) {
		return false;
	}

	$folder = trailingslashit( $folder );

	if ( ! $levels ) {
		return false;
	}

	$files = array();

	$dir = @opendir( $folder );

	if ( $dir ) {
		while ( ( $file = readdir( $dir ) ) !== false ) {
			// Skip current and parent folder links.
			if ( in_array( $file, array( '.', '..' ), true ) ) {
				continue;
			}

			// Skip hidden and excluded files.
			if ( ( ! $include_hidden && '.' === $file[0] ) || in_array( $file, $exclusions, true ) ) {
				continue;
			}

			if ( is_dir( $folder . $file ) ) {
				$files2 = list_files( $folder . $file, $levels - 1, array(), $include_hidden );
				if ( $files2 ) {
					$files = array_merge( $files, $files2 );
				} else {
					$files[] = $folder . $file . '/';
				}
			} else {
				$files[] = $folder . $file;
			}
		}

		closedir( $dir );
	}

	return $files;
}