WooCommerce - Cómo Agregar un Campo Personalizado a los Artículos del Carrito y Totales

26 ene 2014, 06:42:13
Vistas: 26.5K
Votos: 7

Estoy utilizando el plugin WooCommerce y tengo la siguiente consulta:

Dentro de la página de producto individual, tengo un producto donde, según ciertas selecciones del comprador, se calcula un valor de costo de envío, que luego necesito pasar/incluir como parte de los artículos del carrito como una nueva columna, "Costo de Envío" al ver el carrito.

Lo que sucede es que el comprador podría decidir comprar, por ejemplo, tres productos diferentes donde cada uno de estos tres productos podría tener diferentes cálculos de costos de envío, después de presionar el botón "Agregar al carrito" tres veces.

Por ejemplo:

Las selecciones del Producto A calculan un Costo de Envío de $2.00
Las selecciones del Producto B calculan un Costo de Envío de $4.00
Las selecciones del Producto C calculan un Costo de Envío de $6.00

Entonces, según lo anterior, cuando el comprador haya terminado de comprar y presione "Ver Carrito", quiero que vea:

Artículo                    Precio      Costo de Envío      Cantidad          Total     
---------------------------------------------------------------------------------------
Producto A                      $10        $2                     1                 $10
Producto B                      $5         $4                     1                 $5
Producto C                      $15        $6                     1                 $15

Es la columna de campo personalizado "Costo de Envío" la que me gustaría agregar al carrito, que es lo que no estoy seguro de cómo hacer.

Además de lo anterior, también quiero agregar a los "Totales del Carrito" abajo, otro campo personalizado de "Costo de Envío" que totalizaría $12, que luego se agregaría al Total del Producto general, es decir:

Totales del Carrito

Subtotal del Carrito  $30
Costo de Envío       $12

Total del Pedido     $42

Parte del código que he utilizado para el costo de envío del Total del Carrito es:

function woo_add_cart_fee() {
  global $woocommerce;
  $woocommerce->cart->add_fee( __('Costo de Envío', 'woocommerce'), 100 );
}
add_action( 'woocommerce_before_calculate_totals', 'woo_add_cart_fee');

Entonces, necesito saber cómo agregar el "Costo de Envío" tanto a los Detalles del Producto del Carrito como a los Totales del Carrito.

Cualquier ayuda con el código sería muy apreciada.

Gracias.

7
Comentarios

¿Qué código has intentado hasta ahora?

Brad Dalton Brad Dalton
26 ene 2014 06:50:25

Hola, he actualizado mi publicación arriba pero he codificado manualmente 100, que no es lo que quiero sino calculado.

tonyf tonyf
26 ene 2014 07:24:40

Esta no es una pregunta de WordPress sino de WooCommerce, sería mejor que la preguntes en los canales de soporte del plugin ya que este tipo de preguntas generalmente están fuera de tema aquí

Mark Kaplun Mark Kaplun
26 ene 2014 07:25:37

Es extraño porque he visto muchas preguntas en este foro con la etiqueta de WooCommerce.

tonyf tonyf
26 ene 2014 07:27:04

sí, y la tasa de respuestas útiles no es mucho mayor que cero.

Mark Kaplun Mark Kaplun
26 ene 2014 11:09:21

Entonces Mark Kaplun, ¿podrías por favor ayudarme con mis preguntas? Realmente lo agradecería.

tonyf tonyf
26 ene 2014 12:45:57

créeme que si supiera la respuesta lo haría

Mark Kaplun Mark Kaplun
26 ene 2014 16:35:44
Mostrar los 2 comentarios restantes
Todas las respuestas a la pregunta 1
2

Primero, guarda el campo personalizado cuando edites tu producto. Digamos que estás usando el campo personalizado custom_shipping_cost. Asegúrate de que se guarde como un número, 20 por ejemplo, NO $20.00

Luego, necesitas mostrar este campo en la página del carrito. Lamentablemente, no hay un filtro para añadir una nueva columna en la tabla del carrito, así que necesitas editar el archivo de plantilla, o si no es necesario que sea una columna, puedes hacer esto en su lugar, este código añadirá el valor extra a la última columna:

add_filter('woocommerce_cart_item_subtotal','additional_shipping_cost',10,3);
function additional_shipping_cost($subtotal, $values, $cart_item_key) {
    //Obtener el valor del campo personalizado
    $custom_shipping_cost = get_post_meta($post->ID, 'custom_shipping_cost', true);

    //Solo para pruebas, puedes eliminar esta línea
    $custom_shipping_cost = 10;

    //Verificar si tenemos un costo de envío personalizado, si es así, mostrarlo debajo del precio del artículo
    if ($custom_shipping_cost) {
        return $subtotal.'<br>+'.woocommerce_price($custom_shipping_cost).' Costo de Envío';
    } else {
        return $subtotal;   
    }
}

Así que con esto, la primera parte de la pregunta está hecha. Si quieres mostrarlo como en tu ejemplo anterior, necesitas duplicar el archivo plugins/woocommerce/templates/cart/cart.php a themes/tutema/woocommerce/cart/cart.php. Luego edita el archivo, añade tu propia columna, puedes usar el código de arriba para mostrar el precio.

Después de esto, necesitamos actualizar los totales del carrito con los costos adicionales. Tu código con add_fee será útil:

function woo_add_cart_fee() {
    global $woocommerce;

    $extra_shipping_cost = 0;
    //Recorrer el carrito para encontrar los costos extra
    foreach ( $woocommerce->cart->get_cart() as $cart_item_key => $values ) {
        //Obtener la información del producto
        $_product = $values['data'];

        //Obtener el valor del campo personalizado
        $custom_shipping_cost = get_post_meta($_product->id, 'custom_shipping_cost', true);

        //Solo para pruebas, puedes eliminar esta línea
        $custom_shipping_cost = 10;

        //Sumando los costos extra
        $extra_shipping_cost = $extra_shipping_cost + $custom_shipping_cost;
    }

    //Verifiquemos si realmente tenemos un cargo, luego añadirlo
    if ($extra_shipping_cost) {
        $woocommerce->cart->add_fee( __('Costo de Envío', 'woocommerce'), $extra_shipping_cost );
    }
}
add_action( 'woocommerce_before_calculate_totals', 'woo_add_cart_fee');

Eso es todo, debería funcionar después de esto. Asegúrate de eliminar las líneas "Solo para pruebas..." de ambos códigos, no creé el campo personalizado en mi sitio para las pruebas.

26 ene 2014 14:06:31
Comentarios

Hola passatgt - Realmente agradezco tu ayuda y el excelente ejemplo con explicación. Intentaré lo que has sugerido y si está bien, ¿estaría bien si vuelvo a ti con cualquier problema?

tonyf tonyf
26 ene 2014 14:26:01

Si está relacionado con la pregunta original, ¡claro! :)

passatgt passatgt
26 ene 2014 14:34:11