Как добавить поле в профиль пользователя (wp + woocommerce)?

Изучаю woocommerce.
В целом нравится разделение данных пользователя на 3 части:
1. Персональные данные (Имя-почта-пароль)
2. Данные для доставки
3. Платежные данные

Но номер телефона пользователя должен быть в персональных данных! (для доставки скорее дополнительный контакт)

Добавляю поле "Номер телефона" в профиль:
function my_user_contactmethods($user_contactmethods){
    $user_contactmethods['phone'] = 'Телефон';
    return $user_contactmethods;
}
add_filter('user_contactmethods', 'my_user_contactmethods');


Добавляю поле на страницу редактирования профиля (form-edit-account.php, все шаблоны скопированы в папку с темой, чтобы не трогать дефолтные)
<p class="form-row form-row-wide">
        <label for="phone">Phone</label>
        <input type="text" class="input-text" name="phone" id="phone" value="<?php echo esc_attr( $user->phone ); ?>" />
    </p>


А далее самое интересное - как сохранить номер телефона из этой формы?
Отвечает за работу формы следующая функция из class-wc-form-handler.php

Если добавить в неё 2 строчки:
$phone  = ! empty( $_POST[ 'phone' ] ) ? $_POST[ 'phone' ] : '';
  $user->phone = $phone;


То сохранение работает.
Но ведь все изменения сотрутся при обновлении, так что выходить за рамки functions.php моей темы не хочется.

Как быть?

Пробовал различные add_filter и add_action, но безрезультатно, так как не могу передать $_POST в качестве аргумента...
  • Вопрос задан
  • 4974 просмотра
Решения вопроса 1
Попробуй так.

<?php 
$tag             = 'woocommerce_save_account_details'; 
$function_to_add = 'my_save_account';
$priority        = 10;
$accepted_args   = 1; 
add_action( $tag, $function_to_add, $priority, $accepted_args ); 
function my_save_account($user_id) {
  $phone  = ! empty( $_POST[ 'phone' ] ) ? $_POST[ 'phone' ] : '';
  update_user_meta($user_id, 'phone', $phone);
}
?>
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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