Quando falamos de múltiplas zonas, regras complexas e integrações com transportadoras, rapidamente surge um problema: como migrar, versionar ou replicar configurações de envio entre ambientes sem erro humano?
É aqui que entra uma abordagem técnica sólida de exportação e importação de definições de shipping.
A maioria das lojas cresce de forma orgânica. Primeiro uma zona, depois três, depois regras específicas por peso, classe de envio ou localização. Sem automação, qualquer alteração torna-se manual, propensa a erros e difícil de manter. A necessidade de exportar definições – em JSON ou CSV – não é apenas uma conveniência: é um requisito para escalabilidade e integração com sistemas externos (ERPs, logística, marketplaces).
Atenção: como o WooCommerce estrutura os envios internamente
O WooCommerce organiza os envios em zonas, cada uma com métodos de envio e respetivas configurações guardadas na base de dados (wp_options). A função WC_Shipping_Zones::get_zones() permite-nos aceder a toda esta estrutura de forma programática.
Isto abre a porta à criação de ferramentas de exportação personalizadas.
$zones = WC_Shipping_Zones::get_zones();
foreach ($zones as $zone) {
foreach ($zone['shipping_methods'] as $method) {
$option_key = 'woocommerce_' . $method->id . '_' . $method->instance_id . '_settings';
$settings = get_option($option_key);
// Aqui podemos serializar/exportar
}
}
Este snippet é a base de qualquer sistema robusto de exportação de shipping.
Interesse: construir um export estruturado e reutilizável
Ao estruturar os dados em JSON, conseguimos criar um snapshot completo das definições:
$export_data[$zone_id] = [
'zone_name' => $zone['zone_name'],
'zone_order' => $zone['zone_order'],
'zone_locations' => $zone['zone_locations'],
'methods' => []
];
Este formato permite transportar toda a lógica de envios entre ambientes (produção, staging, cliente final) com total fidelidade .
Interesse avançado: o problema real – IDs não portáveis
Aqui está o verdadeiro desafio técnico: IDs de classes de envio não são consistentes entre sites. Uma classe com ID 15 num site pode ser completamente diferente noutro. A solução passa por enriquecer o export com metadados como slug e name.
$term = get_term_by('id', $rule['shipping_class'], 'product_shipping_class');
$rule['shipping_class_slug'] = $term->slug;
$rule['shipping_class_name'] = $term->name;
Este detalhe aparentemente pequeno é o que transforma um export simples numa solução profissional .
Desejo: importação inteligente e resiliente
No processo de importação, é necessário reconstruir tudo – zonas, métodos e regras – garantindo consistência:
$zone = new WC_Shipping_Zone();
$zone->set_zone_name($z_data['zone_name']);
$zone->save();
$new_instance_id = $zone->add_shipping_method($m_data['method_id']);
update_option("woocommerce_{$m_data['method_id']}_{$new_instance_id}_settings", $settings);
Este processo permite replicar ambientes completos em segundos .
Desejo técnico: resolver dependências automaticamente
Uma implementação madura resolve automaticamente dependências como classes de envio:
function ensure_shipping_class_exists($slug, $name) {
$term = get_term_by('slug', $slug, 'product_shipping_class');
if ($term) return $term->term_id;
$new_term = wp_insert_term($name, 'product_shipping_class', ['slug' => $slug]);
return $new_term['term_id'];
}
Este tipo de abordagem elimina erros silenciosos e garante integridade dos dados .
Interesse UI/UX: integração com AJAX e jQuery
Uma solução completa não vive apenas no backend. A integração com jQuery permite criar interfaces simples e eficazes para importação/exportação:
$.ajax({
url: ajaxurl,
method: 'POST',
data: {
action: 'ptpac_import_shipping',
json_data: jsonContent
},
success: function(response) {
if(response.success) location.reload();
}
});
Com validação via nonce e permissões (manage_woocommerce), garantimos segurança e controlo .
Desejo: performance e consistência
Após qualquer alteração, é essencial limpar o cache de shipping:
WC_Cache_Helper::get_transient_version('shipping', true);
Sem isto, alterações podem não refletir imediatamente – um detalhe crítico em ambientes de produção .
Oportunidade: automatização total de logística
Este tipo de solução permite integrar diretamente com transportadoras, ERPs ou sistemas como DHL, eliminando tarefas manuais e reduzindo erros operacionais. A exportação estruturada é a base para automação logística avançada.
Ação: o que isto significa para o seu negócio
Se está a gerir uma loja WooCommerce com regras de envio complexas, múltiplos mercados ou integrações externas, precisa de mais do que configurações manuais. Precisa de controlo total, portabilidade e automação.
Desenvolvo plugins WordPress/WooCommerce à medida, com foco em:
- Exportação/importação avançada de dados;
- Integrações com APIs e ERPs;
- Automação de processos logísticos;
- Performance e segurança.
Se este tipo de solução resolver um problema real no seu negócio, então já não é opcional – é o próximo passo de lógica.

