Skip to content

Tudo para WordPress, desenvolvimento web — e não só

🔧 WP All Import: como reunir todas as imagens de um artigo numa única galeria

🔧 WP All Import: como reunir todas as imagens de um artigo numa única galeria

Importou uma centena de artigos através do WP All Import e as imagens espalharam-se pelo conteúdo de forma aleatória: esticadas a largura total nuns sítios, espremidas contra o texto noutros e como links quebrados no resto. Percorrer cada artigo manualmente é uma noite desperdiçada.

Há uma forma de reunir tudo numa única galeria. Automaticamente, sem edição manual de conteúdo. O método funciona tanto para importações recentes como para artigos carregados há um mês. Abaixo estão duas abordagens: a fácil (em tempo real, via o hook pmxi_gallery_image) e a posteriori (com atualização em massa). Ambas testadas no WP All Import 4.9+.

💡 Resumo rápido:

  • Prepare CSV ou XML: links das imagens como URLs completos, um por linha
  • No modelo de importação, configure a secção Imagens e indique o campo com as imagens
  • Adicione o hook pmxi_gallery_image ao functions.php, a galeria monta-se sozinha durante a importação
  • Para artigos antigos: uma função para substituir <img> pelo shortcode da galeria e atualização em massa

Como preparar imagens para importação

Antes de executar a importação, os links das imagens devem estar no formato correto. O WP All Import descarrega imagens apenas se o URL for completo, direto e apontar para um ficheiro, não para uma página HTML.

Suponha que no site antigo a galeria tem este aspeto:

1<a href="/cache/images/photo1.jpg" data-lightbox="group:1" title="Photo 1">
2 <img src="/cache/images/photo1_thumb.jpg" alt="Photo 1">
3</a>
4<a href="/cache/images/photo2.jpg" data-lightbox="group:1" title="Photo 2">
5 <img src="/cache/images/photo2_thumb.jpg" alt="Photo 2">
6</a>

Após a análise, no ficheiro CSV para importação, os links devem tornar-se URLs completos, um por linha, sem invólucro HTML:

1http://newsite.com/files/photo1.jpg
2http://newsite.com/files/photo2.jpg

Onde http://newsite.com é o domínio do site para o qual está a importar. Crítico: se os links forem relativos ou apontarem para o domínio antigo, o WP All Import não irá detetar os ficheiros e não os carregará para a biblioteca de media.

Os links no corpo do artigo devem corresponder um a um aos que fornece ao plugin para carregamento. Caso contrário, após a importação, algumas tags <img> permanecerão com URLs antigos e não serão incluídas na galeria.

Configurar o modelo de importação no WP All Import

Na interface do plugin, vá ao modelo de importação. A secção principal aqui é Imagens. Tem este aspeto:

Interface de configurações de imagem do WP All Import

Na secção Imagens, especifique o campo que contém os links das imagens. Normalmente é uma célula CSV separada (por exemplo, gallery_images), onde os links são listados com um separador, por predefinição |:

1http://newsite.com/files/photo1.jpg | http://newsite.com/files/photo2.jpg | http://newsite.com/files/photo3.jpg

O WP All Import irá analisar a string, descarregar cada imagem e adicioná-la à biblioteca de media do WordPress. Mas, para já, as imagens são apenas anexadas ao artigo como anexos. Vamos montar a galeria separadamente.

Certifique-se de verificar como o plugin trata o carregamento. Clique em Pré-visualizar e Testar e depois em Executar Teste. Uma marca verde junto ao número de imagens significa que está tudo configurado corretamente. Uma cruz vermelha significa que deve verificar os URLs: devem ser completos e diretos.

Antes de iniciar a importação, carregue os ficheiros de imagem para a pasta files na raiz do site, se o plugin obtiver as imagens do servidor e não de URLs externos.

Como montar a galeria em tempo real: hook pmxi_gallery_image

A forma mais limpa é montar a galeria logo durante a importação. O WP All Import fornece o hook pmxi_gallery_image, que é acionado para cada imagem carregada. Interceta o ID do anexo e guarda-o no campo meta do artigo no formato desejado.

