Как перехватывать данные формы оформления заказа из своего плагина?
Здравствуйте сразу к сути есть страница оформления заказа в ней форма и в ней есть несколко вариантов выбора доставки доставки сделанных с помощю радио-буттонов я пытаюсь получить значение этих буттонов и сравнив определить сумму оплаты но со страницы своего плагина я не получаю значение пробовал и$_POST и $_GET Value упорно не видит вот код обработчик
$shipping_radio_button=$_GET['shipping_method[0]']; if ( $shipping_radio_button==20) { $s_args['amount'] = 190*100; } else if ( $shipping_radio_button==19) { $s_args['amount'] = 160*100; } else if ( $shipping_radio_button==21) { $s_args['amount'] = 350*100; } |
$shipping_radio_button=$_GET['shipping_method[0]']; if ( $shipping_radio_button==20) { $s_args['amount'] = 190*100; } else if ( $shipping_radio_button==19) { $s_args['amount'] = 160*100; } else if ( $shipping_radio_button==21) { $s_args['amount'] = 350*100; }
и
вот HTML
<form name="checkout" method="post" class="checkout woocommerce-checkout" action="https://afbshop.ru/checkout/" enctype="multipart/form-data" novalidate="novalidate"> <th>Доставка</th> <td data-title="Доставка"> <ul id="shipping_method" class="woocommerce-shipping-methods"> <li> <input type="radio" name="shipping_method[0]" data-index="0" id="shipping_method_0_local_pickup18" value="local_pickup:18" class="shipping_method"><label for="shipping_method_0_local_pickup18">Самовывоз</label> </li> <li> <input type="radio" name="shipping_method[0]" data-index="0" id="shipping_method_0_flat_rate19" value="flat_rate:19" class="shipping_method" checked="checked"><label for="shipping_method_0_flat_rate19">Доставка по Санкт-Петербургу: <span class="woocommerce-Price-amount amount"><bdi>160<span class="woocommerce-Price-currencySymbol">₽</span></bdi></span></label> </li> <li> <input type="radio" name="shipping_method[0]" data-index="0" id="shipping_method_0_flat_rate20" value="flat_rate:20" class="shipping_method"><label for="shipping_method_0_flat_rate20">Доставка по г. Москва: <span class="woocommerce-Price-amount amount"><bdi>190<span class="woocommerce-Price-currencySymbol">₽</span></bdi></span></label> </li> <li> <input type="radio" name="shipping_method[0]" data-index="0" id="shipping_method_0_flat_rate21" value="flat_rate:21" class="shipping_method"><label for="shipping_method_0_flat_rate21">Доставка по ЛО и МО: <span class="woocommerce-Price-amount amount"><bdi>350<span class="woocommerce-Price-currencySymbol">₽</span></bdi></span></label> </li> <li> <input type="radio" name="shipping_method[0]" data-index="0" id="shipping_method_0_local_pickup4" value="local_pickup:4" class="shipping_method"><label for="shipping_method_0_local_pickup4">Доставка по миру (Рассчитывается индивидуально)</label> </li> </ul> </td> <button type="submit" class="button alt" name="woocommerce_checkout_place_order" id="place_order" value="Подтвердить заказ" data-value="Подтвердить заказ">Подтвердить заказ</button> <input type="hidden" id="woocommerce-process-checkout-nonce" name="woocommerce-process-checkout-nonce" value="32a756a625"><input type="hidden" name="_wp_http_referer" value="/?wc-ajax=update_order_review"> </div> </div> </div> </form> |
<form name="checkout" method="post" class="checkout woocommerce-checkout" action="https://afbshop.ru/checkout/" enctype="multipart/form-data" novalidate="novalidate"> <th>Доставка</th> <td data-title="Доставка"> <ul id="shipping_method" class="woocommerce-shipping-methods"> <li> <input type="radio" name="shipping_method[0]" data-index="0" id="shipping_method_0_local_pickup18" value="local_pickup:18" class="shipping_method"><label for="shipping_method_0_local_pickup18">Самовывоз</label> </li> <li> <input type="radio" name="shipping_method[0]" data-index="0" id="shipping_method_0_flat_rate19" value="flat_rate:19" class="shipping_method" checked="checked"><label for="shipping_method_0_flat_rate19">Доставка по Санкт-Петербургу: <span class="woocommerce-Price-amount amount"><bdi>160<span class="woocommerce-Price-currencySymbol">₽</span></bdi></span></label> </li> <li> <input type="radio" name="shipping_method[0]" data-index="0" id="shipping_method_0_flat_rate20" value="flat_rate:20" class="shipping_method"><label for="shipping_method_0_flat_rate20">Доставка по г. Москва: <span class="woocommerce-Price-amount amount"><bdi>190<span class="woocommerce-Price-currencySymbol">₽</span></bdi></span></label> </li> <li> <input type="radio" name="shipping_method[0]" data-index="0" id="shipping_method_0_flat_rate21" value="flat_rate:21" class="shipping_method"><label for="shipping_method_0_flat_rate21">Доставка по ЛО и МО: <span class="woocommerce-Price-amount amount"><bdi>350<span class="woocommerce-Price-currencySymbol">₽</span></bdi></span></label> </li> <li> <input type="radio" name="shipping_method[0]" data-index="0" id="shipping_method_0_local_pickup4" value="local_pickup:4" class="shipping_method"><label for="shipping_method_0_local_pickup4">Доставка по миру (Рассчитывается индивидуально)</label> </li> </ul> </td> <button type="submit" class="button alt" name="woocommerce_checkout_place_order" id="place_order" value="Подтвердить заказ" data-value="Подтвердить заказ">Подтвердить заказ</button> <input type="hidden" id="woocommerce-process-checkout-nonce" name="woocommerce-process-checkout-nonce" value="32a756a625"><input type="hidden" name="_wp_http_referer" value="/?wc-ajax=update_order_review"> </div> </div> </div> </form>
Дополнительно:
Ответы:
Попробуйте
$shipping_radio_button=$_POST['shipping_method'][0]; |
$shipping_radio_button=$_POST['shipping_method'][0];
- Не помогает
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
На странице оформления заказа WooCommerce данные способа доставки не нужно брать из
$_GET. Во время checkout они передаются через POST/AJAX и хранятся в сессии WooCommerce. Поэтому код вида$_GET['shipping_method[0]']работать стабильно не будет.Если Вам нужно менять стоимость или добавить комиссию в зависимости от выбранной доставки, используйте
woocommerce_cart_calculate_fees:add_action('woocommerce_cart_calculate_fees', function ($cart) { if (is_admin() && !defined('DOING_AJAX')) { return; } $chosen = WC()->session->get('chosen_shipping_methods'); $method = is_array($chosen) ? reset($chosen) : ''; if (strpos($method, 'local_pickup') !== false) { $cart->add_fee('Доплата за обработку', 300); } });
Если нужно сохранить выбранный способ доставки в заказ, используйте хуки создания заказа, например
woocommerce_checkout_create_order. Если нужно изменить доступные методы доставки, используйтеwoocommerce_package_rates.На фронте после выбора radio WooCommerce обычно сам вызывает обновление checkout. Если кастомная разметка мешает, можно принудительно вызвать:
jQuery(function ($) { $(document.body).on('change', 'input[name^="shipping_method"]', function () { $(document.body).trigger('update_checkout'); }); });jQuery(function ($) { $(document.body).on('change', 'input[name^="shipping_method"]', function () { $(document.body).trigger('update_checkout'); }); });
Главное: не рассчитывайте цену на стороне JavaScript и не доверяйте значениям из формы. Итоговая сумма должна считаться на сервере через хуки WooCommerce.