WordPress – Renomear mídia automaticamente

O que acontece durante o upload de um arquivo de mídia?

Quando fazemos upload de um arquivo de mídia o WordPress faz uma “higienização” (sanitize) do arquivo.

Sanitize significa literalmente higienizar.

Em poucas palavras, todo arquivo, antes de ir para a biblioteca, passa por um monte de filtros, ou seja, algo entra de um jeito e sai de outro jeito. E especificamente para este post, eu to querendo dizer que o WordPress pode ou não renomear o arquivo que é enviado para a biblioteca.

Quando o WordPress renomeia meu arquivo?

  • Se o nome do arquivo possui caracteres especiais, estes são apagados;
  • Qualquer ocorrência de espaço vazio ou traços consecutivos é substituída por um único traço;
  • Além disso, qualquer ocorrência de ponto, underline ou traço, que esteja no final ou no começo do arquivo, é apagada.

Lista de caracteres especiais

Exemplo de higienização do arquivo

Veja o exemplo abaixo e note, na prática, como o WordPress “higieniza” os arquivos de mídia:

Sanitize padrão
Modelo de higienização que os arquivos de mídia sofrem por padrão.

Customizando o processo de sanitize de arquivo

Depois dessa instrodução, vejamos, então, como renomear os arquivos de mídia automaticamente, mas de forma customizada.

Perceba, através da imagem acima, que a “higienização” padrão feita pela plataforma ainda mantém maiúsculas e acentos. Correto?

O trecho de código abaixo faz tudo o que a “higienização” padrão faz e ainda remove maiúsculas e acentos.

Utilizando o código acima em seu functions.php, obteríamos o seguinte:

Sanitize customizado
Modelo de higienização customizada. Funciona como o padrão e ainda remove maiúsculas e acentos.

Além disso, utilizando o snippet acima, o nome do arquivo de mídia será igual ao nome do slug de seu post. MAS:

  • O upload do arquivo de mídia deve ser feito dentro do próprio post (página, post ou qualquer outro tipo personalizado);
  • Caso o upload do arquivo seja feito através da biblioteca do WordPress, então, apenas acontecerá a higienização;
  • Além disso, para que o arquivo seja renomeado com o nome do slug do post, é necessário que o título do post não esteja vazio.

Caso NÃO queira que seus arquivos de mídia tenham o mesmo nome que o slug do post, mas ainda queira fazer a “higienização completa” (removendo acentos e maiúsculas), basta utilizar o código abaixo:


/**
 * Rename file name when doing upload
 *
 * @param   string $filename The name of the file being uploaded
 * @return  string    The sanitized string
 */

function my_custom_file_name($filename)
{
    $info = pathinfo($filename);

    $ext = empty($info['extension']) ? '' : '.' . $info['extension'];

    $name = basename($filename, $ext);

    $finalFileName = sanitize_title($name); // File name will be the same as the image file name, but sanitized.

    return $finalFileName . $ext;
}

add_filter('sanitize_file_name', 'my_custom_file_name', 100);

Por que higienizar o arquivo?

  • Primeiro, porque é fácil e é automático;
  • Mantém os nomes de seus arquivos (que provavelmente são em sua maioria imagens) muito mais organizados;
  • Ajuda com fatores relacionados a SEO;
  • Te livra de problemas com futuras migrações.
Comentários