@MissionDone

Как вывести поле под выбором доставки Woocommerce?

Помогите, пожалуйста, с woocommerce.
При оплате заказа, под выбранным пунктом доставки нужно вывести поле, где клиент будет указывать время (текстом).
Это поле должно отправляться на почту с другими данными заказа.

add_action( 'woocommerce_after_shipping_rate', 'carrier_custom_fields', 20, 2 );
function carrier_custom_fields( $method, $index ) {
    if( ! is_checkout()) return; // Only on checkout page

    $customer_carrier_method = 'local_pickup:2';

    if( $method->id != $customer_carrier_method ) return; // Only display for "local_pickup"

    $chosen_method_id = WC()->session->chosen_shipping_methods[ $index ];

    // Если выбран метод доставки "самовывоз", показываем:
    if($chosen_method_id == $customer_carrier_method ):

    echo '<div class="custom-carrier">';

    woocommerce_form_field( 'carrier_name' , array(
        'type'          => 'text',
        'class'         => array('form-row-wide carrier-name'),
        'label'         => 'Время самовывоза:',
        'required'      => false,
    ), WC()->checkout->get_value( 'carrier_name' ));

    echo '</div>';
    endif;
}

// Валидация поля
add_action('woocommerce_checkout_process', 'carrier_checkout_process');
function carrier_checkout_process() {
    if( isset( $_POST['carrier_name'] ) && empty( $_POST['carrier_name'] ) )
        wc_add_notice( ( "Пожалуйста, введите время самовывоза" ), "error" );
}

add_action( 'woocommerce_checkout_update_order_meta', 'carrier_update_order_meta', 30, 1 );
function carrier_update_order_meta( $order_id ) {
    if( isset( $_POST['carrier_name'] ))
        update_post_meta( $order_id, '_carrier_name', sanitize_text_field( $_POST['carrier_name'] ) );
}


Поле появляется, но страница после отправки заказа — выдает ошибку.
Добавлял ключи, тоже не помогло.

add_action( 'woocommerce_admin_order_data_after_shipping_address', 'custom_field_display_admin_order_meta', 10, 1 );

function custom_field_display_admin_order_meta($order){
    echo '<p><strong>'.__('Время самовывоза').':</strong> ' . get_post_meta( $order->id, '_carrier_name', true ) . '</p>';
}

// Выводим значения полей в шаблоне письма с заказом
add_filter('woocommerce_email_order_meta_keys', 'email_checkout_field_order_meta_keys');

function email_checkout_field_order_meta_keys( $keys ) {

$keys['Время самовывоза'] = '_carrier_name';

return $keys;
}


Как можно пофиксить эту ошибку? Заказ оформляется в админке, но уведомления на почту не приходят
  • Вопрос задан
  • 298 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы