[Помогите] Создание страницы восстановления пароля

Тема в разделе "Wordpress", создана пользователем Dimadima41, 26 сен 2015.

  1. Dimadima41

    Dimadima41

    Регистрация:
    5 янв 2013
    Сообщения:
    59
    Симпатии:
    3
    Вообщем такая тема, при клике на "Я забыл пароль" кидает на страницу /wp-login.php?action=lostpassword, но так как я скрыл все страницы по этому типу кидает на страницу 404, теперь задался вопросом как вывести это на отдельную страницу к примеру шорткодом кто что может сказать по этому поводу?
     
  2. Bnopen

    Bnopen Команда форума

    Регистрация:
    3 мар 2013
    Сообщения:
    1.264
    Симпатии:
    534
    Dimadima41, чем вы скрыли все страницы по этому типу?
     
  3. SocArtLab

    SocArtLab

    Регистрация:
    29 сен 2015
    Сообщения:
    4
    Симпатии:
    0
    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_password12false );
             
    $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.
     
    Lasted edited by : 29 сен 2015
  4. SinTaksiS-11

    SinTaksiS-11

    Регистрация:
    10 апр 2023
    Сообщения:
    12
    Симпатии:
    1
    Пояснения к коду PHP
    1. С помощью комментария задается название шаблона страницы: Reset Page.

    2. Функция get_header() подключает шапку сайта.

    3. Глобальная переменная $wpdb используется для работы с базой данных WordPress.

    4. Создаются переменные $error и $success для обработки ошибок и успешных действий.

    5. Если в POST-запросе есть параметр action со значением reset, то происходит обработка запроса и генерация нового пароля.

    6. Проверяется, что поле email (user_login) не пустое и является корректным email-адресом.

    7. Проверяется, что email-адрес соответствует зарегистрированному пользователю в WordPress.

    8. Генерируется новый случайный пароль.

    9. Обновляется запись пользователя в базе данных.

    10. Если обновление прошло успешно, то отправляется email с новым паролем.

    11. Если отправка email прошла успешно, то выводится сообщение об успешном сбросе пароля.

    12. Если произошла ошибка при выполнении какого-либо шага, то выводится соответствующее сообщение об ошибке.

    13. Если есть ошибка, то выводится сообщение с классом message, содержащее текст ошибки.

    14. Если есть успешное действие, то выводится сообщение с классом error_login, содержащее текст успешного действия.

    15. Создается форма для ввода email-адреса пользователя и отправки запроса на сброс пароля.

    16. По умолчанию в поле email-адреса вставляется значение, введенное пользователем при предыдущей неудачной попытке сброса пароля.

    17. Функция get_footer() подключает подвал сайта.