Suporte » Plugins » WooCommerce 3.* – Utilizar mesmo Data_Store para dois tipos de produtos

  • ResolvidoModerador Allyson Souza

    (@allysonsouza)


    Estou tentando adaptar o plugin Registrations for WooCommerce para o novo paradigma do WC 3.*, principalmente em relação ao CRUD, pois no registrations for woocommerce o novo tipo de produto registration é criado.

    Entretanto, o produto registration, nada mais é do que um variable com algumas meta boxes adicionais para criação de atributos a serem utilizados em variações a partir de datas (date pickers), ou seja, o Data_Store dele seria exatamente o mesmo de variable.

    1. É possível que dois tipos de produtos utilizem o mesmo Data_Store?
    2. Independente da possibilidade, seria uma boa prática que eles o utilizassem?
    3. Terei de “recriar” todo Data_Store de variable para o meu novo product type?

    São esses questionamentos que estão me impedindo de avançar na adequação do plugin, e a lista de suporte e gente prejudicada só tá aumentando =x

    • Este tópico foi modificado 5 anos, 8 meses atrás por Allyson Souza.
    • Este tópico foi modificado 5 anos, 8 meses atrás por Allyson Souza.
Visualizando 3 respostas - 1 até 3 (de um total de 3)
  • Moderador Claudio Sanches

    (@claudiosanches)

    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.

    Moderador Allyson Souza

    (@allysonsouza)

    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 5 anos, 8 meses atrás por Allyson Souza.
    • Esta resposta foi modificada 5 anos, 8 meses atrás por Felipe Elia.
    Moderador Allyson Souza

    (@allysonsouza)

    Valeu Claudio,

    Estou utilizando a Data Store de variable agora, com o filtro que falou. Percebi que alguns métodos da classe WC_Product_Variableque 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 5 anos, 8 meses atrás por Allyson Souza.
Visualizando 3 respostas - 1 até 3 (de um total de 3)
  • O tópico ‘WooCommerce 3.* – Utilizar mesmo Data_Store para dois tipos de produtos’ está fechado para novas respostas.