I am unable to override price on second time purchase.
The use case would be: If a user has already bought product "944" then the price would be 0 for next time orders.
Meaning, the customer would pay only for first order of that specific product and it would be free for next orders.
Here my code:
// Enter the ID of the product that shouldn't be purchased again
$no_repeats_id = 944;
$no_repeats_product = wc_get_product( $no_repeats_id );
// Get the current product to check if purchasing should be disabled
global $product;
if ( $no_repeats_product->is_type( 'variation' ) ) {
// Bail if we're not looking at the product page for the non-purchasable product
if ( ! $no_repeats_product->parent->id === $product->id ) {
return;
}
// Render the purchase restricted message if we are
if ( wc_customer_bought_product( wp_get_current_user()->user_email, get_current_user_id(), $no_repeats_id ) ) {
sv_render_variation_non_purchasable_message( $product, $no_repeats_id );
}
} elseif ( $no_repeats_id === $product->id ) {
if ( wc_customer_bought_product( wp_get_current_user()->user_email, get_current_user_id(), $no_repeats_id ) ) {
// Create your message for the customer here
add_action( 'woocommerce_before_calculate_totals', 'add_custom_price' );
add_action( 'woocommerce_before_calculate_totals', 'add_custom_price' );
function add_custom_price( $cart_object ) {
$custom_price = 10; // This will be your custome price
$target_product_id = 944;
foreach ( $cart_object->cart_contents as $value ) {
if ( $value['product_id'] == $target_product_id ) {
$value['data']->price = $custom_price;
}
/*
// If your target product is a variation
if ( $value['variation_id'] == $target_product_id ) {
$value['data']->price = $custom_price;
}
*/
}
}
}
}
}
add_action( 'woocommerce_single_product_summary', 'sv_purchase_disabled_message', 31 );