Пользовательская форма входа
Я совсем недавно начал работать с WordPress. Я пытаюсь отобразить форму входа в шапке моего сайта. Однако, когда я просматриваю все файлы в директории, это очень перегружает, и я боюсь что-либо трогать.
Кто-нибудь знает хорошие учебные материалы по этой теме или может пролить свет на этот вопрос?

Форма входа представляет собой простую HTML-форму, которая отправляет имя пользователя и пароль на wp-login.php. Это самый простой способ создать пользовательскую форму входа:
<?php
$redirect_to = '';
?>
<form name="loginform" id="loginform" action="<?php echo site_url( '/wp-login.php' ); ?>" method="post">
<p>Имя пользователя: <input id="user_login" type="text" size="20" value="" name="log"></p>
<p>Пароль: <input id="user_pass" type="password" size="20" value="" name="pwd"></p>
<p><input id="rememberme" type="checkbox" value="forever" name="rememberme"> Запомнить меня</p>
<p><input id="wp-submit" type="submit" value="Войти" name="wp-submit"></p>
<input type="hidden" value="<?php echo esc_attr( $redirect_to ); ?>" name="redirect_to">
<input type="hidden" value="1" name="testcookie">
</form>
Построчное объяснение:
$redirect_to
: Если вы хотите перенаправить пользователя на определенную страницу после входа, укажите URL здесь. Этот URL будет вставлен в скрытое поле в конце формы<form ... action="...">
: Данные должны отправляться на wp-login.php. Этот файл находится в корне вашей установки WordPress. Создайте правильный URL с помощьюsite_url()
(подробнее оsite_url()
смотрите в кодексе). Метод должен быть установлен вpost
- Поле ввода для имени пользователя с id
user_login
- Поле ввода для пароля с id
user_pass
- Поле ввода для чекбокса "Запомнить меня" (необязательно)
- Кнопка отправки формы
- Скрытое поле для перенаправления пользователя после входа (необязательно)
- Скрытое поле для тестовой куки (необязательно, но полезно)
Создайте форму и стилизуйте её с помощью CSS. Это всё, что требуется.

Создайте файл шаблона в директории вашей дочерней темы, например,
login.php
. Разместите в этом файле форму входа:<form action="" method="post"> <div> Имя пользователя: <input name="log" type="text" /> </div> <div> Пароль: <input name="pwd" type="password" /> </div> <div> <input type="submit" value="Войти" /> <input type="hidden" name="action" value="my_login_action" /> </div> </form>
Измените что угодно, но оставьте атрибуты name без изменений
Создайте файл
functions.php
в директории вашей дочерней темы или отредактируйте существующий. В нем вы будете обрабатывать запросы на вход:add_action('init', function(){ // не запрос на вход? if(!isset($_POST['action']) || $_POST['action'] !== 'my_login_action') return; // см. кодекс для wp_signon() $result = wp_signon(); if(is_wp_error($result)) wp_die('Ошибка входа. Неправильное имя пользователя или пароль?'); // перенаправляем обратно на запрошенную страницу после успешного входа header('Location: ' . $_SERVER['REQUEST_URI']); exit; });
Создайте копию вашего шаблона
header.php
, поместите ее в папку дочерней темы и отредактируйте. Добавьте этот код там, где должна появляться форма входа:<?php if(!is_user_logged_in()){ get_template_part('login'); } ?>

Мне очень нравится этот пример. Что мне нужно написать для аналогичной формы, но для регистрации, вместо $result = wp_signon();?


Также вы можете настроить оригинальную форму входа в своей теме WordPress.
Есть несколько вещей, которые можно сделать. 1) Вы можете изменить логотип WordPress:
<?php
// Кастомный логотип
function my_custom_login_logo() {
echo '<style type="text/css">
h1 a { background-image:url('.get_bloginfo('template_url').'/images/logo.png) !important; }
</style>';
}
add_action('login_head', 'my_custom_login_logo');
// Настройка ссылки логотипа
function my_login_logo_url() {
return get_bloginfo( 'url' );
}
add_filter( 'login_headerurl', 'my_login_logo_url' );
function my_login_logo_url_title() {
return '[url]';
}
add_filter( 'login_headertitle', 'my_login_logo_url_title' );
?>
2) Вы можете убрать тряску при ошибке входа:
<?php
function my_login_head() {
remove_action('login_head', 'wp_shake_js', 12);
}
add_action('login_head', 'my_login_head');
?>
3) Удалить сообщения об ошибках входа:
<?php
add_filter('login_errors',create_function('$a', "return null;"));
?>
Важно:
Не добавляйте все эти части кода в functions.php
. Сначала создайте три отдельных файла с именами, описывающими функцию
, например (my_custom_login_logo.php
, my_login_head.php
и remove_login_errors.php
), а затем подключите эти 3 функции в functions.php
Пример:
require_once('includes/secure/my_custom_login_logo.php');
require_once('includes/secure/my_login_head.php');
require_once('includes/secure/remove_login_errors.php');
includes
и secure
- это папки. Надеюсь, это вам поможет. Добро пожаловать.

Добавление кодов в wp-login.php. Коды формы ниже.
<form id="loginform" action="<?php echo site_url( '/wp-login.php' ); ?>" method="POST">
<h5><strong>ВХОД ДЛЯ УЧАСТНИКОВ</strong> <a href="uyeol.html"><i class="fa fa-gear"></i> СОЗДАТЬ УЧЕТНУЮ ЗАПИСЬ.</a></h5>
<div class="newsletter-form">
<div class="newsletter-email">
<input id="user_login" type="text" name="grs_tcno" value="" placeholder="Логин">
</div>
<div class="newsletter-zip">
<input id="user_pass" type="password" name="grs_sifre" value="" placeholder="Пароль">
</div>
<div class="newsletter-submit">
<input id="wp-submit" type="submit" name="girisyap" value="Войти">
<input type="hidden" value="<?php echo esc_attr( $redirect_to ); ?>" name="redirect_to">
<input type="hidden" value="1" name="testcookie">
<i class="icons icon-right-thin"></i>
</div>
</div>
