Luc45 / WooCommerce-Correios-Calculo-de-Frete-na-Pagina-do-Produto

Habilita o cálculo de frete na página do produto no WooCommerce.
GNU General Public License v2.0
24 stars 11 forks source link

cfpp_custom_handler_* deve retornar um objeto Handler mas não recebe $shipping_method #27

Open wilmerlm11 opened 4 years ago

wilmerlm11 commented 4 years ago

Olá @Luc45 ! Blz?

Como uma alternativa para o problema abaixo: https://github.com/Luc45/WooCommerce-Correios-Calculo-de-Frete-na-Pagina-do-Produto/issues/25 Fui criar um custom handler para flat rate para assim modificar os textos que são exibidos.

Na classe Factory.php, tem uma passagem que permite a criação de um custom handler. $custom_handler = apply_filters('cfpp_custom_handler_' . $shipping_method_slug, null);

Embaixo, existe uma validação se o retorno é um objeto de alguma classe que estende Handler if ($custom_handler instanceof Handler) { Ou seja, ele espera já um objeto da classe do custom handler criado, certo?

O problema é que, para criar uma instância, eu preciso de um parâmetro WC_Shipping_Method Só que a variável $shipping_method não foi passada para o filtro.

Assim, tive que criar uma WC_Shipping_Flat_Rate vazia, só para conseguir construir e retornar um objeto do meu handler.

Aí depois, o plugin segue e cria uma nova instância do meu handler, dessa vez usando a variável $shipping_method return new $custom_handler($shipping_method);

Vejo 2 opções pra arrumar: A) Já passar o $shipping_method para o filtro, receber o handler já certinho, só verificar se é uma instância de Handler e já retornar a própria instância que veio do filtro, ao invés de criar outra. B) Ao invés de receber um objeto, receber somente o nome da classe a ser instanciada dentro do próprio plugin.

Eu criei um PR para a solução A: https://github.com/Luc45/WooCommerce-Correios-Calculo-de-Frete-na-Pagina-do-Produto/pull/26

Mas vi que existe um @todo embaixo dizendo que essa parte será removida para usar o 'cfpp_factory_map' é isso?

Nesta parte, vi que os custom handlers deverão estar na pasta /Handlers/ do diretório do plugin, né? if (array_key_exists($shipping_method_name, $shipping_methods_handlers) && file_exists(__DIR__ . '/Handlers/' . $shipping_methods_handlers[$shipping_method_name] .'.php')) {

É seguro subir um arquivo custom no diretório do plugin? Não será perdido nas atualizações do plugin? De acordo com este post: https://wordpress.stackexchange.com/questions/97827/do-extra-plugin-files-get-deleted-during-an-upgrade Os arquivos custom serão removidos. Será que vale rever esta parte também?

Abraços!!