Реализую личный кабинет для пользователя, а точнее, смену данных и пароля в WordPress, но скрипт не выполняется, перебрасывает на главную страницу и все, никаких ошибок тоже не вылазит, подскажите, в чем проблема.
Это файл личного кабинета
<?php
/*
* Template name: Шаблон профиля пользователя
*/
global $user_ID;
// если пользователь не авторизован, отправляем его на страницу входа
if( !$user_ID ) {
header('location:' . site_url() . '/wp-login.php');
exit;
} else {
$userdata = get_user_by( 'id', $user_ID );
}
?><html>
<body>
<?php
// после сохранения профиля и смены пароля понадобятся уведомления
// если уведомлений больше двух, то оптимальнее их будет вывести через switch
if( isset($_GET['status']) ) :
switch( $_GET['status'] ) :
case 'ok':{
echo '<div class="success">Сохранено.</div>';
break;
}
case 'exist':{
echo '<div class="error">Пользователь с указанным email уже существует.</div>';
break;
}
case 'short':{
echo '<div class="error">Пароль слишком короткий.</div>';
break;
}
case 'mismatch':{
echo '<div class="error">Пароли не совпадают.</div>';
break;
}
case 'wrong':{
echo '<div class="error">Старый пароль неверен.</div>';
break;
}
case 'required':{
echo '<div class="error">Пожалуйста, заполните все обязательные поля.</div>';
break;
}
endswitch;
endif;
// profile-update.php - это файл, который находится в папке с темой и обрабатывает сохранение, его содержимое будет в следующем шаге
?>
<form action="<?php echo get_theme_file_uri() ?>/profile-update.php" method="POST">
<input type="text" name="first_name" placeholder="Имя" value="<?php echo $userdata->first_name ?>" />
<input type="text" name="last_name" placeholder="Фамилия" value="<?php echo $userdata->last_name ?>" />
<input type="email" name="email" placeholder="Email" value="<?php echo $userdata->user_email ?>" />
<input type="password" name="pwd1" placeholder="Старый пароль" />
<input type="password" name="pwd2" placeholder="Новый пароль" />
<input type="password" name="pwd3" placeholder="Повторите новый пароль" />
<button>Сохранить</button>
</form>
</body>
</html>
<?php
Это файл обработки данных
// $_SERVER['HTTP_REFERER'] - полный URL страницы, откуда пришел пользователь
// $url[0] - без GET параметров
// это нам понадобится для правильных редиректов
$url = explode("?",$_SERVER['HTTP_REFERER']);
// подключаем WordPress
// тут указан правильный путь, если profile-update.php находится непосредственно в папке с темой
require_once( dirname(__FILE__) . '/../../../wp-load.php' );
// если не авторизован, просто выходим из файла
if( !is_user_logged_in() ) exit;
// получаем объект пользователя с необходимыми данными
$user_ID = get_current_user_id();
$user = get_user_by( 'id', $user_ID );
// сначала обработаем пароли, ведь если при сохранении пользователь ничего не указал ни в одном поле пароля, то пропускаем эту часть
if( $_POST['pwd1'] || $_POST['pwd2'] || $_POST['pwd3'] ) {
// при этом пользователь должен заполнить все поля
if( $_POST['pwd1'] && $_POST['pwd2'] && $_POST['pwd3'] ) {
// сначала проверяем соответствие нового пароля и его подтверждения
if( $_POST['pwd2'] == $_POST['pwd3'] ){
// пароль из двух символов нам не нужен, минимум 8
if( strlen( $_POST['pwd2'] ) < 8 ) {
// если слишком короткий - перенаправляем
header('location:' . $url[0] . '?status=short');
exit;
}
// и самое главное - проверяем, правильно ли указан старый пароль
if( wp_check_password( $_POST['pwd1'], $user->data->user_pass, $user->ID) ) {
// если да, меняем на новый и заново авторизуем пользователя
wp_set_password( $_POST['pwd2'], $user_ID );
$creds['user_login'] = $user->user_login;
$creds['user_password'] = $_POST['pwd2'];
$creds['remember'] = true;
$user = wp_signon( $creds, false );
} else {
// если нет, перенаправляем на ошибку
header('location:' . $url[0] . '?status=wrong');
exit;
}
} else {
// новый пароль и его подтверждение не соответствуют друг другу
header('location:' . $url[0] . '?status=mismatch');
exit;
}
} else {
// не все поля заполнены - перенеправляем
header('location:' . $url[0] . '?status=required');
exit;
}
}
// допустим, что Имя, Фамилия и Емайл - обязательные поля, Город - не обязательное
if( $_POST['first_name'] && $_POST['last_name'] && is_email($_POST['email']) ) {
// если пользователь указал новый емайл, а кто-то уже под ним зареган - отправляем на ошибку
if( email_exists( $_POST['email'] ) && $_POST['email'] != $user->user_email ) {
header('location:' . $url[0] . '?status=exist');
exit;
}
// обновляем данные пользователя
wp_update_user( array(
'ID' => $user_ID,
'user_email' => $_POST['email'],
'first_name' => $_POST['first_name'],
'last_name' => $_POST['last_name'],
'display_name' => $_POST['first_name'] . ' ' . $_POST['last_name'] ));
// ну и город не забываем обновить
update_user_meta( $user_ID, 'city', $_POST['city']);
} else {
// не все поля заполнены - перенеправляем
header('location:' . $url[0] . '?status=required');
exit;
}
// если выполнение кода дошло до сюда, то следовательно всё ок
header('location:' . $url[0] . '?status=ok');
exit;
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Не могу окончательно понять когда лучше и практичнее использовать фасад или статический метод
Всем привет, отправлю запрос curl , но майл считает меня старым браузером и выдает мне не тот контент который отображается в браузере на самом...
В бд есть множество таблиц с именами-датамиНапример 01102018 или 07102018