Campos personalizados de Woocommerce para la calculadora de envío

3 minutos de lectura

avatar de usuario
HeruRaHa

Estoy creando un método de envío personalizado para Woocommerce, y lo único en lo que estoy totalmente obsesionado es en cómo pasar valores personalizados a la función de calcular_envío(), ya sea cuando se usa en la página del carrito o en la página de pago.

Necesito pasar un puñado de variables definidas por el usuario que afectarán la cotización, es decir, “Es una dirección residencial”, “Es una feria comercial”, etc., etc.

calcular_envío recibe la matriz de $paquete que contiene una matriz de ‘destino’, pero esto solo incluye la información estándar de add1, add2, ciudad, estado, código postal y país. He agregado campos personalizados a la página de pago tanto en facturación como en envío, pero aún no puedo entender cómo hacer que estos valores sean accesibles para la función de cálculo_envío.

He agregado un campo personalizado así:

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['shipping']['is_residential'] = array(
    'label'     => __('Residential Address?', 'woocommerce'),
 'type'      => 'checkbox',
 'required'  => false,
 'class'     => array('form-row-wide'),
 'clear'     => true
  );

  return $fields;
}

Y veo que aparece este campo en la sección Envío del formulario de pago. Sin embargo, no veo cómo puedo acceder a él en cualquier lugar. Incluso haciendo un print_r($_POST) en la página de pago no muestra este campo como parte de los datos de la publicación, incluso después de saber que el formulario se ha actualizado y vuelto a publicar.

Pero lo más importante, necesito agregar el contenido del campo enviado en el objeto $paquete que Woocommerce pasa a la función de cálculo de envío() de un método de envío.

Realmente no estoy seguro de por dónde empezar con esto.

  • En general, es útil para las personas si cita un fragmento del código que ha escrito hasta ahora, que demuestra el problema que tiene, y luego señala dónde está el problema en ese código, en lugar de simplemente describiendo el código que escribiste.

    – neminem

    14/02/2014 a las 22:50

  • Agregué un código arriba, pero no estoy seguro de cuán útil será. Lo importante es que necesito que los campos de pago personalizados sean accesibles de alguna manera y hasta ahora ni siquiera puedo encontrar los valores en $_POST

    – HeruRaHa

    14/02/2014 a las 23:35

No puede esperar agregar campos de pago y tenerlos disponibles en la página del carrito.

La forma correcta es usar paquetes de carro.

Controlar function get_shipping_packages() de clase-wc-cart.php

public function get_shipping_packages() {
        // Packages array for storing 'carts'
        $packages = array();

        $packages[0]['contents']                 = $this->get_cart();       // Items in the package
        $packages[0]['contents_cost']            = 0;                       // Cost of items in the package, set below
        $packages[0]['applied_coupons']          = $this->applied_coupons;
        $packages[0]['destination']['country']   = WC()->customer->get_shipping_country();
        $packages[0]['destination']['state']     = WC()->customer->get_shipping_state();
        $packages[0]['destination']['postcode']  = WC()->customer->get_shipping_postcode();
        $packages[0]['destination']['city']      = WC()->customer->get_shipping_city();
        $packages[0]['destination']['address']   = WC()->customer->get_shipping_address();
        $packages[0]['destination']['address_2'] = WC()->customer->get_shipping_address_2();

        foreach ( $this->get_cart() as $item )
            if ( $item['data']->needs_shipping() )
                if ( isset( $item['line_total'] ) )
                    $packages[0]['contents_cost'] += $item['line_total'];

        return apply_filters( 'woocommerce_cart_shipping_packages', $packages );
    }

Tienes que engancharte woocommerce_cart_shipping_packages filtre y agregue sus campos allí.

Lo más probable es que deba agregarlos (sus campos) en la calculadora de envío y en las páginas de pago.

Espero que esto ayude.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad