Data_Store
é uma interface para fazer o trabalho com banco de dados, como no caso de produtos vai ser bem demorado para ter algum tipo de alteração, digo no caso de ir para uma tabela própria para os dados dos produtos, acredito que usar tranquilo usar o mesmo Data_Store
de variações.
Ainda assim, recomendo estender a classe, e usar o filtro woocommerce_' . $object_type . '_data_store
para adicionar o seu Data_Store
na lista, apenas para deixar organizado.
Valeu Claudio,
Estou utilizando o mesmo Data_Store de variable agora, utilizando:
add_filter( 'woocommerce_data_stores', array( $this, 'register_data_stores' ) );
public function register_data_stores( $data_stores = array() ) {
$data_stores['product-registrations'] = 'WC_Product_Variable_Data_Store_CPT';
return $data_stores;
}
Entretanto percebi que alguns métodos do Data_Store variable possuem trechos como is_a( 'WC_Product_Variable' )
e instanciação de Data_Store com base em $product->get_type()
(o que no meu produto retornaria ‘registrations’, não variable), então resolvi sobrescrever estes métodos em um Data_Store próprio que herda do Data_Store de variable.
Aparentemente tudo ok, entretanto as variações são salvas, consulto banco de dados, as informações estão lá, está como instock porém os produtos aparecem como fora de estoque após eu salvar o produto (no front e no admin). Tentei debugar várias coisas nos métodos de salvamento das variações, etc., mas não consigo encontrar o problema, já que no banco os produtos constam como instock. (Sei que é difícil apontar o que pode ser assim, mas se tiver alguma ideia de como posso debugar iria ajudar bastante)
Valeu!
-
Esta resposta foi modificada 7 anos, 11 meses atrás por
Allyson.
-
Esta resposta foi modificada 7 anos, 10 meses atrás por
Felipe Elia.
Valeu Claudio,
Estou utilizando a Data Store de variable agora, com o filtro que falou. Percebi que alguns métodos da classe WC_Product_Variable
que eu herdava no meu product type utilizavam is_a( $product, 'WC_Product_Variable' )
e WC_Data_Store::load( 'product' . get_type() );
, então os sobrescrevi em minha classe, sem problemas.
Aparentemente tudo certo, funcionando no painel administrativo, porém quando vou ver no front está acusando como Produto fora de estoque e indisponível. Tentei debugar, em alguns momentos quando dou a saída do método get_children com error_log, está ok, retorna o ID da variação filha, porém dei um var_dump( $product )
no front e me retornou isso (trecho dos children apenas):
["children":protected]=>
array(0) {
}
["visible_children":protected]=>
array(0) {
}
["variation_attributes":protected]=>
array(0) {
}
Sem children, visible_children etc., definidos. Olho no banco de dados e está lá, o produto e sua variação salvos, estoque marcado como instock
, aparentemente tudo certo. Sei que é difícil avaliar assim, mas tem ideia de como posso pelo menos debugar melhor para entender onde está a raiz do problema?
Valeu!
-
Esta resposta foi modificada 7 anos, 11 meses atrás por
Allyson.