Agregar variable personalizada al contenido del carrito

20 mar 2014, 11:23:14
Vistas: 40.6K
Votos: 3

He agregado una variable personalizada en la página de detalles del producto y puedo pasar el valor de la variable personalizada a la función add to cart.

public function add_to_cart( $product_id, $quantity = 1, $mmCentre, $variation_id = '', $variation = '', $cart_item_data = array()  ) {
.........
.........
}

Entonces la variable $mmCentre es la variable personalizada. Ahora he hecho esto

$this->cart_contents[$cart_item_key] = apply_filters( 'woocommerce_add_cart_item', array_merge( $cart_item_data, array(
                    'product_id'    => $product_id,
                    'variation_id'  => $variation_id,
                    'variation'     => $variation,
                    'quantity'      => $quantity,
                    'data'          => $product_data,
                    'mmCentre'      => $mmCentre
                ) ), $cart_item_key );

El problema es que no puedo obtener ese valor en la página del carrito. Hice un dump de cart_contents pero no puedo ver el valor pasado en el array.

¿Pueden sugerirme qué estoy haciendo mal?

2
Comentarios

¿$mmid es un nuevo campo de formulario dentro del formulario de agregar al carrito?

passatgt passatgt
20 mar 2014 11:32:21

Sí, $mmid es un nuevo campo de formulario. Puedo ver el valor que se pasa a la función add_to_cart pero no puedo obtenerlo a través de la página del carrito.

Prithviraj Mitra Prithviraj Mitra
20 mar 2014 11:33:30
Todas las respuestas a la pregunta 1
2
16

Tuve que hacer algo similar hace un tiempo, esto es lo que funcionó para mí:

En el ejemplo, el nombre del campo personalizado es "test_field" dentro del formulario de añadir al carrito, y de esta manera cuando haces un dump de cart_contents, puedes ver el valor al final

// Almacenar el campo personalizado
add_filter( 'woocommerce_add_cart_item_data', 'add_cart_item_custom_data_vase', 10, 2 );
function add_cart_item_custom_data_vase( $cart_item_meta, $product_id ) {
  global $woocommerce;
  $cart_item_meta['test_field'] = $_POST['test_field'];
  return $cart_item_meta; 
}

// Obtenerlo de la sesión y añadirlo a la variable del carrito
function get_cart_items_from_session( $item, $values, $key ) {
    if ( array_key_exists( 'test_field', $values ) )
        $item[ 'mmCentre' ] = $values['test_field'];
    return $item;
}
add_filter( 'woocommerce_get_cart_item_from_session', 'get_cart_items_from_session', 1, 3 );
20 mar 2014 11:49:01
Comentarios

Muchas gracias por tu sugerencia. Lo intentaré esta noche ya que no tengo acceso a los archivos. Te avisaré sobre el resultado. Pero creo que funcionará.

Prithviraj Mitra Prithviraj Mitra
20 mar 2014 12:23:47

Increíble. Ahora está funcionando. Muchas gracias por tu ayuda, compañero.

Prithviraj Mitra Prithviraj Mitra
21 mar 2014 00:36:04