Добавить новое настраиваемое поле оформления заказа, прежде чем выставлять счета в Woocommerce? - PullRequest
0 голосов
/ 09 мая 2018

Я могу добавить набор настраиваемых полей на экран оформления заказа WooCommerce, но мне нужно переместить его выше «Платежных реквизитов».

Как это можно сделать?

В соответствии с этой официальной документацией WooCommerce приведен пример кода для добавления дополнительных настраиваемых полей оформления заказа:

/**
 * Add the field to the checkout
 */
add_action( 'woocommerce_after_order_notes', 'my_custom_checkout_field' );

function my_custom_checkout_field( $checkout ) {

echo '<div id="my_custom_checkout_field"><h2>' . __('My Field') . '</h2>';

woocommerce_form_field( 'my_field_name', array(
    'type'          => 'text',
    'class'         => array('my-field-class form-row-wide'),
    'label'         => __('Fill in this field'),
    'placeholder'   => __('Enter something'),
    ), $checkout->get_value( 'my_field_name' ));

echo '</div>';

}

Ответы [ 2 ]

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

Обновлено: Существует только один доступный хук перед полями выставления счетов, который можно использовать для добавления настраиваемых полей в форму оформления заказа. Попробуйте этот полный код:

add_action( 'woocommerce_checkout_before_customer_details', 'custom_checkout_fields_before_billing_details', 20 );
function custom_checkout_fields_before_billing_details(){
    $domain = 'woocommerce';
    $checkout = WC()->checkout;

    echo '<div id="my_custom_checkout_field">';

    echo '<h3>' . __('My New Fields Section') . '</h3>';

    woocommerce_form_field( '_my_field_name', array(
        'type'          => 'text',
        'label'         => __('My 1st new field', $domain ),
        'placeholder'   => __('Please fill in "my 1st new field"', $domain ),
        'class'         => array('my-field-class form-row-wide'),
        'required'      => true, // or false
    ), $checkout->get_value( '_my_field_name' ) );

    echo '</div>';
}

// Custom checkout fields validation
add_action( 'woocommerce_checkout_process', 'custom_checkout_field_process' );
function custom_checkout_field_process() {
    if ( isset($_POST['_my_field_name']) && empty($_POST['_my_field_name']) )
        wc_add_notice( __( 'Please fill in "My 1st new field".' ), 'error' );
}

// Save custom checkout fields the data to the order
add_action( 'woocommerce_checkout_create_order', 'custom_checkout_field_update_meta', 10, 2 );
function custom_checkout_field_update_meta( $order, $data ){
    if( isset($_POST['_my_field_name']) && ! empty($_POST['_my_field_name']) )
        $order->update_meta_data( '_my_field_name', sanitize_text_field( $_POST['_my_field_name'] ) );
}

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

Вы получите новый раздел поля с вашим новым настраиваемым полем (где вы также можете иметь много полей):

enter image description here


Официальные справочные документы: Настройка полей оформления заказа с использованием действий и фильтров

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

WooCommerce использует хуки для отображения элементов страницы оформления заказа, таких как поля оплаты и доставки. Вы можете использовать их, чтобы добавить свой собственный контент. Вы заметите, что первая строка кода, которую вы разместили, содержит woocommerce_after_order_notes , которая является одной из тех ловушек. Определяет размещение поля.

Если вы хотите добавить сообщение до платежных данных, вы можете сделать это с помощью этого хука: woocommerce_before_checkout_billing_form

Полный список хуков WooCommerce можно найти по адресу https://docs.woocommerce.com/wc-apidocs/hook-docs.html

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