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.
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')) {
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!!