You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Problema:
Até agora, o plugin verificava se global $post->post_type era 'shop_order' para registrar o metabox apenas nessa condição. Isso funcionava no modo antigo (sem HPOS), em que a edição de pedidos ocorria via post.php?post=XXX&post_type=shop_order. Porém, com o HPOS ativado, a tela de edição de pedidos é admin.php?page=wc-orders&action=edit&id=XXX e não existe mais um objeto $post do tipo 'shop_order'. Dessa forma, a checagem falhava e o código nunca chamava add_meta_box(), impedindo que o metabox aparecesse na nova interface.
Causa técnica:
Quando o HPOS está ativo, o WooCommerce não usa WP_Post com post_type = shop_order para abrir a tela de pedidos.
Qualquer trecho de código que faça if ( ! $post || $post->post_type !== 'shop_order' ) { return; } impedirá o registro do metabox na nova tela, pois $post nem sequer é um objeto do tipo 'shop_order'.
Em vez disso, detectar o ID do pedido via $_GET['post'] (no modo tradicional) ou $_GET['id'] (no modo HPOS), e então chamar wc_get_order($id) para verificar se realmente é um pedido com método “paghiper”.
Registrar o metabox com add_meta_box() tanto no ID de tela 'shop_order' quanto em wc_get_page_screen_id( 'shop-order' ) (que é a tela correta no HPOS), se o pedido realmente for paghiper/pix/billet.
Assim, o metabox passa a aparecer normalmente em ambos os cenários (HPOS ativo ou não).
Problema:
Até agora, o plugin verificava se
global $post->post_type
era'shop_order'
para registrar o metabox apenas nessa condição. Isso funcionava no modo antigo (sem HPOS), em que a edição de pedidos ocorria viapost.php?post=XXX&post_type=shop_order
. Porém, com o HPOS ativado, a tela de edição de pedidos éadmin.php?page=wc-orders&action=edit&id=XXX
e não existe mais um objeto$post
do tipo'shop_order'
. Dessa forma, a checagem falhava e o código nunca chamavaadd_meta_box()
, impedindo que o metabox aparecesse na nova interface.Causa técnica:
WP_Post
compost_type = shop_order
para abrir a tela de pedidos.if ( ! $post || $post->post_type !== 'shop_order' ) { return; }
impedirá o registro do metabox na nova tela, pois$post
nem sequer é um objeto do tipo'shop_order'
.Solução:
if ( !$post || $post->post_type !== 'shop_order' ) return;
.$_GET['post']
(no modo tradicional) ou$_GET['id']
(no modo HPOS), e então chamarwc_get_order($id)
para verificar se realmente é um pedido com método “paghiper”.add_meta_box()
tanto no ID de tela'shop_order'
quanto emwc_get_page_screen_id( 'shop-order' )
(que é a tela correta no HPOS), se o pedido realmente for paghiper/pix/billet.Exemplo resumido:
Com isso, o plugin não fica preso ao
global $post->post_type
e o metabox aparecerá nos pedidos HPOS sem problemas.código completo woo-boleto-paghiper/includes/class-wc-paghiper-admin.php
referência:
https://developer.woocommerce.com/docs/hpos-extension-recipe-book/#:~:text=add_action%28%20%27before_woocommerce_init%27%2C%20function%28%29%20,FeaturesUtil%3A%3Aclass%20%29%20%29
The text was updated successfully, but these errors were encountered: