Я не хотел публиковать здесь, но я не мог найти ответ, который я искал, и у меня нет достаточной репутации, чтобы комментировать другие ОЧЕНЬ ПОДОБНЫЕ вопросы, чтобы получить мой точный ответ.
Я нашел почти идеальный ответ на этот пост: WooCommerce: Добавить товар в корзину с ценовым переопределением?
с помощью кода:
add_action( 'woocommerce_before_calculate_totals', 'add_custom_price');
function add_custom_price( $cart_object ) {
$custom_price = 10; // This will be your custome price
foreach ( $cart_object->cart_contents as $key => $value ) {
$value['data']->price = $custom_price;
}
}
и он отлично работает... если вы установите жестко закодированную пользовательскую цену.
Мой вопрос: как я могу настроить пользовательскую цену на основе ввода пользователя?
Я пробовал все, что мог, чтобы передавать информацию (я даже пытался использовать файлы cookie, глобалы, сеансы), и никто из них не работал так, как я хотел, и все они были в BEST, hacks.
Конкретный продукт, о котором идет речь, является пожертвованием, и клиент хочет, чтобы пользователь мог установить цену пожертвования (а не просто создавать переменный продукт с установленными ценовыми точками).
На странице пожертвования, когда пользователь отправляет форму пожертвования, я добавляю продукт пожертвования в корзину так:
$donation_success = $woocommerce->cart->add_to_cart($donation_id);
Мой продукт пожертвования имеет установленную цену 0,00, поэтому, когда он добавляется в корзину, у него есть цена 0,00 (я не знаю, установлена ли цена в этот момент или позже).
Я попытался передать информацию в этой точке, используя последнюю переменную в методе add_to_cart, которая принимает массив аргументов, но я не мог заставить это работать.
Я уверен, что ответ прост, но я проработал несколько часов, чтобы сделать это правильно, и я не могу заставить его работать. У меня нет идей.
Фактический код, который я использую в данный момент, немного отличается от того, который был предложен ответчиком вышеупомянутого сообщения, но работает в основном так же:
add_action( 'woocommerce_before_calculate_totals', 'woo_add_donation');
function woo_add_donation() {
global $woocommerce;
$donation = 10;
foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
if($cart_item['data']->id == 358 || $cart_item['data']->id == 360){
$cart_item['data']->set_price($donation);
}
}
}
Заранее благодарим за полезные советы!