Как обновить мета-значение с помощью update_user_meta в WordPress? - PullRequest
0 голосов
/ 26 мая 2020

Я уже создал meta_key с именем «etime» для хранения предпочтительного времени посещения студентами онлайн-экзаменов. Поле создается функцией в файле function. php моей дочерней темы, и поле принимает входные данные из регистрационной формы моего сайта.

Теперь мне нужно включить то же поле в edit-user . php файл WordPress, чтобы студенты могли редактировать свои временные предпочтения.

Я пробовал использовать этот код, но он не работает. Он не обновляет meta_value по сравнению с meta_key "etime".

<select name="newetime">
    <option value="9">6 am - 9 am</option>
    <option value="12">9 am - 12 noon</option>
    <option value="15">12 noon - 3 pm</option>
    <option value="18">3 pm - 6 pm</option>
    <option value="21">6 pm - 9 pm</option>
    <option value="24">9 pm - 12 am</option>
</select>

<?php
$etime = get_user_meta( $current_user->ID, 'etime', true);
$newetime = $_POST['newetime'];
update_user_meta( $current_user->ID, 'etime', $etime); 
?>

1 Ответ

0 голосов
/ 26 мая 2020

Добавьте следующее в начало PHP

$current_user = wp_get_current_user();

Или используйте get_current_user_id() вместо $current_user->ID

Раскрывающийся список

Чтобы отобразить текущий вариант в раскрывающемся списке, вам необходимо сделать:

<?php $etime = get_user_meta( get_current_user_id(), 'etime', true); ?>
<select name="newetime">
    <option value="9" <?php selected( $etime, 9 ); ?>>6 am - 9 am</option>
    <option value="12" <?php selected( $etime, 12 ); ?>>9 am - 12 noon</option>
    <option value="15" <?php selected( $etime, 15 ); ?>>12 noon - 3 pm</option>
    <option value="18" <?php selected( $etime, 18 ); ?>>3 pm - 6 pm</option>
    <option value="21" <?php selected( $etime, 21 ); ?>>6 pm - 9 pm</option>
    <option value="24" <?php selected( $etime, 24 ); ?>>9 pm - 12 am</option>
</select>

Из соображений безопасности

Хакеры могут отправлять любые данные, которые они хотят, в качестве newetime. Вероятно, лучше всего преобразовать его в int.

$newetime = (int)$_POST['newetime'];

И тогда вам даже не придется беспокоиться о получении грязных данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...