Este enfoque podría ser relevante para ofertas promocionales específicas (por ejemplo, Bloque) o paquetes de productos codificados personalizados. En este caso, es posible que desee eliminar un segundo elemento del carrito, programáticamente, una vez que se elimina un producto.
Por supuesto, se necesita una relación entre los dos elementos de carrito a través de meta datos de elementos de carrito personalizado (por ejemplo, el elemento «Bundled» deberá especificar la identificación del producto «base» en el carrito dentro de un meta de elemento de carrito personalizado, por lo tanto, que podemos «escuchar» a su eliminación).
Alternativamente, Puede verificar si un par de identificaciones de productos están en el carrito, y si se elimina uno de ellos, eliminaremos automáticamente el otro – Este es el estudio de caso que pasaremos hoy, ya que es mucho más fácil.
¡Disfrutar!
Php Snippet: elimine la identificación del producto cuando se elimina otra identificación del producto @ WooCommerce Cart
Este fragmento de código asegura que cuando un cliente elimina un producto de su carrito de WooCommerce que forma parte de un paquete, el otro producto en el paquete también se elimina automáticamente.
El código usa add_action
para enganchar el bbloomer_remove_bundle_from_cart
función para el woocommerce_remove_cart_item
acción. Esto significa que cada vez que se retira un producto del carrito, el bbloomer_remove_bundle_from_cart
la función se activará.
bbloomer_remove_bundle_from_cart
la función toma dos argumentos, uno de los cuales es $removed_cart_item_key
que contiene la clave única del producto que se acaba de eliminar.
La función define una matriz $bundle_ids
que contiene los ID de los productos considerados parte del paquete. Luego verifica si la identificación del producto eliminado (usando $cart_item['product_id']
) existe dentro del $bundle_ids
formación.
Si el producto eliminado es parte de un paquete, la función recupera la identificación del otro producto en el paquete usando array_diff
y reset
. Luego genera una ID de carrito única para el producto y verificación restante si ya está presente en el carrito. Si se encuentra el otro producto, elimina ese producto del carro usando WC()->cart->remove_cart_item
.
El código agrega un aviso al usuario que les informa que ambos productos fueron eliminados ya que se venden juntos; consulte la captura de pantalla a continuación.
/** * @snippet Programmatically Remove Second Item From WooCommerce Cart * @how-to businessbloomer.com/woocommerce-customization * @author Rodolfo Melogli, Business Bloomer * @compatible WooCommerce 9 * @community https://businessbloomer.com/club/ */ add_action( 'woocommerce_remove_cart_item', 'bbloomer_remove_bundle_from_cart', 9999, 2 ); function bbloomer_remove_bundle_from_cart( $removed_cart_item_key, $cart ) { $bundle_ids = array( 123, 456 ); // BUNDLE PRODUCT IDS $cart_item = WC()->cart->get_cart_item( $removed_cart_item_key ); // GET PRODUCT REMOVED if ( in_array( $cart_item['product_id'], $bundle_ids ) ) { $other_product_id = reset( array_diff( $bundle_ids, array( $cart_item['product_id'] ) ) ); // GET ME THE OTHER ID $product_cart_id = WC()->cart->generate_cart_id( $other_product_id ); $in_cart = WC()->cart->find_product_in_cart( $product_cart_id ); if ( $in_cart ) { remove_action( 'woocommerce_remove_cart_item', 'bbloomer_remove_bundle_from_cart', 9999, 2 ); WC()->cart->remove_cart_item( $in_cart ); wc_add_notice( 'Note: both products have been removed since they are sold together.', 'error'); add_action( 'woocommerce_remove_cart_item', 'bbloomer_remove_bundle_from_cart', 9999, 2 ); } } }