Woocommerce

HPOS no WooCommerce: ativar as tabelas wc_orders e migrar os pedidos

Em WooCommerce > Configurações > Avançado > Recursos o armazenamento de pedidos está travado em “posts do WordPress”, com aviso de plugin incompatível do lado, e a sincronização que você ligou semana passada nunca termina. Os dois se resolvem por linha de comando. Antes de tudo, dump do banco: migração de pedido não tem desfazer.

Veja quanto ainda falta migrar

sudo -u www-data wp db export ~/antes-do-hpos.sql
sudo -u www-data wp wc hpos status
sudo -u www-data wp wc hpos count_unmigrated
sudo -u www-data wp wc hpos sync --batch-size=500

O sync roda em lote e pode ser chamado quantas vezes quiser: só toca no que falta. Em loja grande eu deixo rodando numa tela separada e repito o count_unmigrated até zerar. Se parar no meio nada quebra: com o modo de compatibilidade ligado o pedido continua indo para os dois lugares.

Confira a contagem antes de virar a chave

sudo -u www-data wp db query "SELECT COUNT(*) FROM wp_posts WHERE post_type='shop_order'"
sudo -u www-data wp db query "SELECT COUNT(*) FROM wp_wc_orders"
sudo -u www-data wp option get woocommerce_custom_orders_table_enabled
sudo -u www-data wp option get woocommerce_custom_orders_table_data_sync_enabled

Os números raramente batem exatos: wp_wc_orders guarda também os rascunhos de checkout, que no modelo antigo eram posts com status wc-checkout-draft. O que não pode é faltar pedido pago do lado novo. Conte agora: depois da virada o pedido novo só deixa um registro reserva em wp_posts com post_type shop_order_placehold e o COUNT de shop_order congela. Conferido, ligue com sudo -u www-data wp wc hpos enable, que grava yes na option woocommerce_custom_orders_table_enabled.

O plugin incompatível e a sync dupla

O seletor fica cinza porque algum plugin não declarou compatibilidade com a funcionalidade custom_order_tables. A lista sai em wp-admin/plugins.php?plugin_status=incompatible_with_feature&feature_id=custom_order_tables. Atualize ou troque: plugin que ainda lê wp_postmeta devolve pedido vazio depois da virada.

Deixe a sincronização dupla ligada umas duas semanas antes de desligar com wp option update woocommerce_custom_orders_table_data_sync_enabled no. É o botão de voltar atrás: enquanto ela existe, um wp wc hpos disable devolve a loja para as tabelas antigas.

Post Recentes

json_validate no PHP 8.3: conferir se o JSON é válido sem decodificar

A função json_validate do PHP 8.3 diz se a string é JSON válido sem montar array nem objeto. Serve para…

4 horas atrás

Chave de API fora do Git: .env, getenv() e o que fazer se ela já vazou

Tire a chave de API do código com variável de ambiente, bloqueie o .env no nginx e entenda por que…

11 horas atrás

str_contains no PHP 8: parar de comparar strpos com !== false

Troque strpos e substr por str_contains, str_starts_with e str_ends_with no PHP 8, com o polyfill para quem ainda mantém servidor…

1 dia atrás

Data Patch Magento 2: criar atributo de produto sem InstallData

Copiou um InstallData.php de tutorial antigo e o atributo não apareceu depois do setup:upgrade? Veja a classe de Data Patch…

2 dias atrás

Criar cupom no WooCommerce por código: WC_Coupon com validade e limite

Função pronta para gerar um cupom único por cliente depois do pedido concluído, com WC_Coupon, data de expiração, limite de…

2 dias atrás

Modifier de produto no Magento 2: campo novo no form sem sobrescrever XML

Como registrar um modifier no pool do formulário de produto do Magento 2 e criar um campo próprio na aba,…

3 dias atrás