Проверьте и сохраните дополнительное поле оформления заказа для определенного платежного шлюза в Woocommerce - PullRequest
0 голосов
/ 20 декабря 2018

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

Я использую Дополнительное поле для оформления заказа для определенного платежного шлюза в Woocommerce Код ответа, в котором я изменил поле выбора на поле ввода текста:

add_filter( 'woocommerce_gateway_description', 'gateway_bacs_custom_fields', 20, 2 );
function gateway_bacs_custom_fields( $description, $method_id ){
    //
     if( $method_id == 'bacs' ){

        ob_start(); // Start buffering

        echo '<div  class="bacs-fields" style="padding:10px 0;">';

        woocommerce_form_field( 'field_slug', array(
            'type'          => 'text',
            'label'         => __("Udfyld EAN", "woocommerce"),
            'class'         => array('form-row-wide'),
            'required'      => true,
                            ), '');
        echo '<div>';

        $description .= ob_get_clean(); // Append  buffered content
    }
    return $description;
}

Этоотлично работает на странице оформления заказа, где отображается поле.

Но введенное текстовое значение не сохраняется в заказах и уведомлениях по электронной почте.

Как сохранить и добавить это введенное текстовое значение в заказах и уведомлениях по электронной почте?

1 Ответ

0 голосов
/ 20 декабря 2018

Существует много пропущенных шагов, так как код ответа, который вы используете, просто отображает поле в кассе под описанием платежа BACS:

Вам необходимо (только когда BACS выбран в качестве способа оплаты) :

  1. Проверить поле
  2. Сохранить введенное значение в заказе
  3. Показать значение поля в Полученном заказе и Просмотр заказа (Мой аккаунт)
  4. Отображение значения поля в уведомлениях по электронной почте
  5. Отображение значения поля на страницах порядка редактирования администратора

Таким образом, вы можете видеть, что вы спрашиваете, огромно (слишком широкий) и потребует дополнительного нового вопроса для пунктов 3, 4 и 5, где вам нужно будет указать, куда вы хотите его вывести (местоположение) .

Весь код для шагов 1 и 2:

add_filter( 'woocommerce_gateway_description', 'gateway_bacs_appended_custom_text_fields', 10, 2 );
function gateway_bacs_appended_custom_text_fields( $description, $payment_id ){
     if( $payment_id === 'bacs' ){

        ob_start(); // Start buffering

        echo '<div class="bacs-fields" style="padding:10px 0;">';

        woocommerce_form_field( 'udfyld_ean', array(
            'type'          => 'text',
            'label'         => __("Udfyld EAN", "woocommerce"),
            'class'         => array('form-row-wide'),
            'required'      => true,
        ), '');

        echo '<div>';

        $description .= ob_get_clean(); // Append  buffered content
    }
    return $description;
}


// Process the field (validation)
add_action('woocommerce_checkout_process', 'udfyld_ean_checkout_field_validation');
function udfyld_ean_checkout_field_validation() {
if ( $_POST['payment_method'] === 'bacs' && isset($_POST['udfyld_ean']) && empty($_POST['udfyld_ean']) )
    wc_add_notice( __( 'Please enter your "Udfyld EAN" number.' ), 'error' );
}

// Save "Udfyld EAN" number to the order as custom meta data
add_action('woocommerce_checkout_create_order', 'save_udfyld_ean_to_order_meta_data', 10, 4 );
function save_udfyld_ean_to_order_meta_data( $order, $data ) {
    if( $data['payment_method'] === 'bacs' && isset( $_POST['udfyld_ean'] ) ) {
        $order->update_meta_data( '_udfyld_ean', sanitize_text_field( $_POST['udfyld_ean'] ) );
    }
}

Код помещается в файл function.php вашей активной дочерней темы (или активной темы).проверено и работает.

Чтобы получить это значение настраиваемого поля из $order объекта WC_Order, который вы будете использовать:

$udfyld_ean = $order->get_meta('_udfyld_ean');

Или из $order_id идентификатор заказа вы можете использовать функцию WordPress get_post_meta():

$udfyld_ean = get_post_meta( $order_id, '_udfyld_ean', true );

Проверка поля (для BACS в качестве выбранного способа оплаты) :

enter image description here

Введенное значение поля сохраняется в метаданных заказа (представление phpMyAdmin в таблице wp_postmeta):

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...