Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function bonus_product() {
- if (is_admin()) return;
- //## OPTIONS
- $options = (object) array(
- 'bonus_product_id' => 1891, //bonus product to add
- 'required_products_id' => array(1873), //at least on of the specific product(s) needs to be represented in the cart
- );
- //function variables
- $cart_items = WC()->cart->get_cart();
- $bonus_product_found = false;
- $required_product_found = false;
- //check if the cart is not empty
- if(sizeof($cart_items) > 0) {
- //checking for required products. loop through the cart items
- foreach ($cart_items as $key => $item) {
- //bonus product already in the cart?
- if($item['product_id'] == $options->bonus_product_id) {
- $bonus_product_found = true;
- }
- //one of required products in the cart?
- if(in_array($item['product_id'], $options->required_products_id)) {
- $required_product_found = true;
- }
- }
- //adding/removing bonus product
- //add bonus product to the cart
- if(!$bonus_product_found && $required_product_found) {
- WC()->cart->add_to_cart($options->bonus_product_id);
- }
- //remove bonus product from the cart if none of required items is in the cart
- if($bonus_product_found && !$required_product_found) {
- $cart = WC()->instance()->cart;
- $cart_id = $cart->generate_cart_id($options->bonus_product_id);
- $cart_item_id = $cart->find_product_in_cart($cart_id);
- $cart->set_quantity($cart_item_id, 0);
- }
- }
- }
- add_action( 'init', 'bonus_product' );
- $bonus_options = (object) array(
- 'bonus_product_id' => 1891,
- 'required_products_id' => array( 1873 )
- );
- // this function called whenever there is a product added to cart
- function add_bonus_product( $cart_item_key, $product_id, $quantity, $variation_id, $variation, $cart_item_data ) {
- global $bonus_options;
- // is the product is eligible for bonus product?
- if( in_array( $product_id, $bonus_options->required_products_id) ) {
- // add the bonus product to cart
- WC()->cart->add_to_cart( $bonus_options->bonus_product_id, 1, 0, array(), array( "parent_product_line_item" => $cart_item_key ) );
- // later if user removes the product from cart we can use the "parent_product_line_item" to remove the bonus product as well
- }
- }
- add_action( 'woocommerce_add_to_cart', 'add_bonus_product', 10, 6 );
- // this function will be called whenever there is a product removed from cart
- function remove_bonus_product( $cart_item_key, $cart ) {
- $cart_items = WC()->cart->get_cart();
- foreach ( $cart_items as $key => $item ) {
- if( $item["parent_product_line_item"] == $cart_item_key ) {
- // ok this cart item is a bonus item to the product that being removed from the cart
- // So remove this too
- WC()->cart->remove_cart_item( $key );
- }
- }
- }
- add_action( 'woocommerce_cart_item_removed', 'remove_bonus_product', 10, 2 );
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement