• Никакой политики на форуме. Иначе - бан!
  • Вопрос без рабочей ссылки на проблему считается риторическим. Без ссылки и скриншота - провокацией!
  • Темы озаглавленные с маленькой буквы или капсом удаляются без предупреждения!

Заменить цену в корзине

malabarka

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

//Добавление Поля с оптовой ценой
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 ) на странице товара выводит заданное число
 
Сверху Снизу