Três variantes testadas, escolha de acordo com o seu tema ou plugin de galeria.

Variante 1: array de IDs de anexos. Adequado para a maioria dos temas que esperam a galeria como um array de IDs de anexos:

1function my_gallery_ids($post_id, $att_id, $filepath, $is_keep_existing_images)
2{
3 $key = '_my_gallery';
4 $gallery = get_post_meta($post_id, $key, true);
5
6 if (empty($gallery)) {
7 $gallery = array();
8 }
9
10 if (!in_array($att_id, $gallery)) {
11 $gallery[] = $att_id;
12 update_post_meta($post_id, $key, $gallery);
13 }
14}
15add_action('pmxi_gallery_image', 'my_gallery_ids', 10, 4);

Variante 2: array de URLs. Se o tema precisar de links diretos para imagens em tamanho real:

1function my_gallery_urls($post_id, $att_id, $filepath, $is_keep_existing_images)
2{
3 $key = '_my_gallery';
4 $size = 'full';
5 $gallery = get_post_meta($post_id, $key, true);
6
7 if (empty($gallery)) {
8 $gallery = array();
9 }
10
11 if (!isset($gallery[$att_id])) {
12 $src = wp_get_attachment_image_src($att_id, $size);
13 $gallery[$att_id] = $src[0];
14 update_post_meta($post_id, $key, $gallery);
15 }
16}
17add_action('pmxi_gallery_image', 'my_gallery_urls', 10, 4);

Variante 3: string com separador. Se o campo meta armazena IDs separados por vírgula (formato "23,25,31"):

1function my_gallery_string($post_id, $att_id, $filepath, $is_keep_existing_images)
2{
3 $key = '_my_gallery';
4 $sep = ',';
5 $gallery = get_post_meta($post_id, $key, true);
6
7 if (is_string($gallery) || empty($gallery) || $gallery == false) {
8 $gallery = explode($sep, $gallery);
9 if (!in_array($att_id, $gallery)) {
10 if ($gallery[0] == '') unset($gallery[0]);
11 $gallery[] = $att_id;
12 update_post_meta($post_id, $key, implode($sep, $gallery));
13 }
14 }
15}
16add_action('pmxi_gallery_image', 'my_gallery_string', 10, 4);

O código é inserido no functions.php do tema. Após a conclusão da importação, o hook pode ser removido, o campo meta já está preenchido. Vantagem deste método: a galeria fica pronta imediatamente após a importação, sem passagens adicionais.

O que fazer com artigos já importados

Se os artigos já foram carregados e as imagens estão no conteúdo como tags <img> normais, precisa de uma abordagem diferente. Percorra todos os artigos e substitua as tags pelo shortcode da galeria.

A função abaixo recolhe todos os IDs de anexos de um artigo e substitui <img> no conteúdo por [gallery ids="..."]:

1function replace_post_images_with_gallery($post_id)
2{
3 $post = get_post($post_id);
4 if (!$post) return;
5
6 $attachments = get_attached_media('image', $post_id);
7
8 if (empty($attachments)) return;
9
10 $ids = array();
11 foreach ($attachments as $att) {
12 $ids[] = $att->ID;
13 }
14
15 $gallery_shortcode = '[gallery ids="' . implode(',', $ids) . '"]';
16 $content = preg_replace('/<img[^>]+>/i', '', $post->post_content);
17 $content = $gallery_shortcode . "\n\n" . $content;
18
19 wp_update_post(array(
20 'ID' => $post_id,
21 'post_content' => $content,
22 ));
23}

Depois execute uma atualização em massa:

  • No painel de administração, vá à lista de todos os artigos.
  • Nas opções de ecrã, defina o número de itens para 50 (ideal para que o servidor não bloqueie).
  • Selecione todos os artigos, escolha "Atualizar" nas ações em massa e aplique.

O WordPress percorrerá cada artigo, chamará save_post e hooks relacionados. Se a função no functions.php estiver ligada ao save_post, será executada. Após a conclusão, **remova o código do **functions.php, caso contrário, a cada gravação de artigo, o conteúdo será reconstruído novamente.

