Как получить значение выбранного radio в заказе woocommerce?

Ссылка скопирована
1 ответ

На странице 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 { // ни одна из кнопок не была выбрана }

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Юрий Linux Ответ

Ошибка в том, что вы смотрите не выбранное значение, а описание 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);
    }
});

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 = 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.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно