@viktorleg

Почему не обновляет метаданные пользователя через форму на сайте?

Пытаюсь сделать форму, чтобы пользователи сайта могли добавлять/обновлять свои мета поля. На первый взгляд кажется, что все работает, но при попытке обновить страницу значение поля остается пустым и в базу данных ничего не записывается. Что я не так делаю?

Код формы:
<?php
    function update_basic_user_meta() {
        global $current_user;
        $communication_email = get_user_meta( $current_user->ID, 'communication_email', true );   
?>

<form action="" method="POST" class="">
    <input type="text" id="communicationEmail" name="communication_email" class="" value="<?php echo $communication_email; ?>">
    <button class="" type="submit">Сохранять</button>
</form>

<?php
        $communication_email = sanitize_text_field($_POST['communication_email'])
        update_user_meta( $current_user->ID, 'communication_email', $communication_email );
    }
    update_basic_user_meta();
?>
  • Вопрос задан
  • 142 просмотра
Решения вопроса 1
V_A_B
@V_A_B
¯\_(ツ)_/¯
1. не работает update_user_meta т.к. в строке выше ошибка - нету символа конца строки (точка с запятой)
2. обновление по Вашей логике происходит после вывода на экран формы. (update_user_meta после тага form). а это значит, что если изначально мета пустое, то и поле будет пустое. что бы данные появились надо после внесения изменений обновить страницу, но у Вас проблема из первого пункта. Если мета изначально не пустое, то после отправки новых данных будет отображаться старое значение пока не обновите страницу.... лучше обрабатывать данные перед тегом form

что-то по типу


проверил - работает

function update_basic_user_meta(){
		global $current_user;
		$communication_meta=!empty($_POST['communication_email'])?$_POST['communication_email']:'';
		if(!empty($communication_meta)){update_user_meta($current_user->ID,'communication_email',sanitize_text_field($communication_meta));}
		$communication_email=get_user_meta($current_user->ID,'communication_email',true);?>
<form action="" method="POST" class="">
    <input type="text" id="communicationEmail" name="communication_email" class="" value="<?php echo !empty($communication_email)?$communication_email:''; ?>">
    <button class="" type="submit">Сохранять</button>
</form><?php }
update_basic_user_meta();

Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы