Вообщем такая тема, при клике на "Я забыл пароль" кидает на страницу /wp-login.php?action=lostpassword, но так как я скрыл все страницы по этому типу кидает на страницу 404, теперь задался вопросом как вывести это на отдельную страницу к примеру шорткодом кто что может сказать по этому поводу?
1) Создаешь файл reset-pass.php в папке page-templates. Папка должна находится в корне темы (что-то вроде /wp-content/themes/your-theme/page-templates/). Если этой папки нет, то создай ее и помести туда файл. 2) Вставляешь в файл reset-pass.php следующий код: PHP: <?php /*Template Name: Reset Page*/get_header();?><div class="wrapper"> <?php global $wpdb; $error = ''; $success = ''; // check if we're in reset form if( isset( $_POST['action'] ) && 'reset' == $_POST['action'] ) { $email = trim($_POST['user_login']); if( empty( $email ) ) { $error = 'Enter a username or e-mail address..'; } else if( ! is_email( $email )) { $error = 'Invalid username or e-mail address.'; } else if( ! email_exists( $email ) ) { $error = 'There is no user registered with that email address.'; } else { $random_password = wp_generate_password( 12, false ); $user = get_user_by( 'email', $email ); $update_user = wp_update_user( array ( 'ID' => $user->ID, 'user_pass' => $random_password ) ); // if update user return true then lets send user an email containing the new password if( $update_user ) { $to = $email; $subject = 'Your new password'; $sender = get_option('name'); $message = 'Your new password is: '.$random_password; $headers[] = 'MIME-Version: 1.0' . "\r\n"; $headers[] = 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; $headers[] = "X-Mailer: PHP \r\n"; $headers[] = 'From: '.$sender.' < '.$email.'>' . "\r\n"; $mail = wp_mail( $to, $subject, $message, $headers ); if( $mail ) $success = 'Check your email address for you new password.'; } else { $error = 'Oops something went wrong updaing your account.'; } } if( ! empty( $error ) ) echo '<div class="message"><p class="error"><strong>ERROR:</strong> '. $error .'</p></div>'; if( ! empty( $success ) ) echo '<div class="error_login"><p class="success">'. $success .'</p></div>'; } ?> <!--html code--> <form method="post"> <fieldset> <p>Please enter your username or email address. You will receive a link to create a new password via email.</p> <p><label for="user_login">Username or E-mail:</label> <?php $user_login = isset( $_POST['user_login'] ) ? $_POST['user_login'] : ''; ?> <input type="text" name="user_login" id="user_login" value="<?php echo $user_login; ?>" /></p> <p> <input type="hidden" name="action" value="reset" /> <input type="submit" value="Get New Password" class="button" id="submit" /> </p> </fieldset> </form></div><?php get_footer(); ?> 2.1) Template Name отвечает за название темплейта, которое будет использоваться в следующем шаге 2.2) Часть кода, связанная с хэдером и футэром может отличаться. Зависит от самой темы. 3) Теперь нужно попасть в сам вордпрес и создать новую страницу. При создании страницы у тебя должно появится (или уже было) custom field с выбором темплейтов (templates). Выбери Reset Page темплейт и нажми Publish. Все, у тебя готова отдельная страница для сброса пароля. Эти пункты работают, если у тебя есть доступ к wp и ты просто хочешь вынести сброс пароля на отдельную страницу, если доступа нет, то восстановить пароль проще через sql.
Пояснения к коду PHP С помощью комментария задается название шаблона страницы: Reset Page. Функция get_header() подключает шапку сайта. Глобальная переменная $wpdb используется для работы с базой данных WordPress. Создаются переменные $error и $success для обработки ошибок и успешных действий. Если в POST-запросе есть параметр action со значением reset, то происходит обработка запроса и генерация нового пароля. Проверяется, что поле email (user_login) не пустое и является корректным email-адресом. Проверяется, что email-адрес соответствует зарегистрированному пользователю в WordPress. Генерируется новый случайный пароль. Обновляется запись пользователя в базе данных. Если обновление прошло успешно, то отправляется email с новым паролем. Если отправка email прошла успешно, то выводится сообщение об успешном сбросе пароля. Если произошла ошибка при выполнении какого-либо шага, то выводится соответствующее сообщение об ошибке. Если есть ошибка, то выводится сообщение с классом message, содержащее текст ошибки. Если есть успешное действие, то выводится сообщение с классом error_login, содержащее текст успешного действия. Создается форма для ввода email-адреса пользователя и отправки запроса на сброс пароля. По умолчанию в поле email-адреса вставляется значение, введенное пользователем при предыдущей неудачной попытке сброса пароля. Функция get_footer() подключает подвал сайта.