Обновите отображаемое имя пользователя из настраиваемого поля оформления заказа в WooCommerce - PullRequest
1 голос
/ 17 марта 2019

В WooCommerce при оформлении заказа я могу создавать или обновлять всю пользовательскую и платежную информацию при оформлении заказа.Однако я хочу установить / обновить пользовательское «отображаемое имя» (псевдоним) .

Таким образом, основываясь на " Захватить значение поля пользовательского извлечения в Woocommerce " код ответа, я добавил следующий код в файл functions.php моей активной темы:

// Display a custom checkout field
add_action( 'woocommerce_before_checkout_billing_form', 'my_custom_checkout_field' );
function my_custom_checkout_field( $checkout ) {
    echo '<div id="my_custom_checkout_field">';

    woocommerce_form_field( 'display_name', array(
        'type'          => 'text',
        'class'         => array('my-custom-field form-row-wide'),
        'label'         => __('Alias'),
        'placeholder'   => __('Nickname to show in my account and comments'),
        'required'      => true,
        ), $checkout->get_value( 'display_name' ));

    echo '</div>';
}

// Save the custom checkout field in the order meta
add_action( 'woocommerce_checkout_update_user_meta', 'save_order_custom_meta_data', 10, 2 );
function save_order_custom_meta_data( ) {
    if ( isset($_POST['display_name']) )
        $user->update_meta_data('display_name', sanitize_text_field( $_POST['display_name'] ) );
}

Но это не работает, так как я получаю сообщение «Внутренняя ошибка сервера».

Любая помощь, чтобы решить эту проблему будет оценена.

1 Ответ

2 голосов
/ 17 марта 2019

Проблема возникает из-за вашей второй функции… Аргументы функции отсутствуют, а переменная $user имеет значение null, и вы не можете использовать для нее метод WC_Data update_meta_data().

Также display_name - это не пользовательские метаданные, а просто пользовательские данные. Поэтому вам нужно использовать выделенную функцию WordPress wp_update_user(), чтобы установить / обновить отображаемое имя пользователя.

Замените свою вторую подключенную функцию следующим:

// Save/update user data from custom checkout field value
add_action( 'woocommerce_checkout_update_user_meta', 'checkout_update_user_display_name', 10, 2 );
function checkout_update_user_display_name( $customer_id, $data ) {
    if ( isset($_POST['display_name']) ) {
        $user_id = wp_update_user( array( 'ID' => $customer_id, 'display_name' => sanitize_text_field($_POST['display_name']) ) );
    }
}

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

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