@Bolharskyi

Как использовать update_user_meta в аккаунте пользователя Woocommerce?

Моя цель: создать страницу личного кабинета пользователя с изменяемыми полями, т.е. с возможностью их редактирования пользователем на фронте и админом на бэке.

Максимум, чего я добился - это вывод изменений с бэка на фронт. В обратную сторону не работает.

Мой код:
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'] ) );

Безуспешно.
  • Вопрос задан
  • 60 просмотров
Пригласить эксперта
Ответы на вопрос 1
@EvelynWaugh
В базу смотрели, сохраняет? Уверен что в базу вы найдете что оно сохраняет, вы просто выводите не правильно. Во первых не никакого $user->account_phone, произвольная мета не добавляется свойством в класс WP_User. Все произвольные поля беруться функцией get_user_meta(), get_post_meta(), get_term_meta() ...
Во вторых, get_the_author_meta( 'account_phone', $user->ID ) такого тоже нет, опять надо использовать get_user_meta()
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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