Сохранить настраиваемое поле оформления заказа WooCommerce как метаданные пользователя

Я хочу добавить свое настраиваемое поле регистрации в форму страницы оформления заказа.

Я использую этот код для добавления настраиваемого поля в мою область регистрации.

Кстати, я использую поля оформления заказа в полях регистрации.

      add_filter( 'woocommerce_checkout_fields' , 'custom_override_checkout_fields' );
function custom_override_checkout_fields( $fields ) {

    $fields['billing']['shipping_tc'] = array(
        'label' => __('TC Kimlik No', 'woocommerce'),
        'placeholder' => _x('Fatura İçin Gerekli', 'placeholder', 'woocommerce'),
        'required' => true,
        'class' => array('form-row-wide'),
        'clear' => true
    );
    
    return $fields;
}

И я попробовал этот код для обновления метаданных пользователя.

      add_action( 'woocommerce_checkout_update_user_meta', 'reigel_woocommerce_checkout_update_user_meta', 10, 2 );
function reigel_woocommerce_checkout_update_user_meta( $customer_id, $posted ) {
    if (isset($posted['shipping_tc'])) {
        $dob = sanitize_text_field( $posted['shipping_tc'] );
        update_user_meta( $user_id, $dob, $_POST[$dob]);
    }
}

Ошибок нет, но не работает ... Кто-нибудь может мне помочь?

Я успешно обновляю другие значения проверки по умолчанию с помощью этого кода;

      // Custom function to save Usermeta or Billing Address of registered user
add_action('woocommerce_created_customer','zk_save_billing_address');
function zk_save_billing_address($user_id){
    $address = $_POST;
    foreach ($address as $key => $field){
        // Only billing fields values
        if( strpos( $key, 'billing_' ) !== false ){
            // Condition to add firstname and last name to user meta table
            if($key == 'billing_first_name' || $key == 'billing_last_name'){
                $new_key = str_replace( 'billing_', '', $key );
                update_user_meta( $user_id, $new_key, $_POST[$key] );
            }
            update_user_meta( $user_id, $key, $_POST[$key] );
        }
    }
}

Что я могу сделать для обновления настраиваемых полей оформления заказа при регистрации?

Вот моя страница регистрации .

1 ответ

Решение

Основная ошибка заключается в использовании поля оформления заказа, ключ поля которого начинается с shipping_ в разделе биллинга…

Также лучше использовать крючок композитный крючок. woocommerce_billing_fields который сделает все за вас (поэтому нет необходимости сохранять поле как метаданные пользователя или метаданные элемента заказа, как это делает WooCommerce).

Таким образом, единственной необходимой заменой кода будет (с ключом поля billing_identifier вместо того, чтобы сбивать с толку shipping_tc) :

      add_filter( 'woocommerce_billing_fields' , 'add_custom_billing_field' );
function add_custom_billing_field( $fields ) {
    $fields['billing_identifier'] = array(
        'label' => __('TC Kimlik No', 'woocommerce'),
        'placeholder' => _x('Fatura İçin Gerekli', 'placeholder', 'woocommerce'),
        'required' => true,
        'class' => array('form-row-wide'),
        'clear' => true
    );

    return $fields;
}

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

Это поле дополнительно появится в «Моя учетная запись»> «Адреса»> «Изменить адрес для выставления счетов».

Другие вопросы по тегам