Как отобразить пользовательское поле опции в заказах WooCommerce в панели администратора?

Вопрос или проблема

На самом деле этот вопрос уже был разрешен, так как я уже проверял, но не могу прокомментировать этот вопрос, так как использую тот же код, но в моем случае я использую поле с вариантами, и значение не отображается в панели администратора, ниже код, который я пробовал

    //*Несколько вариантов PHP - Выбор повода*/

add_filter( 'woocommerce_checkout_fields' , 'my_custom_checkout_field_update_order_meta' );

function my_custom_checkout_field_update_order_meta( $fields ) { 
     $fields['billing']['myfield'] = array(
        'type'      => 'select',
        'id' => 'myfield',
        'placeholder'     => __('Выберите повод', 'woocommerce'),
        'required'  => false,
        'class'     => array('form-row-wide'),
        'clear'     => false,
        'options'       => [
            'key1'  => __('День рождения', 'woocommerce'),
            'key2'  => __('Юбилей', 'woocommerce'),
            'key3'  => __('Поздравление', 'woocommerce'),
            'key4'  => __('Извините', 'woocommerce'),
            'key5'  => __('Удачи', 'woocommerce'),
            'key6'  => __('Спасибо', 'woocommerce'),
            'key7'  => __('Скорейшего выздоровления', 'woocommerce'),
            'key8'  => __('Любовь', 'woocommerce'),
        ]
    );
    return $fields;
}

add_action( 'woocommerce_admin_order_data_after_billing_address', 'edit_woocommerce_checkout_page', 10, 1 );

function edit_woocommerce_checkout_page($order){
    global $post_id;
    $order = new WC_Order( $post_id );
    echo '<p><strong>'.__('Повод').':</strong> ' . get_post_meta($order->get_id(), '_myfield', true ) . '</p>';
}

скриншот

Вы забыли сохранить данные пользовательского мета-поля, поэтому проверьте код ниже, я это сделал. Ссылка

add_filter( 'woocommerce_checkout_fields' , 'occasion_checkout_field_update_order_meta' );
function occasion_checkout_field_update_order_meta( $fields ) { 
$fields['billing']['occasion'] = array( 'type' => 'select', 
    'id' => 'occasion', 
    'placeholder' => __('Выберите повод', 'woocommerce'), 
    'required' => false, 
    'class' => array('form-row-wide'), 
    'clear' => false, 
    'options' => array( 
        'Birthday' => __('День рождения', 'woocommerce'), 
        'Anniversary' => __('Юбилей', 'woocommerce'), 
        'Congratulations' => __('Поздравление', 'woocommerce'), 
        'Sorry' => __('Извините', 'woocommerce'), 
        'Good Luck' => __('Удачи', 'woocommerce'), 
        'Thank You' => __('Спасибо', 'woocommerce'), 
        'Get Well Soon' => __('Скорейшего выздоровления', 'woocommerce'), 
        'Love' => __('Любовь', 'woocommerce')
    )
); 
return $fields; 
}
add_action( 'woocommerce_checkout_update_order_meta', 'occasion_checkout_update_order_meta' );
function occasion_checkout_update_order_meta( $order_id ){
    if( !empty( $_POST['occasion'] ) )
        update_post_meta( $order_id, '_occasion', sanitize_text_field( $_POST['occasion'] ) );
}
add_action( 'woocommerce_admin_order_data_after_billing_address', 'occasion_edit_woocommerce_checkout_page', 10, 1 );
function occasion_edit_woocommerce_checkout_page($order){ 
    echo __('Повод').': '.get_post_meta($order->id, '_occasion', true ); 
}

Ответ или решение

Для того чтобы корректно отобразить пользовательское поле выбора в заказах WooCommerce на административной панели, необходимо правильно сохранять данные, введенные пользователем на этапе оформления заказа, и затем выводить их на стороне администратора. Давайте различим основные шаги, которые необходимо выполнить.

Шаг 1: Создание пользовательского поля на странице оформления заказа

Сначала мы добавим пользовательское поле выбора (select field) в раздел выставления счета (billing). Это делается с помощью фильтра woocommerce_checkout_fields. Вот пример кода, который добавляет пользовательское поле с опциями:

add_filter('woocommerce_checkout_fields', 'add_custom_checkout_field');

function add_custom_checkout_field($fields) {
    $fields['billing']['occasion'] = array(
        'type'        => 'select',
        'id'          => 'occasion',
        'label'       => __('Select Occasion', 'woocommerce'),
        'required'    => false,
        'class'       => array('form-row-wide'),
        'clear'       => false,
        'options'     => array(
            ''                => __('Select Occasion', 'woocommerce'),
            'Birthday'       => __('Birthday', 'woocommerce'),
            'Anniversary'    => __('Anniversary', 'woocommerce'),
            'Congratulations' => __('Congratulations', 'woocommerce'),
            'Sorry'          => __('Sorry', 'woocommerce'),
            'Good Luck'      => __('Good Luck', 'woocommerce'),
            'Thank You'      => __('Thank You', 'woocommerce'),
            'Get Well Soon'  => __('Get Well Soon', 'woocommerce'),
            'Love'           => __('Love', 'woocommerce'),
        ),
    );
    return $fields;
}

Шаг 2: Сохранение пользовательского поля в метаданных заказа

Для сохранения введённого значения поля необходимо использовать хук woocommerce_checkout_update_order_meta. Этот хук позволяет обновить метаданные заказа после его завершения:

add_action('woocommerce_checkout_update_order_meta', 'save_custom_checkout_field');

function save_custom_checkout_field($order_id) {
    if (!empty($_POST['occasion'])) {
        update_post_meta($order_id, '_occasion', sanitize_text_field($_POST['occasion']));
    }
}

Шаг 3: Отображение пользовательского поля в административной панели

Теперь необходимо отобразить сохранённое значение на экране заказов в административной панели WooCommerce. Для этого мы используем хук woocommerce_admin_order_data_after_billing_address:

add_action('woocommerce_admin_order_data_after_billing_address', 'display_custom_field_in_admin_order', 10, 1);

function display_custom_field_in_admin_order($order) {
    $occasion = get_post_meta($order->get_id(), '_occasion', true);
    if (!empty($occasion)) {
        echo '<p><strong>' . __('Occasion', 'woocommerce') . ':</strong> ' . esc_html($occasion) . '</p>';
    }
}

Заключение

Теперь, после завершения всех шагов, вы сможете видеть выбранное поле "Повод" в административной панели WooCommerce, под информацией о плательщике. Убедитесь, что ваш код добавлен в файл functions.php вашей темы или в плагинах на основе пользовательских функций.

Следуя этим рекомендациям, вы сможете успешно отобразить пользовательское поле и убедиться, что оно сохраняется и отображается в админ-панели WooCommerce.

Оцените материал
Добавить комментарий

Капча загружается...