⁉️🤔 Perguntas frequentes

WP All Import** não está a descarregar imagens durante a importação, o que está errado?**

Os links no ficheiro de importação devem ser URLs completos (com http:// ou https://) e levar diretamente a um ficheiro de imagem, não a uma página HTML. Verifique as permissões de escrita em wp-content/uploads: se o servidor não conseguir gravar o ficheiro, a importação da imagem é silenciosamente ignorada. O motivo mais comum é uma incompatibilidade entre os links no corpo do conteúdo e no campo Imagens do modelo. Se o conteúdo tiver http://oldsite.com/img.jpg e em Imagens for fornecido http://newsite.com/files/img.jpg, o plugin não os ligará e a imagem permanecerá quebrada. Os URLs devem corresponder um a um.

Porque é que o pmxi_gallery_image é melhor do que o pós-importação?

O hook é acionado para cada imagem no momento do carregamento, a galeria fica pronta logo após a importação, sem uma segunda passagem. O pós-importação via wp_update_post sobrecarrega o servidor: mil artigos geram mil chamadas save_post. Para volumes até 100 artigos, a diferença é negligenciável, mas para grandes migrações, o hook poupa horas. Além disso, o pmxi_gallery_image dá acesso ao caminho do ficheiro carregado e ao ID do anexo, podendo prescrever imediatamente qualquer lógica: distribuir por pastas, adicionar ao slider, sincronizar com CDN. O pós-importação não oferece essa flexibilidade.

É necessário remover o código do functions.php após a importação?

Sim. Se a função estiver pendurada no pmxi_gallery_image, é acionada em QUALQUER adição de anexo, o resultado: duplicados no campo meta da galeria ao carregar imagens manualmente. O hook executa uma vez, após a conclusão da importação, pode ser removido com segurança. Se a função estiver ligada ao save_post ou usada na atualização em massa, ainda mais razão para a remover. Caso contrário, cada edição de artigo reconstruirá o conteúdo, removendo tags <img> e reescrevendo a galeria.

Como deixar imagens individuais fora da galeria?

Exclua-as da substituição. Na variante com pmxi_gallery_image, adicione uma condição por tamanho ou texto alternativo. Na variante com pós-importação, em vez de preg_replace para todos os <img>, use substituição seletiva: deixe imagens com uma classe CSS ou atributo específico, remova as restantes e substitua pela galeria. Por exemplo, <img class="keep"> permanece no conteúdo, todos os outros <img> são substituídos por [gallery]. Resolve-se refinando a regex na função de substituição.

É necessário o WP All Import Pro ou a versão gratuita é suficiente?

A versão gratuita pode importar imagens para a biblioteca de media e anexá-las a um artigo. O hook pmxi_gallery_image também está disponível nela. A versão Pro adiciona: carregamento de imagens a partir de URLs externos, importações Cron agendadas, execução de funções PHP diretamente no modelo de importação e suporte para campos personalizados. Para uma importação única com ficheiros locais, a versão gratuita é mais do que suficiente. O Pro é necessário quando as imagens estão num servidor de terceiros e não quer descarregá-las manualmente, bem como para campos ACF, importação WooCommerce e trabalho com tipos de artigo personalizados.

Qual o método a escolher para a sua tarefa

Se está apenas a planear uma importação, monte a galeria em tempo real via pmxi_gallery_image. Mais rápido, mais limpo e sem carga dupla no servidor. Qualquer uma das três variantes acima funciona: a escolha depende do formato em que o seu tema ou plugin espera a galeria.

Se os artigos já foram carregados e as imagens estão espalhadas pelo conteúdo, use a função para substituir <img> por [gallery] e execute uma atualização em massa. Para pequenos volumes (até 200 artigos), isto levará alguns minutos. Para milhares de artigos, é mais sensato dividir em lotes de 50.

O WP All Import em si é um dos importadores mais flexíveis para WordPress. Mais de 200.000 instalações ativas, a versão gratuita no WordPress.org cobre a maioria das tarefas de migração. E a versão Pro remove as últimas limitações em URLs externos e importações Cron. Experimente.