Включить проверку полей электронной почты для проверки в Woocommerce - PullRequest
0 голосов
/ 27 октября 2018

Я добавил настраиваемое поле электронной почты в WooCommerce Checkout, введя следующий код

woocommerce_form_field('giftcard-friend-email', array(
'type'        => 'email',
'class'       => array( 'form-row-wide' ),
'required'    => true,
'label'       => __('To: Friend Email') ,
'placeholder' => __('Friend Email') ,
),
$checkout->get_value('giftcard-friend-email'));

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

Интересно, есть ли какой-нибудь встроенный метод WooCommerce для достижения того же, что и Billing Email?

Спасибо!

1 Ответ

0 голосов
/ 27 октября 2018

Вы всегда должны указывать в своем вопросе полный код функции и весь соответствующий код.

Я изменил giftcard-friend-email на _giftcard_friend_email aболее нормальный slug, поскольку он будет сохранен как метаданные заказа, поэтому подчеркивание является лучшим вариантом.

Следующий код будет:

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

Код:

// Display the custom checkout field
add_action('woocommerce_before_order_notes', 'add_custom_checkout_field', 20, 1 );
function add_custom_checkout_field( $checkout ) {

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

    woocommerce_form_field( '_giftcard_friend_email', array(
        'type'        => 'email',
        'label'       => __('To: Friend Email') ,
        'placeholder' => __('Friend Email') ,
        'class'       => array( 'form-row-wide' ),
        'required'    => true,
    ), $checkout->get_value('_friend_email') );

    echo '</div>';
}

// Field custom email Validation
add_action( 'woocommerce_checkout_process', 'friend_email_checkout_field_validation' );
function friend_email_checkout_field_validation() {
    if( isset($_POST['_giftcard_friend_email']) && empty($_POST['_giftcard_friend_email']) )
        wc_add_notice( __( 'Please fill in the "Friend Email" field.', 'woocommerce' ), 'error' );
    elseif( !preg_match("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$^", $_POST['_giftcard_friend_email'] ) ){
        wc_add_notice( __( 'Please enter a valid "Friend Email".', 'woocommerce' ), 'error' );
    }
}

// Save the checkout field value to order meta data
add_action('woocommerce_checkout_create_order', 'save_friend_email_checkout_field_value', 20, 2 );
function save_friend_email_checkout_field_value( $order, $data ) {
    if ( isset( $_POST['_giftcard_friend_email'] ) ) {
        $order->update_meta_data( '_giftcard_friend_email', sanitize_email( $_POST['_giftcard_friend_email'] ) );
    }
}

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

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