Как использовать функцию list_files() в WordPress: руководство начинающего.

LIST_FILES() │ WP 2.6.0

Функция list_files() возвращает список всех файлов в указанной папке и во всех подкаталогах до 100 уровней глубины. Глубину поиска можно настроить с помощью параметра $levels.

Обратите внимание: В данной функции нет хуков (hook).

Возвращаемое значение

Функция возвращает массив строк с путями к файлам в случае успеха или false, если произошла ошибка.

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

Функция вызывается следующим образом:

list_files( $folder, $levels, $exclusions, $include_hidden );

Параметры

  • $folder (string) — Полный путь к папке. По умолчанию: ''
  • $levels (int) — Количество уровней подкаталогов для поиска. По умолчанию: 100
  • $exclusions (array) — Список папок и файлов, которые нужно пропустить. По умолчанию: array()
  • $include_hidden (bool) — Включать ли скрытые файлы (файлы, начинающиеся на "."). По умолчанию: false

Примеры использования

Пример 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
)
*/

Пример 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
    ...
)
*/

Обратите внимание: В этом примере мы получили не только файлы, но и названия подкаталогов.

Пример 3: Получение всех файлов в директории загрузок

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

$folder = wp_upload_dir()['basedir'];
$files = list_files( $folder, 3 );

foreach ( $files as $file ) {
    if ( is_file( $file ) ) {
        $filesize = size_format( filesize( $file ));
        echo esc_html( "$file - $filesize" ) . "n";
    }
}

/*
Результат может выглядеть так:
"/home/wp-kama.com/www/wp-content/uploads/2022/03/clipboard-image-886236.png - 4 KB"
"/home/wp-kama.com/www/wp-content/uploads/2022/03/clipboard-image-99186-120x120.png - 2 KB"
...
*/

Код функции

Вот код самой функции list_files():


function list_files( $folder = '', $levels = 100, $exclusions = array(), $include_hidden = false ) {
if ( empty( $folder ) ) {
return false; // Если папка пуста, возвращаем false
}

$folder = trailingslashit( $folder ); // Добавляем слеш в конце пути

if ( ! $levels ) {
    return false; // Если уровень поиска равен 0, возвращаем false
}

$files = array(); // Массив для хранения найденных файлов

$dir = @opendir( $folder ); // Открываем директорию

if ( $dir ) {
    while ( ( $file = readdir( $dir ) ) !== false ) {
        // Пропускаем текущую и родительскую директории
        if ( in_array( $file, array( '.', '..' ), true ) ) {
            continue;
        }

        // Пропускаем скрытые и исключенные файлы
        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; // Возвращаем массив с найденными файлами

}

Изменения

  • С версии 2.6.0 — функция была добавлена.
  • С версии 4.9.0 — добавлен параметр $exclusions.
  • С версии 6.3.0 — добавлен параметр $include_hidden.

Теперь вы знаете, как пользоваться функцией list_files() в WordPress. Вы сможете легко получать список файлов из директории и управлять ими в соответствии с вашими нуждами.

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *