Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the ultimate-addons-for-gutenberg domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /sites/danielkossmann.com/files/wp-includes/functions.php on line 6114

Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the hustle domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /sites/danielkossmann.com/files/wp-includes/functions.php on line 6114
Como utilizar copy_dir() no WordPress (PHP) - Daniel Kossmann

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:

  1. $from: (string) caminho da pasta de origem – obrigatório;
  2. $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;
  3. $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:

  1. require_once() para incluir o arquivo como obrigatório, verificando antes se ele já foi incluído.
  2. WP_Filesystem() para iniciar a abstração do sistema de arquivos do WordPress.
  3. exit para finalizar a execução do código.
  4. wp_get_upload_dir() para obter as informações do diretório de envio de arquivos (uploads) do WordPress.
  5. path_join() para gerar um caminho de arquivos a partir de uma base e um caminho relativo à ela.
  6. wp_mkdir_p() para criar recursivamente um diretório a partir do seu caminho completo.
  7. 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.



Comments

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *