Un elemento de fidelización en cualquier tienda online podría ser añadir un producto, preferentemente gratuito, al carrito de cualquier visitante solo por el hecho de haber llegado a tu ecommerce, así que vamos a ver cómo lograrlo.
Índice de contenidos
Añadir un producto automáticamente al carrito
Para conseguir esto primero necesitas identificar el ID del producto que quieres añadir al carrito. Para ello ve a la lista de productos en el escritorio de tu WordPress y en el listado los verás al pasar el cursor sobre cualquier producto.
Una vez localizado el producto que quieres añadir automáticamente al carrito es el momento de crear la función que hará la magia.
Para ello añade un código como el siguiente a tu plugin de funcionalidades, o si lo prefieres en el archivo functions.php del tema activo:
/** Añadir producto al carrito al visitar la tienda **/ add_action( 'template_redirect', 'add_product_to_cart' ); function add_product_to_cart() { if ( ! is_admin() ) { $product_id = 54; //El ID del producto $found = false; //primero comprobamos que no esté ya en el carrito if ( sizeof( WC()->cart->get_cart() ) > 0 ) { foreach ( WC()->cart->get_cart() as $cart_item_key => $values ) { $_product = $values['data']; if ( $_product->id == $product_id ) $found = true; } // si no está el producto ya se añade if ( ! $found ) WC()->cart->add_to_cart( $product_id ); } else { // si no hay productos en el carrito se añade WC()->cart->add_to_cart( $product_id ); } } }
Lo único que tienes que hacer para adaptarlo a tu tienda es modificar el ID del producto, que en el ejemplo es el 54, como en la captura anterior.
Lo que hace el código es definir el ID de producto a añadir, a continuación comprueba que no esté ya en el carrito, para no añadirlo 2 veces, y si no está se añade automáticamente.
Eso sí, no te sorprendas de un comportamiento extraño, y es que si el cliente quiere borrar el producto del carrito, sí, se borra, pero al instante se vuelve a añadir automáticamente, como si entrase en bucle.
Vamos, que es un truco ideal para añadir productos gratuitos.
Añadir un producto automáticamente al carrito a partir de un gasto concreto
Otra posibilidad es que, en vez de añadir el producto automáticamente solo por visitar tu tienda lo hagas cuando el carrito del cliente haga un gasto determinado, como premio a su fidelidad.
Para ello, de nuevo, tienes que crear una función con el ID del producto a añadir automáticamente al carrito y, además, en esta ocasión definir el importe mínimo del carrito para que se añada el producto. Algo así:
/** Añadir producto al carrito dependiendo del montante **/ add_action( 'init', 'add_product_to_cart' ); function add_product_to_cart() { if ( ! is_admin() ) { global $woocommerce; $product_id = 54; //ID del producto $found = false; $cart_total = 50; //Importe total mínimo del carrito if( $woocommerce->cart->total >= $cart_total ) { //Comprobamos que el producto no esté ya en el carrito if ( sizeof( $woocommerce->cart->get_cart() ) > 0 ) { foreach ( $woocommerce->cart->get_cart() as $cart_item_key => $values ) { $_product = $values['data']; if ( $_product->id == $product_id ) $found = true; } // si no está el producto en el carrito lo añadimos if ( ! $found ) $woocommerce->cart->add_to_cart( $product_id ); } else { // si no hay productos en el carrito lo añadimos $woocommerce->cart->add_to_cart( $product_id ); } } } }
Ah, y no se te olvide guardar los cambios en el archivo, jeje.
¿Te gustó este artículo? ¡Ni te imaginas lo que te estás perdiendo en YouTube!
Hola Fernando,
Veo que en un caso has utilizado el hook «template_redirect» y en otro «init». ¿Es por algún motivo en concreto? Gracias.
En realidad no, de hecho yo suelo usar más template_redirect en estos casos
Brutal Fernando, menudos tips!, este va a encantar a los dos clientes a los que les estoy desarrollando tienda ahora mismo.
Gracias por el aporte.
De nada, a mandar 🙂
Buenos días! he introducido este código en functions.php pero al comprobar si efectivamente se añadía el producto al carrito no aparece nada. He cambiado el SKU y el importe de compra mínimo, pero tras introducir varios productos para llegar a importe requerido no aparece automáticamente el producto de regalo. Qué puedo estar haciendo mal?
Encontre esta funcion que me anduvo, incluso si el precio del carrito cambia quita el producto del mismo. Lo que no se puede hacer es quitar el producto por mas que el precio no baje.
/*
* Automatically adding the catalog to the cart when cart total amount reach to $25.
*/
function aapc_add_product_to_cart() {
global $woocommerce;
$cart_total = 25;
if ( $woocommerce->cart->total >= $cart_total ) {
if ( ! is_admin() ) {
$free_product_id = 101861; // Product Id of the free product which will get added to cart
$found = false;
//check if product already in cart
if ( sizeof( WC()->cart->get_cart() ) > 0 ) {
foreach ( WC()->cart->get_cart() as $cart_item_key => $values ) {
$_product = $values[‘data’];
if ( $_product->get_id() == $free_product_id )
$found = true;
}
// if product not found, add it
if ( ! $found )
WC()->cart->add_to_cart( $free_product_id );
} else {
// if no products in cart, add it
WC()->cart->add_to_cart( $free_product_id );
}
}
}
}
add_action( ‘template_redirect’, ‘aapc_add_product_to_cart’ );
add_action( ‘template_redirect’, ‘remove_product_from_cart’ );
function remove_product_from_cart() {
// Run only in the Cart or Checkout Page
global $woocommerce;
$current = WC()->cart->cart_contents_total;
$min_amount= 25;
$prod_to_remove = 101861;
if ( $current < $min_amount) { if( is_cart() || is_checkout() ) { // Cycle through each product in the cart foreach( WC()->cart->cart_contents as $prod_in_cart ) {
// Get the Variation or Product ID
$prod_id = ( isset( $prod_in_cart[‘variation_id’] ) &&
$prod_in_cart[‘variation_id’] != 0 ) ? $prod_in_cart[‘variation_id’] : $prod_in_cart[‘product_id’];
// Check to see if IDs match
if( $prod_to_remove == $prod_id ) {
// Get it’s unique ID within the Cart
$prod_unique_id = WC()->cart->generate_cart_id( $prod_id );
// Remove it from the cart by un-setting it
unset( WC()->cart->cart_contents[$prod_unique_id] );
}
}
}
}
}
Hola Fernando,
Como se podria modificar el codigo para que cuando un cliente añada un producto determinado en el carrito, se incluya otro de forma automática
Es decir, que cuando el cliente introduzca el «Producto A» en su carrito, se sume también el «Producto B».
se que se deben utilizar: $product_id y $extra_product_id