Моя цель: создать страницу личного кабинета пользователя с изменяемыми полями, т.е. с возможностью их редактирования пользователем на фронте и админом на бэке.
Максимум, чего я добился - это вывод изменений с бэка на фронт. В обратную сторону не работает.
Мой код:
1. В шаблоне страницы
$user = wp_get_current_user();
<form class="tabs-content__page_inner woocommerce-EditAccountForm edit-account" action="" method="post"
<div class="pers-acc__tab-fields_field tab-field woocommerce-form-row form-row">
<label for="account_phone" class="tab-field__title"><?php esc_html_e( 'Телефон', 'woocommerce' ); ?></label>
<div class="tab-field__input-inner">
<input type="text" class="tab-field__input woocommerce-Input woocommerce-Input--text input-text" name="account_phone" id="account_phone" value="<?php echo esc_attr( $user->account_phone ); ?>" />
</div>
</div>
</form>
2. В файле functions.php
//сохранение введенного значения
add_action('woocommerce_save_account_details', 'save_phone_number_account_details', 20, 1);
function save_phone_number_account_details($user_id) {
if( isset( $_POST['account_phone'] ) ) {
update_user_meta( $user_id, 'account_phone', sanitize_text_field( $_POST['account_phone'] ) );
}
}
//создание поля для вывода телефона в админке
add_action( 'show_user_profile', 'add_extra_custom_user_data', 1, 1 );
add_action( 'edit_user_profile', 'add_extra_custom_user_data', 1, 1 );
function add_extra_custom_user_data( $user )
{
?>
<h3><?php _e("Other details",'woocommerce' ); ?></h3>
<table class="form-table">
<tr>
<th><label for="account_phone"><?php _e( 'Custom phone', 'woocommerce' ); ?></label></th>
<td><input type="text" name="account_phone" value="<?php echo esc_attr(get_the_author_meta( 'account_phone', $user->ID )); ?>" class="regular-text" /></td>
</tr>
</table>
<br />
<?php
}
//сохранение телефона в админке
add_action( 'personal_options_update', 'save_extra_custom_user_data' );
add_action( 'edit_user_profile_update', 'save_extra_custom_user_data' );
function save_extra_custom_user_data( $user_id )
{
if( ! empty($_POST['account_phone']) )
update_user_meta( $user_id, 'account_phone', sanitize_text_field( $_POST['account_phone'] ) );
}
Подскажите, что мне дописать или изменить в коде, чтобы можно было редактировать как на фронте с сохранением так и на бэке?
Также интересует вопрос, как введенный номер телефона на фронте личного кабинета сохранить как billing_phone?
Пробовал путем замены второго аргумента update_user_meta с 'account_phone' на 'billing_phone':
update_user_meta( $user_id, 'billing_phone', sanitize_text_field( $_POST['account_phone'] ) );
Безуспешно.