WordPress – Renomear mídia automaticamente

🔎 Filtre/higienize/sanitize o nome dos arquivos de mídia que são enviados para o servidor. Antes de finalizar o upload é possível remover acentos, espaços e muito mais.

Atualizado em 07/05/2020
Compartilhe

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

Quando fazemos upload de um arquivo de mídia o WordPress faz um sanitize do arquivo.

Sanitize = higienizar.

Em outras palavras: todo arquivo, antes de ir para a biblioteca, passa por filtros. Ou seja, o arquivo entra de um jeito e sai de outro jeito. E o WordPress pode ou não, por padrão, renomear o arquivo que é enviado para a biblioteca.

Quando o WordPress renomeia o arquivo de mídia?

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

Caracteres especiais em questão:

? [ ] / \\ = < > : ; , ' " \ & $ # * ( ) | ~ ` ! { } % +

E a propósito, é possível definir quais serão os caracteres especiais, utilizando o filtro: sanitize_file_name_chars.

Exemplo de higienização/sanitize de arquivo

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

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

Customizando o processo de higienização/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 mantém maiúsculas e acentos.

O trecho de código abaixo faz tudo o que a higienização padrão faz e ainda remove maiúsculas e acentos. Você pode colocar o código no arquivo functions.php.

Utilizando o código acima, o resultado da higienização seria o seguinte:

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 pai. MAS, NOTE:

  • 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/personalizada (removendo acentos e maiúsculas), basta utilizar o código abaixo:

/**
 * Rename file name while 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 );

Lembre-se, esses códigos podem ser utilizados dentro do arquivo functions.php.

Por que higienizar os arquivos de mídia?

  • 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 entre servidores diferentes.

Imagens: g1.globo.com

Por <a href='https://dpw.ninja/author/filipe/' rel='dofollow' class='dim-on-hover'>Filipe Seabra</a>
Por Filipe Seabra
Full Stack Web Developer.

Comentários