Установите цену товара в корзину WooCommerce до нуля, если продукт уже куплен

Я не могу переопределить цену во второй раз.

Вариант использования: если пользователь уже приобрел продукт «944», тогда цена будет равна 0 для последующих заказов времени.

Смысл, клиент будет платить только за первый заказ этого конкретного продукта, и он будет бесплатным для следующих заказов.

Вот мой код:

// 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 ); 

Вот способ заставить его работать в woocommerce 3+ тоже:

 add_action( 'woocommerce_before_calculate_totals', 'conditionally_change_cart_items_price', 10, 1 ); function conditionally_change_cart_items_price( $cart_object ) { if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return; // Set Here your targeted product ID $targeted_product_id = 944; // Set Here your custom price (1st purshase) $custom_price = 10; // First purshase for product ID 944 // Detecting if customer has already bought The targeted product (944) if( is_user_logged_in() ){ $customer = wp_get_current_user(); $customer_id = $customer->ID; // customer ID $customer_email = $customer->email; // customer email if( wc_customer_bought_product( $customer_email, $customer_id, $targeted_product_id) ) $custom_price = 0; // Set to 0 for other purchases (product ID 944) } foreach ( $cart_object->get_cart() as $cart_item ) { // When targeted product is in cart we change the price if ( $cart_item['product_id'] == $targeted_product_id ) { // Woocommerce 3+ compatibility if ( version_compare( WC_VERSION, '3.0', '<' ) ) $cart_item['data']->price = $custom_price; else $cart_item['data']->set_price( $custom_price ); } } } 

Код идет в файле function.php вашей активной дочерней темы (или темы), а также в любом файле плагина.

Этот код проверен и работает даже в WooCommerce 3+