WordPress как на ладони
Шаблоны, плагины и темы для настоящих поклонников Elementor. От TemplateMonster.com wordpress jino

copy_dir() WP 2.5.0

Копирует папку из одного места в другое, используя API файловой системы WordPress. Предполагается, что функция WP_Filesystem() уже была вызвана и сконфигурирована.

Функционал основан на API файловой ситсемы в основе которого лежит базовый класс WP_Filesystem_Base. Который расширяется подходящим под конкретный сервер классом. Итоговый объект находится в глобальной переменной $wp_filesystem.

Возможные методы переменной $wp_filesystem, смотрите у класса:

и у одного из производных от него:

Хуков нет.

Возвращает

Разное. WP_Error в случае ошибки, или True в случае успеха.

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

copy_dir( $from, $to, $skip_list );
$from(строка) (обязательный)
Директория которую нужно скопировать.
$to(строка) (обязательный)
Путь куда нужно скопировать директорию.
$skip_list(массив)
Список исключений для имен файлов/папок (которые не будут скопированы).
По умолчанию: array()

Примеры

#1 Скопируем папку в другую папку

Копируем папку avatars из папки загрузок uploads в под-папку текущей папки с номером текущего месяца.

global $wp_filesystem;

$dir = wp_get_upload_dir();
/*
Array(
	[path]    => /home/kama.ru/html/wp-content/uploads/2018/05
	[url]     => //kama.ru/wp-content/uploads/2018/05
	[subdir]  => /2018/05
	[basedir] => /home/kama.ru/html/wp-content/uploads
	[baseurl] => https://wp-kama.ru/wp-content/uploads
	[error]   => 
)
*/

$from = $dir['basedir'] .'/avatars';
// $to не может быть прямым путем к папке, иначе методы FTP и SSH остаются в нерабочими
$to   = $wp_filesystem->find_folder( $dir['path'] );

copy_dir( $from, $to );

#1.2 Копирование папки с исключением указанных файлов в папке

Тоже самое но исключая файлы index.php, index.html

global $wp_filesystem;

$dir =  wp_get_upload_dir();

$from = $dir['basedir'] .'/avatars';
// $to не может быть прямым путем к папке, иначе методы FTP и SSH остаются в нерабочими
$to   = $wp_filesystem->find_folder( $dir['path'] );

$skip_list = array( 'index.php', 'index.html' );

copy_dir( $from, $to, $skip_list );

Код copy_dir: wp-admin/includes/file.php VER 4.9.8

<?php
function copy_dir($from, $to, $skip_list = array() ) {
	global $wp_filesystem;

	$dirlist = $wp_filesystem->dirlist($from);

	$from = trailingslashit($from);
	$to = trailingslashit($to);

	foreach ( (array) $dirlist as $filename => $fileinfo ) {
		if ( in_array( $filename, $skip_list ) )
			continue;

		if ( 'f' == $fileinfo['type'] ) {
			if ( ! $wp_filesystem->copy($from . $filename, $to . $filename, true, FS_CHMOD_FILE) ) {
				// If copy failed, chmod file to 0644 and try again.
				$wp_filesystem->chmod( $to . $filename, FS_CHMOD_FILE );
				if ( ! $wp_filesystem->copy($from . $filename, $to . $filename, true, FS_CHMOD_FILE) )
					return new WP_Error( 'copy_failed_copy_dir', __( 'Could not copy file.' ), $to . $filename );
			}
		} elseif ( 'd' == $fileinfo['type'] ) {
			if ( !$wp_filesystem->is_dir($to . $filename) ) {
				if ( !$wp_filesystem->mkdir($to . $filename, FS_CHMOD_DIR) )
					return new WP_Error( 'mkdir_failed_copy_dir', __( 'Could not create directory.' ), $to . $filename );
			}

			// generate the $sub_skip_list for the subdirectory as a sub-set of the existing $skip_list
			$sub_skip_list = array();
			foreach ( $skip_list as $skip_item ) {
				if ( 0 === strpos( $skip_item, $filename . '/' ) )
					$sub_skip_list[] = preg_replace( '!^' . preg_quote( $filename, '!' ) . '/!i', '', $skip_item );
			}

			$result = copy_dir($from . $filename, $to . $filename, $sub_skip_list);
			if ( is_wp_error($result) )
				return $result;
		}
	}
	return true;
}

Cвязанные функции

Из метки: Файловая система (files dirs folders создание удаление директорий файлов)

petrozavodsky 771alkoweb.ru
Делаю веб руками.
Комментариев нет
    Здравствуйте, !     Войти . Зарегистрироваться