<?php
/*
Plugin Name: Шорткод формы регистрации +++
Text Domain: personalize-login
*/
/*
* Добавляем шорткод, его можно использовать в содержимом любой статьи или страницы, вставив [pageform_custom_login]
*/
add_shortcode( 'form_custom_login', 'form_render_login' );
function form_render_login() {
// проверяем, если пользователь уже авторизован, то выводим соответствующее сообщение и ссылку "Выйти"
if ( is_user_logged_in() ) {
return sprintf( "Вы уже авторизованы на сайте. <a href='%s'>Выйти</a>.", wp_logout_url() );
}
// присваиваем содержимое формы переменной и затем возвращаем её, выводить через echo() мы не можем, так как это шорткод
$return = '<div class="login-form-container-page"><h2>Войти на сайт</h2>';
// если возникли какие-либо ошибки, отображаем их
if ( isset( $_REQUEST['errno'] ) ) {
$error_codes = explode( ',', $_REQUEST['errno'] );
foreach ( $error_codes as $error_code ) {
switch ( $error_code ) {
case 'empty_username':
$return .= '<p class="errno">Вы не забыли указать свой email/имя пользователя?</p>';
break;
case 'empty_password':
$return .= '<p class="errno">Пожалуйста, введите пароль.</p>';
break;
case 'invalid_username':
$return .= '<p class="errno">На сайте не найдено указанного пользователя.</p>';
break;
case 'incorrect_password':
$return .= sprintf( "<p class='errno'>Неверный пароль. <a href='%s'>Забыли</a>?</p>", wp_lostpassword_url() );
break;
case 'confirm':
$return .= '<p class="errno success">Инструкции по сбросу пароля отправлены на ваш email.</p>';
break;
case 'changed':
$return .= '<p class="errno success">Пароль успешно изменён.</p>';
break;
case 'expiredkey':
case 'invalidkey':
$return .= '<p class="errno">Недействительный ключ.</p>';
break;
}
}
}
// используем wp_login_form() для вывода формы (но можете сделать это и на чистом HTML)
$args = array(
'echo' => false,
'redirect' => site_url($_SERVER['REQUEST_URI']), //перенаправление на ту же страницу
'form_id' => 'loginform_page',
'label_username' => __('Имя пользователя'),
'label_password' => __('Пароль'),
'label_remember' => __('Запомнить меня'),
'label_log_in' => __('Войти'),
'id_username' => 'user_login',
'id_password' => 'user_pass',
'id_remember' => 'rememberme',
'id_submit' => 'wp-submit',
'remember' => true,
'value_username' => NULL,
'value_remember' => true
);
$form = str_replace('wp-login.php', 'wp-login.php?pass=1', wp_login_form($args));
$return .= $form;
$return .= '<a class="forgot-password-page" href="' . wp_lostpassword_url() . '">Забыли пароль</a></div>';
// и наконец возвращаем всё, что получилось
return $return;
}
/*
* Редиректы обратно на кастомную форму входа в случае ошибки
*/
add_filter( 'authenticate', 'pageform_redirect_at_authenticate', 101, 3 );
function pageform_redirect_at_authenticate( $user, $username, $password ) {
if ( $_SERVER['REQUEST_METHOD'] === 'POST' ) {
if ( is_wp_error( $user ) ) {
$error_codes = join( ',', $user->get_error_codes() );
$login_url = home_url( '/page-login/' );
$login_url = add_query_arg( 'errno', $error_codes, $login_url );
wp_redirect( $login_url );
exit;
}
}
return $user;
}
/*
* Редиректы после выхода с сайта
*/
add_action( 'wp_logout', 'pageform_logout_redirect', 5 );
function pageform_logout_redirect(){
wp_safe_redirect( site_url( '/page-login/?logged_out=true' ) );
exit;
}