0
votes

With WooCommerce, I am using WooCommerce bookings and WooCommerce force sells plugins.

I want to use WooCommerce Force Sells to add one force-sold item per number of person in a booking.

Woocommerce guys already provided a snippet to be added in functions.php which modifies the behavior of Force Sells. With this snippet you can set a fixed quantity (1) of side product to be added :

// only add one force sell item per product no matter how many of the original product are added

function my_wc_force_sell_add_to_cart_product( $product ){

    $product['quantity'] = 1;

    return $product;

}

add_filter( 'wc_force_sell_add_to_cart_product', 'my_wc_force_sell_add_to_cart_product' );


// when a synced force sell product is updated always set it to 1

function my_wc_force_sell_update_quantity( $quantity, $product ){

    return 1;

}

add_filter( 'wc_force_sell_update_quantity', 'my_wc_force_sell_update_quantity' );

What I would like to do: Replacing the fixed quantity (1) with a function retrieving the number of people specified in the booking.

Any help would be awesome.

1

1 Answers

0
votes

I think I found it !

function my_wc_force_sell_add_to_cart_product( $product ){
    foreach(WC()->cart->get_cart() as $cart_item) {
    // The item persons count
    $person = array_sum( $cart_item['booking']['_persons'] );
}
    $product['quantity'] = $person;
    return $product;
}
add_filter( 'wc_force_sell_add_to_cart_product', 'my_wc_force_sell_add_to_cart_product' );

// when a synced force sell product is updated always set it to 1
function my_wc_force_sell_update_quantity( $quantity, $product ){
    return 1;
}
add_filter( 'wc_force_sell_update_quantity', 'my_wc_force_sell_update_quantity' );