Woocommerce: пользовательская цена, основанная на пользовательском вводе

Я не хотел публиковать здесь, но я не мог найти ответ, который я искал, и у меня нет достаточной репутации, чтобы комментировать другие ОЧЕНЬ ПОДОБНЫЕ вопросы, чтобы получить мой точный ответ.

Я нашел почти идеальный ответ с этой должности: 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, взломали.

Специфическим продуктом является пожертвование, и клиент хочет, чтобы пользователь мог установить цену пожертвования (а не просто создавать переменный продукт с установленными ценовыми точками).

На странице пожертвования, когда пользователь отправляет форму пожертвования, я добавляю продукт пожертвования в корзину так:

 $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); } } } 

Заранее благодарим за любой полезный совет!

Я нашел решение, которое не изящно, но работает для моих целей.

Я пытался использовать файлы cookie раньше, но я не установил путь к файлу cookie, поэтому он был доступен только на странице, на которой он был установлен.

Я теперь устанавливаю cookie с ценой пожертвования:

 setcookie("donation", $_GET['donation'], 0, "/"); 

Затем я устанавливаю цену так:

 add_action( 'woocommerce_before_calculate_totals', 'woo_add_donation'); function woo_add_donation() { global $woocommerce; foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) { if($cart_item['data']->id == 358 && ! empty($_COOKIE['donation'])){ $cart_item['data']->set_price($_COOKIE['donation']); } } } 

Я искал то же самое. Я нашел этот плагин WooCommerce (не бесплатный) для этого

Назовите свой плагин цены

Первоначально я не был уверен, какие поисковые термины использовать для поиска таких плагинов, но он выглядит так: «WooCommerce name your price» приводит ссылки на другие источники похожих плагинов.

[это комментарий] Где вы устанавливаете файл cookie? Мое первое предположение заключается в том, что обновляется на одной странице с использованием метода GET и предоставляет блок кода PHP с помощью $ _GET ['donation'], чтобы установить cookie с. И затем, как только cookie установлен, вы перенаправляете страницу на страницу Woocommerce Cart, чтобы продолжить процесс покупки. Если вы делаете это проще, пожалуйста, дайте мне знать. Благодарю.

Извините, я не мог опубликовать это как комментарий к выбранному ответу из-за отсутствия очков.