I am using WooCommerce Memberships and want to extend a free membership to first time members if they purchase a specific product. I can get some of this to work separately, but am having trouble getting it to all come together.
There is also a sale price on the item they have to purchase, so I am also checking the dates to see if the item is in the sale window. That part is working.
It seems that when I add the argument to check if the item is in the cart, this whole thing breaks. If I run the two functions separately, they both work.
function mps_registration_price($cart_object) {
global $post, $product;
// Bail if memberships is not active
if ( ! function_exists( 'wc_memberships' ) ) {
return;
}
$user_id = get_current_user_id();
date_default_timezone_set("America/Chicago");
$today = time();
// Check if user was never a member
if ( !wc_memberships_get_user_memberships( $user_id )) {
if( mps_check_for_product() ) {
foreach ( $cart_object->get_cart() as $cart_item ) {
// get the product id (or the variation id)
$id = $cart_item['data']->get_id();
if($id == 17) {
$salePrice = get_post_meta($id, '_sale_price', true);
$saleFrom = get_post_meta($id, '_sale_price_dates_from', true);
$saleTo = get_post_meta($id, '_sale_price_dates_to', true);
if( !empty($salePrice) && $today >= $saleFrom && $today <= $saleTo ) {
$new_price = $salePrice;
} else {
$new_price = get_post_meta($id, '_regular_price', true);
}
// Updated cart item price
$cart_item['data']->set_price( $new_price );
}
}
} else {
foreach ( $cart_object->get_cart() as $cart_item ) {
// get the product id (or the variation id)
$id = $cart_item['data']->get_id();
if($id == 17) {
$salePrice = get_post_meta($id, '_sale_price', true);
$saleFrom = get_post_meta($id, '_sale_price_dates_from', true);
$saleTo = get_post_meta($id, '_sale_price_dates_to', true);
if( !empty($salePrice) && $today >= $saleFrom && $today <= $saleTo ) {
$new_price = $salePrice + 50;
} else {
$new_price = get_post_meta($id, '_regular_price', true);
}
// Updated cart item price
$cart_item['data']->set_price( $new_price );
}
}
}
}
}
add_filter( 'woocommerce_before_calculate_totals', 'mps_registration_price', 10, 1 );
function mps_check_for_product() {
$product_id = 11;
$product_cart_id = WC()->cart->generate_cart_id( $product_id );
$in_cart = WC()->cart->find_product_in_cart( $product_cart_id );
if ( $in_cart ) {
return true;
} else {
return false;
}
}
add_action('woocommerce_before_cart', 'mps_check_for_product');