Com a função copy_dir() você copia o conteúdo de uma pasta de uma localização para outra, utilizando a abstração do sistema de arquivos do WordPress. Ela possui três parâmetros:
- $from: (string) caminho da pasta de origem – obrigatório;
- $to: (string) caminho da pasta de origem – obrigatório. Importante: Esta pasta já deve existir, caso contrário a função irá retornar um erro;
- $skip_list: (string[]) um array com os arquivos ou pastas a serem ignorados – opcional;
Veja abaixo dois exemplos de como utilizá-la:
<?php
// Faz a cópia dos arquivos de uma pasta para outra.
copy_dir( $pasta_origem, $pasta_destino );
// Faz a cópia dos arquivos de uma pasta para outra,
// com uma lista de arquivos e pastas para ignorar.
$lista_ignorar = array(
"ignorar-arquivo.txt",
"ignorar-pasta"
);
copy_dir( $pasta_origem, $pasta_destino, $lista_ignorar );
Code language: PHP (php)
A função copy_dir() assume que a função WP_Filesystem() foi chamada e configurada. Para fazer isso, você pode utilizar o código abaixo abaixo:
<?php
global $wp_filesystem;
require_once( ABSPATH . '/wp-admin/includes/file.php' );
// Verifica conexão com sistema de arquivos
if ( ! WP_Filesystem() ) {
// Não foi possível conectar.
exit;
}
Code language: PHP (php)
Como fazer a cópia de uma pasta dentro do diretório de uploads para uma nova pasta no mesmo diretório
Como exemplo prático, criei um código que faz a cópia do conteúdo de uma pasta dentro do diretório de uploads do WordPress para outra pasta no mesmo diretório. Veja como ficou no código abaixo:
<?php
// Carrega o código do sistema de arquivos do WordPress.
global $wp_filesystem;
require_once( ABSPATH . '/wp-admin/includes/file.php' );
// Verifica conexão com sistema de arquivos.
if ( ! WP_Filesystem() ) {
// Não foi possível conectar, para a execução do código.
exit;
}
// Obtém o caminho da pasta de uploads do WordPress.
$uploads = wp_get_upload_dir();
$base_uploads = $uploads["basedir"];
// Informações da pasta de origem
$pasta_origem = path_join( $base_uploads, "origem/" );
// Lista de arquivos e pastas a serem ignorados na cópia.
$lista_ignorar = array(
"ignorar-arquivo.txt",
"ignorar-pasta"
);
// Informações da pasta de destino.
$pasta_destino = path_join( $base_uploads, "destino/" );
// Verifica se pasta destino existe, caso contrário, cria ela.
if ( wp_mkdir_p( $pasta_destino ) ) {
// Faz a cópia dos arquivos de uma pasta para outra,
// com uma lista de arquivos e pastas para ignorar.
$copia_pasta = copy_dir( $pasta_origem, $pasta_destino, $lista_ignorar );
// Verifica se houve algum erro
if ( ! is_wp_error( $copia_pasta ) ) {
_e( 'Pasta copiada com sucesso.', 'danielkossmann' );
} else {
// Obtém mensagem de erro
$erro = $nova_conta->get_error_message();
// Exibe as informações de forma que o conteúdo seja traduzível
printf(
__( 'Ocorreu o seguinte erro ao copiar a pasta: %s', 'danielkossmann' ),
$erro
);
}
}
Code language: PHP (php)
No código acima utilizei algumas funções auxiliares, veja abaixo mais detalhes de cada uma delas:
- require_once() para incluir o arquivo como obrigatório, verificando antes se ele já foi incluído.
- WP_Filesystem() para iniciar a abstração do sistema de arquivos do WordPress.
- exit para finalizar a execução do código.
- wp_get_upload_dir() para obter as informações do diretório de envio de arquivos (uploads) do WordPress.
- path_join() para gerar um caminho de arquivos a partir de uma base e um caminho relativo à ela.
- wp_mkdir_p() para criar recursivamente um diretório a partir do seu caminho completo.
- is_wp_error() para tratar erros.
Aviso importante: Estes códigos foram criados apenas para fins didáticos, por isso nem sempre possuem todas as melhores práticas de segurança e otimizações necessárias. Portando, não me responsabilizo pelo seu uso em qualquer tipo de ambiente ou dou qualquer tipo de garantia para eles. Se você desejar utilizá-los será por sua própria conta e risco.
Deixe um comentário