Tipos MIME permitidos no WordPress: Como habilitar uploads HEIC (Guia 2026)
Resposta curta: O WordPress bloqueia HEIC por padrão porque image/heic não está na lista de permissões fixa retornada por get_allowed_mime_types(). A correção mais limpa é um filtro upload_mimes de cinco linhas no functions.php do seu tema filho. Se você não pode editar código, use o plugin WP Add Mime Types. Nunca habilite ALLOW_UNFILTERED_UPLOADS no wp-config.php como correção permanente — isso desabilita todas as verificações de segurança de upload que o WordPress tem.
A mensagem de erro diz "Desculpe, este tipo de arquivo não é permitido por razões de segurança." Da primeira vez que você a vê, a suposição natural é que o WordPress detectou algo malicioso. Não é isso que está acontecendo. O WordPress está verificando a extensão do arquivo e o tipo MIME contra uma lista de permissões estrita de formatos que sabe como lidar. HEIC só está nessa lista de permissões desde o WordPress 6.7 no final de 2024, e mesmo agora muitos ambientes de hospedagem ainda o rejeitam porque suas bibliotecas de imagem PHP não conseguem realmente decodificar o formato.
Este guia percorre as três maneiras testadas em produção para habilitar uploads HEIC no WordPress em 2026, com o código exato, as alternativas de plugin e as compensações de segurança de cada abordagem. No final você saberá qual método se encaixa na sua configuração de hospedagem e como verificar se realmente funcionou.
Por que o WordPress bloqueia HEIC por padrão
HEIC chegou como o formato padrão de fotos do iPhone com iOS 11 em 2017. O núcleo do WordPress não adicionou HEIC à sua lista de tipos MIME permitidos até a versão 6.7 em novembro de 2024. Esse intervalo de sete anos é o motivo pelo qual "Desculpe, este tipo de arquivo não é permitido por razões de segurança" se tornou uma das mensagens de erro do WordPress mais pesquisadas no Google entre o final dos anos 2010 e o início dos anos 2020.
Internamente, todo upload do WordPress passa por wp_check_filetype_and_ext(). Essa função compara tanto a extensão do arquivo quanto o tipo MIME detectado contra a lista retornada por get_allowed_mime_types(). Se qualquer um falhar na verificação, o upload é rejeitado antes de chegar a wp-content/uploads. A lista em si é gerada a partir do array em wp-includes/functions.php, e HEIC simplesmente não estava lá até o WordPress 6.7.
O enquadramento de "segurança" é real, mas estreito. O WordPress mantém a lista de permissões para impedir o upload de scripts PHP, executáveis ou outro conteúdo que pudesse ser servido de volta aos visitantes como código. Arquivos HEIC não representam esse risco — são imagens estáticas decodificadas pelo libheif — mas a lista de permissões é binária. Ou um tipo MIME está na lista ou não está. Não existe um estado intermediário "provavelmente seguro".
Para uma visão mais ampla do pipeline de upload do WordPress e onde o HEIC do iPhone se encaixa, veja Fotos HEIC do iPhone e WordPress: Como Enviar Sem Dor de Cabeça com Conversão.
Como verificar quais tipos MIME são permitidos atualmente
Antes de adicionar HEIC, verifique o que sua instalação do WordPress já aceita. Existem três maneiras de inspecionar a lista.
Método 1: Tela Saúde do Site
Vá para Ferramentas, Saúde do Site, Informações, Manipulação de Mídia no seu painel WordPress. Você verá uma linha rotulada "Formatos de arquivo suportados pelo Imagick" listando cada tipo MIME que a compilação subjacente do ImageMagick pode decodificar. Se HEIC ou HEIF aparecer nessa lista, seu servidor pode processar arquivos HEIC — você só precisa adicionar o tipo MIME à lista de permissões do WordPress.
Método 2: WP-CLI
Se você tem acesso shell, a verificação mais rápida é:
wp eval 'print_r(get_allowed_mime_types());' Isso despeja o array completo de extensões e tipos MIME atualmente permitidos. Procure por chaves terminando em heic ou heif. Se estiverem ausentes, você precisa adicioná-las via filtro.
Método 3: Um snippet PHP descartável
Adicione isto ao seu functions.php temporariamente e carregue qualquer página do admin:
add_action('admin_notices', function() {
$types = get_allowed_mime_types();
echo '<pre>' . print_r($types, true) . '</pre>';
}); Você verá o array despejado no topo de cada página do admin. Remova o snippet uma vez que tenha confirmado o que está na lista.
Método 1: Adicionar HEIC via functions.php (Recomendado)
A correção mais limpa é um pequeno filtro em upload_mimes. Adicione isto ao functions.php do seu tema filho ou, melhor ainda, um pequeno plugin customizado para que a alteração sobreviva às atualizações de tema:
<?php
add_filter('upload_mimes', function($mimes) {
$mimes['heic'] = 'image/heic';
$mimes['heif'] = 'image/heif';
return $mimes;
});
add_filter('wp_check_filetype_and_ext', function($data, $file, $filename, $mimes) {
$filetype = wp_check_filetype($filename, $mimes);
if (in_array($filetype['ext'], ['heic', 'heif'], true)) {
$data['ext'] = $filetype['ext'];
$data['type'] = $filetype['type'];
}
return $data;
}, 10, 4); O primeiro filtro adiciona heic e heif à lista de permissões. O segundo filtro lida com um bug sutil: em alguns servidores, a extensão finfo do PHP reporta arquivos HEIC como application/octet-stream em vez de image/heic, o que faz com que wp_check_filetype_and_ext() rejeite o upload mesmo que a extensão esteja na lista de permissões. O segundo filtro força o reconhecimento do tipo quando o arquivo termina em .heic ou .heif.
Salve o arquivo, depois tente fazer upload de uma foto HEIC pela Biblioteca de Mídia. Se seu servidor tem ImageMagick com libheif compilado, as miniaturas serão geradas normalmente. Se aparecerem como espaços reservados cinza, seu servidor não consegue decodificar o formato — veja a seção de solução de problemas abaixo.
Por que um tema filho ou plugin customizado?
Se você adicionar o snippet diretamente ao functions.php do seu tema pai, a próxima atualização do tema o apagará e os uploads HEIC começarão a falhar silenciosamente. Um plugin customizado de duas linhas resolve isso:
<?php
/**
* Plugin Name: HEIC Upload Support
* Version: 1.0
*/
add_filter('upload_mimes', function($mimes) {
$mimes['heic'] = 'image/heic';
$mimes['heif'] = 'image/heif';
return $mimes;
}); Salve como wp-content/plugins/heic-upload-support/heic-upload-support.php, ative na tela de Plugins, e pronto. A mudança fica desacoplada do seu tema e das atualizações do núcleo do WordPress.
Método 2: Usar um Plugin
Se você não quer editar PHP, vários plugins lidam com o filtro upload_mimes para você. Duas opções testadas em produção:
WP Add Mime Types
Este é o plugin mais simples da categoria. Após a ativação, vá para Configurações, Mime Type Settings e adicione uma linha com extensão heic e tipo MIME image/heic. Adicione uma segunda linha para heif e image/heif. Salve. Esse é todo o fluxo de trabalho.
O plugin é mantido ativamente desde 2014 e tem mais de 80.000 instalações ativas. A base de código é pequena o suficiente para não ter tido um aviso de segurança desde 2018.
File Upload Types by WPForms
Se você já está usando WPForms para formulários de contato, esse mesmo fornecedor oferece um plugin gratuito File Upload Types que adiciona uma interface baseada em checkboxes à lista de permissões. Você pesquisa por "HEIC" na lista, marca a caixa, salva. Ele também lida com WebP, AVIF, SVG e um punhado de formatos menos comuns com o mesmo padrão.
Ambos os plugins fazem exatamente o que o filtro faz, apenas através de uma UI. Não há diferença de desempenho. Escolha o caminho do plugin se você não se sente confortável editando arquivos PHP; escolha o caminho do filtro se quiser manter sua contagem de plugins ativos baixa.
Método 3: Lista Branca em Nível de Servidor (Avançado, use com cautela)
O WordPress tem uma escotilha de escape no wp-config.php que ignora a lista de permissões inteiramente:
define('ALLOW_UNFILTERED_UPLOADS', true); Com essa constante definida, administradores podem fazer upload de qualquer tipo de arquivo, incluindo HEIC. A verificação se foi. A validação de tipo MIME se foi.
Não faça isso em produção. A constante desabilita todas as verificações de segurança de upload que o WordPress tem. Um comprometimento da conta de administrador se torna um comprometimento do servidor porque o atacante pode fazer upload de scripts PHP diretamente para wp-content/uploads e executá-los. Mesmo configurações que parecem seguras hoje frequentemente acabam tendo um assinante-com-papel-de-administrador esquecido em algum lugar.
O único caso de uso legítimo para ALLOW_UNFILTERED_UPLOADS é um ambiente de desenvolvimento local onde você está depurando o comportamento de upload. Mesmo assim, comente antes de fazer push para o staging.
Depois de habilitar HEIC: O problema de exibição no navegador
Adicionar HEIC à lista de permissões resolve o erro de upload. Não resolve o problema de exibição. O Safari renderiza imagens HEIC nativamente, mas Chrome, Firefox, Edge e o navegador padrão do Android não. Se você fizer upload de um arquivo HEIC bruto e incorporá-lo em um post, a maioria dos seus visitantes verá um ícone de imagem quebrada.
Existem três correções reais:
Conversão no servidor via plugin
Plugins de otimização de imagem como ShortPixel, Imagify e EWWW Image Optimizer podem interceptar uploads HEIC e gerar variantes JPEG ou WebP em tempo real. Os visitantes recebem o formato que o navegador deles suporta; o HEIC permanece no servidor como o original. O ShortPixel lida com isso de forma transparente com suas configurações "Adaptive Delivery" ou WebP/AVIF habilitadas.
Conversão no servidor via código customizado
Se você não quer um plugin pago, adicione este filtro para converter HEIC para JPEG automaticamente no upload (requer ImageMagick com libheif):
add_filter('wp_handle_upload_prefilter', function($file) {
if (!in_array(strtolower(pathinfo($file['name'], PATHINFO_EXTENSION)), ['heic', 'heif'], true)) {
return $file;
}
$imagick = new Imagick($file['tmp_name']);
$imagick->setImageFormat('jpeg');
$imagick->setImageCompressionQuality(85);
$new_path = preg_replace('/\.(heic|heif)$/i', '.jpg', $file['tmp_name']);
$imagick->writeImage($new_path);
$imagick->destroy();
$file['tmp_name'] = $new_path;
$file['name'] = preg_replace('/\.(heic|heif)$/i', '.jpg', $file['name']);
$file['type'] = 'image/jpeg';
return $file;
}); Isso passa todo upload HEIC pelo ImageMagick, substitui o original por um JPEG e armazena o JPEG na Biblioteca de Mídia. Os visitantes recebem um JPEG independentemente do navegador.
Conversão no cliente antes do upload
A abordagem mais confiável é converter no dispositivo antes que o arquivo chegue ao seu servidor. O SnapPress faz exatamente isso para uploads do iPhone: quando você seleciona fotos HEIC na folha de compartilhamento ou no app, ele as decodifica no dispositivo usando o pipeline de imagem do iOS e envia JPEG para seu site WordPress. Seu servidor não precisa do libheif e seu filtro upload_mimes não precisa do HEIC porque o arquivo que chega já é um JPEG padrão. Essa é a abordagem que cobri em detalhes no guia HEIC do iPhone e WordPress.
Solução de Problemas Comuns
"Desculpe, este tipo de arquivo não é permitido por razões de segurança" ainda aparece
Seu filtro upload_mimes não está sendo carregado. Verifique três coisas: (1) o arquivo contendo o filtro está sendo realmente incluído em toda requisição — se você o colocou em um tema filho mas o tema pai está ativo, ele não vai rodar; (2) o filtro não retorna cedo ou faz curto-circuito; (3) alguns plugins de segurança (Wordfence, Sucuri) adicionam sua própria validação de upload em cima do núcleo do WordPress. Coloque HEIC na lista branca nas configurações do plugin também.
O arquivo faz upload mas as miniaturas são espaços reservados cinza
Seu servidor aceitou o arquivo porque a lista de permissões está correta, mas o ImageMagick não consegue decodificar HEIC porque foi compilado sem libheif. Peça à sua hospedagem para atualizar a compilação do ImageMagick (hospedagens gerenciadas de WordPress como Kinsta e WP Engine já entregam libheif por padrão), ou use o filtro de conversão no servidor mostrado acima para converter para JPEG no upload. O diagnóstico mais profundo está em Como Resolver Erros de Upload de Imagem no WordPress.
"Este tipo de arquivo não é permitido" mas a extensão é .heic
O módulo finfo do PHP reportou o tipo MIME como application/octet-stream em vez de image/heic. Esse é o bug que o segundo filtro no Método 1 corrige. Adicione o filtro wp_check_filetype_and_ext do snippet recomendado e o erro desaparece.
A barra de progresso de upload chega a 100% depois dá erro
O arquivo chegou ao servidor mas o WordPress não conseguiu escrever em wp-content/uploads, ou o memory_limit do PHP foi esgotado durante a geração de miniaturas. A decodificação HEIC é cerca de 2 a 3x mais intensiva em memória que JPEG, então um servidor que lida com JPEGs de 5MB confortavelmente pode ter dificuldades com arquivos HEIC de 5MB. Aumente WP_MEMORY_LIMIT para 256M e tente novamente.
Upload do iPhone sem nada disso
Tudo acima assume que você quer que arquivos HEIC cheguem diretamente ao seu servidor WordPress. O outro caminho — e o que entreguei para milhares de sites WordPress sem uma única mudança de configuração no servidor — é converter no iPhone antes do upload.
O SnapPress lê HEIC da sua biblioteca de Fotos, decodifica usando o pipeline de imagem do iOS (que a Apple mantém e atualiza a cada lançamento do iOS), e faz upload de um JPEG para sua Biblioteca de Mídia do WordPress via a API REST. Seu functions.php permanece intocado. Seu filtro upload_mimes permanece intocado. O arquivo que chega ao seu servidor é um JPEG padrão que toda instalação WordPress desde 2003 tem suportado.
Esse é o caminho que recomendo para qualquer um que gerencia múltiplos sites WordPress ou que não se sente confortável editando PHP. Configure uma vez no iPhone, envie fotos para qualquer site WordPress para o qual você tenha senhas de aplicativo e nunca mais veja "Desculpe, este tipo de arquivo não é permitido por razões de segurança".
Se você publica do iPhone com frequência, veja a comparação de fluxo de trabalho em Upload em Massa de Imagens para o WordPress pelo Celular.
Recapitulação e Recomendação
O WordPress bloqueia HEIC por padrão porque image/heic não está na lista de permissões de tipos MIME fixa em muitas configurações. Existem três maneiras de corrigir isso:
- Filtro functions.php — a correção de produção mais limpa. Cinco linhas, sem sobrecarga de plugin, funciona em toda instalação WordPress.
- Plugin WP Add Mime Types — o caminho sem código. Mesmo efeito que o filtro, custa um slot de plugin.
- ALLOW_UNFILTERED_UPLOADS — nunca use em produção. Desabilita todas as verificações de segurança de upload que o WordPress tem.
Qualquer que seja o método que você escolher, lembre-se de que permitir o upload de HEIC é apenas metade do problema. A maioria dos navegadores de visitantes não consegue renderizar HEIC, então você também precisa de conversão no servidor (ShortPixel, filtro Imagick customizado) ou conversão no cliente (SnapPress, Atalhos) para garantir que o arquivo que seus leitores realmente veem seja um JPEG.
Para fluxos de trabalho de publicação do iPhone especificamente, a conversão no dispositivo é a abordagem mais resiliente porque não depende da compilação do ImageMagick do seu provedor de hospedagem. Comece com o SnapPress grátis, conecte via o plugin SnapPress Connect para WordPress, e HEIC simplesmente se torna "uma foto que enviei".
Perguntas Frequentes
Por que o WordPress bloqueia HEIC por padrão?
O WordPress valida todo upload contra uma lista de permissões fixa retornada por get_allowed_mime_types(). Até a versão 6.7 no final de 2024, image/heic e image/heif não estavam nessa lista, então o upload era rejeitado antes mesmo do arquivo chegar à Biblioteca de Mídia. A mensagem "razões de segurança" é enganosa — é na verdade uma lista de permissões estrita projetada para impedir que atacantes enviem executáveis disfarçados de imagens. Mesmo com WordPress 6.7+, muitas hospedagens compartilhadas ainda precisam de um filtro upload_mimes manual porque suas compilações personalizadas removem tipos MIME mais novos.
É seguro permitir uploads HEIC no WordPress?
Sim. HEIC é um contêiner de imagem estática baseado no formato HEIF, e o decodificador real é o libheif, que é bem auditado e usado em macOS, iOS, Windows 10+ e na maioria das distribuições Linux. Permitir image/heic no filtro upload_mimes não enfraquece a segurança do WordPress porque o arquivo ainda precisa passar pela validação wp_check_filetype_and_ext(). O risco maior é o oposto: pessoas ativam ALLOW_UNFILTERED_UPLOADS no wp-config.php para corrigir um erro HEIC, depois esquecem e deixam todo o pipeline de upload completamente aberto.
As fotos HEIC serão exibidas em todos os navegadores depois que eu habilitar o upload?
Não, e essa é a parte que a maioria dos tutoriais pula. O Safari renderiza HEIC nativamente, mas Chrome, Firefox, Edge e o navegador padrão do Android não. Se você fizer upload de um arquivo HEIC bruto e incorporá-lo em um post com uma tag img, aproximadamente 70 por cento dos seus visitantes verão uma imagem quebrada. Você precisa de um plugin de conversão no servidor como ShortPixel que entrega JPEG ou WebP para usuários que não usam Safari, ou precisa converter HEIC para JPEG no momento do upload para que o arquivo armazenado na sua Biblioteca de Mídia seja compatível com a web desde o início.
Como converter HEIC para JPEG em massa antes do upload?
No macOS, arraste os arquivos HEIC para o Preview, abra todos em uma janela, depois Arquivo, Exportar, escolha JPEG qualidade 85. No Windows 11, abra a pasta no Explorador de Arquivos, selecione todos os arquivos HEIC, clique com o botão direito, Abrir com Fotos, depois salve cada um como JPEG (mais lento). No iPhone, não há conversor em lote nativo — o app Atalhos pode criar um com uma única ação "Converter Imagem", ou você pode usar uma ferramenta de upload nativa do iPhone que lida com a conversão automaticamente durante o envio, para que você nunca precise lidar com o arquivo em disco.
Habilitar HEIC afeta o desempenho do WordPress?
Apenas no momento do upload, não na entrega. Quando você permite image/heic e um arquivo HEIC chega ao seu servidor, o WordPress gera a miniatura e tamanhos intermediários via ImageMagick ou GD. A decodificação HEIC via libheif é aproximadamente 2 a 3 vezes mais lenta que a decodificação JPEG porque o codec faz mais trabalho. Para um único upload isso é imperceptível. Para um upload em massa de 100 fotos em uma hospedagem compartilhada econômica, você pode atingir o limite max_execution_time do PHP. Pré-converter para JPEG ou usar uma ferramenta de upload que converte no dispositivo evita isso completamente.
Qual é a diferença entre HEIC e HEIF?
HEIF (High Efficiency Image Format) é o formato de imagem subjacente que usa compressão HEVC. HEIC (High Efficiency Image Container) é a extensão de arquivo que a Apple usa para envolver uma única imagem HEIF. Os tipos MIME são image/heic e image/heif respectivamente. Ao adicionar HEIC ao filtro upload_mimes, sempre adicione HEIF também — iPhones ocasionalmente produzem arquivos .heif para sequências de imagens e rajadas, e tratá-los como tipos separados quebra uploads de maneiras sutis. O WordPress 6.7 internamente trata ambas as extensões de forma idêntica, mas a lista de permissões ainda verifica cada tipo MIME por nome.