Поддержка WooCommerce Заменить цену в корзине

  • Добрый день!
    Знатоки, надеюсь кто-то поможет с кодом.
    Есть задача, что у каждого товара есть оптовая цена.
    Для этой цели введено дополнительное поле в админке на этапе заполнения товара

    //Добавление Поля с оптовой ценой
    function custom_woocommerce_product_options_pricing() {
        $price_index = '_custom_price';
    
        woocommerce_wp_text_input(
            array(
                'id' => $price_index,
                'value' => get_post_meta( get_the_ID(), $price_index, true ),
                'data_type' => 'price',
    			'type'   => 'number',
                'label' => __( 'Custom price', 'woocommerce' ) . ' (' . get_woocommerce_currency_symbol() . ')'
            )
        );
    }
    
    add_action( 'woocommerce_admin_process_product_object', 'custom_woocommerce_admin_process_product_object', 10, 1 );
    
    function custom_woocommerce_admin_process_product_object( $product ) {
        $price_index = '_custom_price';
    
        $price = wc_clean( wp_unslash( $_POST[ $price_index ] ) );
    
        update_post_meta( $product->get_id(), $price_index, $price );
    
    }

    В корзине пока додумался только на эксперимент с определенным товаром (нашел пример). В корзине проверяет по определенному товару на определенное количество, если все ок то цена меняется.

    function truemisha_quantity_based_price( $cart_object ) {
     
     	// вообще всегда можно сделать print_r( $cart_object ); exit; если что-то не ясно
     
    	$product_id = 93; // целевой ID товара с динамической ценой
    	$value_opt = intval(get_post_meta( get_the_ID(), $price_index, true  ));
     
    	// тут необязательно крутить foreach, но я вот решил сделать так
    	foreach ( $cart_object->get_cart() as $cart_id => $cart_item ) {
     
    		if( $cart_item[ 'product_id' ] == $product_id ) {
    			$quantity = $cart_item[ 'quantity' ];
    			break;
    		}
     
    	}
     
    	// если количество товара больше трёх, можно задать любое своё значение
    	if( ! empty( $quantity ) && $quantity > 3 ) {
     
    		// опять цикл, да
    		foreach ( $cart_object->get_cart() as $cart_id => $cart_item ) {
     
    			// если нужный товар
    			if( $cart_item['product_id'] == $product_id ) {
     
    				// я решил сделать скидку 50%
    				$newprice =  $cart_item['data']->get_regular_price()+100;
     
    				$cart_item['data']->set_price( $newprice );
     
    			}
     
    		}
    	}
     
    }

    Изменение на произвольную цену (число или изменение действующей цены) — всё работает.
    Но как мне отправить в корзину цену из заполненного поля для оптовой цены?
    Пробовал $cart_item[‘data’]->set_price( $newprice ) — выходит ошибка
    Пробовал $cart_item[‘data’]->set_price(intval(get_post_meta( get_the_ID(), $price_index, true )) выводит 0

    Хотя при проверке echo get_post_meta( get_the_ID(), $price_index, true ) на странице товара выводит заданное число

  • Тема «Заменить цену в корзине» закрыта для новых ответов.