Как получить значение выбранного radio в заказе woocommerce?
На странице checkout добавил элемент выбора филиала из 2х радио кнопок.
пытаюсь получить значение выбора этих радио вот так:
$data = $order->get_data(); $value = $data['billing']['billing_vybor_fila']['options']; |
$data = $order->get_data(); $value = $data['billing']['billing_vybor_fila']['options'];
Не выходит.
при этом если просто стандартное поле получить.
$data['billing']['first_name'];
Работает как нужно.
вывел var_dump, вроде бы все правильно пытался. В чем ошибка?
["billing_vybor_fila"]=> array(85) { ["type"]=> string(5) "radio" ["name"]=> string(18) "billing_vybor_fila" ["label"]=> string(0) "" ["description"]=> string(0) "" ["label_class"]=> array(0) { } ["input_class"]=> array(0) { } ["default"]=> string(0) "" ["validate"]=> array(0) { } ["autocomplete"]=> string(0) "" ["hidden"]=> string(0) "" ["input_mask"]=> string(0) "" ["placeholder"]=> string(0) "" ["class"]=> array(1) { [0]=> string(13) "form-row-wide" } ["order_meta"]=> string(3) "yes" ["user_meta"]=> int(0) ["disable_select2"]=> int(0) ["checked"]=> string(0) "" ["required"]=> bool(true) ["clear"]=> int(0) ["enabled"]=> string(3) "yes" ["price"]=> string(0) "" ["price_type"]=> string(0) "" ["price_unit"]=> int(0) ["taxable"]=> string(2) "no" ["tax_class"]=> string(0) "" ["title"]=> string(0) "" ["title_type"]=> string(0) "" ["title_color"]=> string(0) "" ["title_class"]=> array(0) { } ["subtitle"]=> string(0) "" ["subtitle_type"]=> string(0) "" ["subtitle_color"]=> string(0) "" ["subtitle_class"]=> array(0) { } ["minlength"]=> string(0) "" ["maxlength"]=> string(0) "" ["repeat_x"]=> int(1) ["repeat_rules"]=> string(0) "" ["rpt_name_suffix"]=> string(6) "number" ["rpt_label_suffix"]=> string(6) "number" ["rpt_incl_parent"]=> string(0) "" ["inherit_display_rule"]=> int(1) ["inherit_display_rule_ajax"]=> int(1) ["auto_adjust_display_rule_ajax"]=> int(1) ["maxsize"]=> string(0) "" ["accept"]=> string(0) "" ["date_format"]=> string(0) "" ["default_date"]=> string(0) "" ["max_date"]=> string(0) "" ["min_date"]=> string(0) "" ["year_range"]=> string(0) "" ["number_months"]=> string(0) "" ["disabled_days"]=> string(0) "" ["disabled_dates"]=> string(0) "" ["html_default_datetime"]=> string(0) "" ["min_html_datetime"]=> string(0) "" ["max_html_datetime"]=> string(0) "" ["html_default_date"]=> string(0) "" ["min_html_date"]=> string(0) "" ["max_html_date"]=> string(0) "" ["html_default_time"]=> string(0) "" ["min_html_time"]=> string(0) "" ["max_html_time"]=> string(0) "" ["html_default_month"]=> string(0) "" ["min_html_month"]=> string(0) "" ["max_html_month"]=> string(0) "" ["html_default_week"]=> string(0) "" ["min_html_week"]=> string(0) "" ["max_html_week"]=> string(0) "" ["min_time"]=> string(0) "" ["max_time"]=> string(0) "" ["start_time"]=> string(0) "" ["time_step"]=> string(0) "" ["time_format"]=> string(0) "" ["linked_date"]=> string(0) "" ["disable_time_slot"]=> string(0) "" ["country_field"]=> string(0) "" ["country"]=> string(0) "" ["show_in_my_account_page"]=> int(0) ["custom"]=> int(1) ["priority"]=> int(140) ["options"]=> array(2) { ["bunin"]=> string(18) "Бунинская" ["prag"]=> string(16) "Пражская" } ["options_object"]=> array(2) { ["bunin"]=> array(4) { ["key"]=> string(5) "bunin" ["text"]=> string(18) "Бунинская" ["price"]=> string(0) "" ["price_type"]=> string(0) "" } ["prag"]=> array(4) { ["key"]=> string(4) "prag" ["text"]=> string(16) "Пражская" ["price"]=> string(0) "" ["price_type"]=> string(0) "" } } ["rules_action"]=> string(4) "show" ["rules"]=> string(0) "" ["has_non_ajax_rules"]=> bool(false) } } |
["billing_vybor_fila"]=> array(85) { ["type"]=> string(5) "radio" ["name"]=> string(18) "billing_vybor_fila" ["label"]=> string(0) "" ["description"]=> string(0) "" ["label_class"]=> array(0) { } ["input_class"]=> array(0) { } ["default"]=> string(0) "" ["validate"]=> array(0) { } ["autocomplete"]=> string(0) "" ["hidden"]=> string(0) "" ["input_mask"]=> string(0) "" ["placeholder"]=> string(0) "" ["class"]=> array(1) { [0]=> string(13) "form-row-wide" } ["order_meta"]=> string(3) "yes" ["user_meta"]=> int(0) ["disable_select2"]=> int(0) ["checked"]=> string(0) "" ["required"]=> bool(true) ["clear"]=> int(0) ["enabled"]=> string(3) "yes" ["price"]=> string(0) "" ["price_type"]=> string(0) "" ["price_unit"]=> int(0) ["taxable"]=> string(2) "no" ["tax_class"]=> string(0) "" ["title"]=> string(0) "" ["title_type"]=> string(0) "" ["title_color"]=> string(0) "" ["title_class"]=> array(0) { } ["subtitle"]=> string(0) "" ["subtitle_type"]=> string(0) "" ["subtitle_color"]=> string(0) "" ["subtitle_class"]=> array(0) { } ["minlength"]=> string(0) "" ["maxlength"]=> string(0) "" ["repeat_x"]=> int(1) ["repeat_rules"]=> string(0) "" ["rpt_name_suffix"]=> string(6) "number" ["rpt_label_suffix"]=> string(6) "number" ["rpt_incl_parent"]=> string(0) "" ["inherit_display_rule"]=> int(1) ["inherit_display_rule_ajax"]=> int(1) ["auto_adjust_display_rule_ajax"]=> int(1) ["maxsize"]=> string(0) "" ["accept"]=> string(0) "" ["date_format"]=> string(0) "" ["default_date"]=> string(0) "" ["max_date"]=> string(0) "" ["min_date"]=> string(0) "" ["year_range"]=> string(0) "" ["number_months"]=> string(0) "" ["disabled_days"]=> string(0) "" ["disabled_dates"]=> string(0) "" ["html_default_datetime"]=> string(0) "" ["min_html_datetime"]=> string(0) "" ["max_html_datetime"]=> string(0) "" ["html_default_date"]=> string(0) "" ["min_html_date"]=> string(0) "" ["max_html_date"]=> string(0) "" ["html_default_time"]=> string(0) "" ["min_html_time"]=> string(0) "" ["max_html_time"]=> string(0) "" ["html_default_month"]=> string(0) "" ["min_html_month"]=> string(0) "" ["max_html_month"]=> string(0) "" ["html_default_week"]=> string(0) "" ["min_html_week"]=> string(0) "" ["max_html_week"]=> string(0) "" ["min_time"]=> string(0) "" ["max_time"]=> string(0) "" ["start_time"]=> string(0) "" ["time_step"]=> string(0) "" ["time_format"]=> string(0) "" ["linked_date"]=> string(0) "" ["disable_time_slot"]=> string(0) "" ["country_field"]=> string(0) "" ["country"]=> string(0) "" ["show_in_my_account_page"]=> int(0) ["custom"]=> int(1) ["priority"]=> int(140) ["options"]=> array(2) { ["bunin"]=> string(18) "Бунинская" ["prag"]=> string(16) "Пражская" } ["options_object"]=> array(2) { ["bunin"]=> array(4) { ["key"]=> string(5) "bunin" ["text"]=> string(18) "Бунинская" ["price"]=> string(0) "" ["price_type"]=> string(0) "" } ["prag"]=> array(4) { ["key"]=> string(4) "prag" ["text"]=> string(16) "Пражская" ["price"]=> string(0) "" ["price_type"]=> string(0) "" } } ["rules_action"]=> string(4) "show" ["rules"]=> string(0) "" ["has_non_ajax_rules"]=> bool(false) } }
Дополнительно
Ответы:
Попробуйте так
$data = $order->get_data(); $selected_value = $data['billing']['billing_vybor_fila']; if ($selected_value == 'bunin') { // была выбрана кнопка "bunin" } elseif ($selected_value == 'prag') { // была выбрана кнопка "prag" } else { // ни одна из кнопок не была выбрана } |
$data = $order->get_data(); $selected_value = $data['billing']['billing_vybor_fila']; if ($selected_value == 'bunin') { // была выбрана кнопка "bunin" } elseif ($selected_value == 'prag') { // была выбрана кнопка "prag" } else { // ни одна из кнопок не была выбрана }
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Ошибка в том, что вы смотрите не выбранное значение, а описание checkout-поля: его тип, label, options, required и другие настройки. В заказе выбранное radio не будет лежать в
$data['billing']['billing_vybor_fila']['options'].options— это список возможных вариантов, а не ответ покупателя. Пользовательский checkout field нужно сохранить в meta заказа, а потом читать именно meta.При оформлении заказа сохраните значение из
$_POST:add_action('woocommerce_checkout_create_order', function ($order) { if (isset($_POST['billing_vybor_fila'])) { $value = sanitize_text_field(wp_unslash($_POST['billing_vybor_fila'])); $order->update_meta_data('_billing_vybor_fila', $value); } });
После этого получить выбранный филиал можно так:
$order = wc_get_order($order_id); $value = $order ? $order->get_meta('_billing_vybor_fila') : '';
Если поле создано сторонним плагином и у него включено сохранение в order meta, проверьте фактический ключ в админке заказа или через отладочный вывод
$order->get_meta_data(). Он может бытьbilling_vybor_filaбез подчёркивания или_billing_vybor_fila. Стандартные billing-поля вродеfirst_nameпопадают в структурированные данные заказа, а ваши кастомные поля обычно лежат отдельно в meta. Для вывода человекочитаемого названия по сохраненному ключу держите тот же массив options и берите$options[$value] ?? $value.