Пользовательское поле выбора извлечения Woocommerce сохраненное значение представляет собой число вместо текста - PullRequest
0 голосов
/ 15 мая 2018

У меня небольшая проблема, я делал поле для выбора на странице оформления заказа, когда я выбирал опцию, в приказах администратора печатались цифры вместо текста.

Мой код ниже:

 foreach($xml as $data){
     $location = $data -> A0_NAME;
     if (strpos($location, 'LT') !== false) {

         $vieta = $data -> NAME;
         $adresas = $data-> A2_NAME;
         $zip = $data -> ZIP;
        $fulladress = $vieta . ' ' . $adresas . ' ' . $zip;
         $option[] = $fulladress;
     }
 }

woocommerce_form_field( 'my_field_name1', array(
        'type'        => 'select',
        'required'    => true,
        'class'       => array('my-field-class form-row-wide'),
        'label'       => __('Select an option:', 'my_theme_slug'),
        'options'     => $option
        ),
     $checkout->get_value( 'my_field_name1' ));

И есть строка, которая обновляет мой заказ:

 update_post_meta($order_id, 'my_field', sanitize_text_field( $_POST['my_field_name1']) );

1 Ответ

0 голосов
/ 15 мая 2018

Проблема исходит от ваших $option ключей массива … у вас наверняка есть что-то вроде:

$option = array( 'Text one', 'Text two', 'Text three');

или

$option = array( '1' => 'Text one', '2' => 'Text two', '3' => 'Text three');

То есть вы при сохраненииполе данных к заказу, оно сохраняет выбранный ключ данных ...

Вместо этого вам нужно установить его следующим образом:

$option = array( 
    'Text one'   => 'Text one', 
    'Text two'   => 'Text two', 
    'Text three' => 'Text three',
);

Обновление относительно вашего обновленного кода:

Таким образом, вместо номера ключа будет сохранен текст ... Итак, ваш полный код:

$options = [];
foreach($xml as $data){
    $location = $data -> A0_NAME;
    if (strpos($location, 'LT') !== false) {

        $vieta = $data -> NAME;
        $adresas = $data-> A2_NAME;
        $zip = $data -> ZIP;
        $fulladress = $vieta . ' ' . $adresas . ' ' . $zip;
        $options[$fulladress] = $fulladress;
    }
}

woocommerce_form_field( 'my_field_name1', array(
    'type'        => 'select',
    'required'    => true,
    'class'       => array('my-field-class form-row-wide'),
    'label'       => __('Select an option:', 'my_theme_slug'),
    'options'     => $options,
), $checkout->get_value( 'my_field_name1' ) );

Теперь вы получите текстовое значение ...

...