Изучаю 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 в качестве аргумента...