WordPress – Renomear mídia automaticamente

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 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.

<?php
/**
 * 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 );

    if ( isset( $_REQUEST['post_id'] ) && is_numeric( $_REQUEST['post_id'] ) ) {
        $postObj  = get_post( $_REQUEST['post_id'] );
        $postSlug = sanitize_title( $postObj->post_title );
    }

    if ( isset( $postSlug ) && ! empty( $postSlug ) && $postSlug != 'rascunho-automatico' ) {
        $finalFileName = $postSlug;
    } // File name will be the same as the post slug.
    else {
        $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 );

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.

Deixe um comentário