Функция copy_dir()
в WordPress используется для копирования содержимого одной директории в другую с использованием файловой системы WordPress. Она предоставляет удобный API для работы с файлами и директориями, что особенно полезно при работе в средах с ограниченным доступом к файловой системе, таких как FTP или SSH.
copy_dir( string $from, string $to, string[] $skip_list = array() ): true|WP_Error
Функция копирует содержимое директории из одного места в другое, используя абстракцию файловой системы WordPress. Это означает, что перед использованием функции необходимо настроить доступ к файловой системе через WP_Filesystem()
. Если этот шаг пропущен, функция не сможет выполнить свою работу.
Параметры
- $from (строка, обязательный) — исходная директория, откуда копируются файлы.
- $to (строка, обязательный) — директория, в которую нужно скопировать файлы.
- $skip_list (массив строк, необязательный) — список файлов или директорий, которые нужно пропустить при копировании. По умолчанию — пустой массив.
Возвращаемое значение
Функция возвращает true
в случае успешного копирования или WP_Error
в случае ошибки.
Пример использования copy_dir()
Прежде чем использовать функцию, важно убедиться, что файловая система WordPress уже инициализирована. Если это не так, можно использовать следующий код для инициализации:
if ( ! WP_Filesystem() ) {
// Не удалось подключиться к файловой системе, возможно, требуются учетные данные FTP.
exit;
}
global $wp_filesystem;
$wp_filesystem->mkdir( $to ); // Создание целевой директории, если её нет.
Теперь рассмотрим примеры использования функции с разными вариантами настроек.
Пример 1: Простое копирование директории
Этот пример демонстрирует, как скопировать директорию images
из папки wp-content/uploads
в директорию с текущей датой:
global $wp_filesystem;
if( ! $wp_filesystem ){
require_once ABSPATH . '/wp-admin/includes/file.php';
WP_Filesystem();
}
$upload_dir = wp_get_upload_dir();
$source_dir = $upload_dir['basedir'] . '/images'; // Исходная директория
$target_dir = $wp_filesystem->find_folder( $upload_dir['path'] ); // Целевая директория
copy_dir( $source_dir, $target_dir );
В этом примере папка images
копируется в директорию текущего месяца. Параметр $to
указывает на папку загрузок с текущей датой.
Пример 2: Копирование с исключением файлов
В этом примере мы рассмотрим копирование с пропуском указанных файлов, таких как README.txt
и LICENSE.txt
.
global $wp_filesystem;
if( ! $wp_filesystem ){
require_once ABSPATH . '/wp-admin/includes/file.php';
WP_Filesystem();
}
$upload_dir = wp_get_upload_dir();
$source_dir = $upload_dir['basedir'] . '/documents'; // Исходная директория
$target_dir = $wp_filesystem->find_folder( $upload_dir['path'] ); // Целевая директория
$skip_list = array( 'README.txt', 'LICENSE.txt' ); // Файлы, которые не нужно копировать
copy_dir( $source_dir, $target_dir, $skip_list );
В данном примере файлы README.txt
и LICENSE.txt
будут пропущены при копировании, но остальные файлы и папки будут перенесены в целевую директорию.
Важные моменты при использовании copy_dir()
- Инициализация файловой системы. Всегда проверяйте, что функция
WP_Filesystem()
была вызвана и настроена. В противном случае выполнение операции будет невозможно. - Путь назначения. Путь к целевой директории должен быть корректным и доступным для записи. Функция
find_folder()
помогает избежать проблем с путями в средах с разными протоколами доступа к файлам (FTP, SSH и т.д.). - Исключения файлов. Используйте параметр
$skip_list
для пропуска ненужных файлов и директорий при копировании, что может быть полезно для оптимизации операций.
Заключение
Функция copy_dir()
предоставляет мощный и гибкий инструмент для работы с файловой системой в WordPress. Будь то создание резервных копий, перемещение файлов между разными директориями или другие задачи, связанных с файловыми операциями, copy_dir()
значительно упрощает эти процессы, особенно в средах с ограниченным доступом к файловой системе.