Suporte » Plugins e hacks » Como adicionar um field para entrega customizado e utiliza-lo em um método de en

  • Resolvido jonev90

    (@jonev90)


    Pessoal eu quero calcular a taxa de entrega por bairros sem usar CEP. Fiz um método de entrega customizado, porém só consigo usar os fields de endereço padrão do woocommerce:

    function my_custom_shipping_init() {
        class my_custom_shipping_method extends WC_Shipping_Method {
    
        public function __construct() {
            $this->id = 'my_custom_shipping';
            $this->method_title = __('Taxa de entregar por bairros', 'my-custom-shipping');
            $this->enabled = 'yes';
            $this->title = __('Taxa de entregar por bairros', 'my-custom-shipping');
            $this->method_description = __('Plugin to calculate My Custom Shipping Cost', 'my-custom-shipping');
        }
    
        function calculate_shipping( $package = array() ) {
            $shipping_cost = 0;
            $destination_district = $package['destination']['city'];
            switch($destination_district){
                case 'Centro': $shipping_cost = 5; break;
                case 'Cariru': $shipping_cost = 7; break;
            }
            $this->add_rate(array('id'        => 'my_custom_shipping',
                                            'label'     => 'Taxa de Entrega',
                                            'cost'      => $shipping_cost,
                                            'taxes'     => '',
                                            'calc_tax'  => 'per_order'));
        }                       
    } 
    }
    add_action( 'woocommerce_shipping_init', 'my_custom_shipping_init' );
    function my_custom_shipping_method( $methods )  {
        $methods[] = 'my_custom_shipping_method';
        return $methods;
    }
    add_filter( 'woocommerce_shipping_methods', 'my_custom_shipping_method' );

    No caso eu estou usando o field de endereço de cidade padrão do woocommerce, funciona porem eu quero poder criar um field de nome “bairro” e poder usa-lo.

    Eu criei um field customizado:

    function calculate_shipping( $fields = array() ) {
                $shipping_cost = 0;
                $destination_district = $fields['billing']['bairro'];
                switch($destination_district){
                    case 'Alpha': $shipping_cost = 5; break;
                    case 'Beta': $shipping_cost = 7; break;
                }

    e tentei passar-lo para o meu metodo:

    function my_custom_shipping_method( $methods )  {
        $methods[] = 'my_custom_shipping_method';
        return $methods;
    }
    add_filter( 'woocommerce_shipping_methods', 'my_custom_shipping_method' );
    
    add_filter( 'woocommerce_checkout_fields' , 'custom_override_checkout_fields' );
    
    // Our hooked in function - $fields is passed via the filter!
    function custom_override_checkout_fields( $fields ) {
      $fields['billing']['bairro'] = array(
        'label'     => __('Bairro', 'woocommerce'),
        'type'      => 'text',
        'required'  => true,
        'class'     => array('form-row-wide'),
        'clear'     => true
      );
    
      return $fields;
    }

    mas sem sucesso
    Alguém pode ajudar?

A visualizar 1 resposta (de um total de 1)
A visualizar 1 resposta (de um total de 1)