Добавление формы входа

Для того чтобы облегчить процесс регистрации пользователей и сделать интерфейс ресурса интуитивно понятным, иногда оказывается удобным размещать форму входа не на отдельной странице, как то выполняется в WordPress по умолчанию (/wp-login.php), а прямо на сайте — в сайдбаре или заголовке. Существует множество способов, позволяющих реализовать добавление формы к различным областям ресурса. В данном разделе мы остановимся на одном из самых популярных и понятных вариантов решения указанной проблемы.

В примере, приведенном ниже, мы предположим, что форма входа будет располагаться в сайдбаре, а поскольку сайдбар — это не что иное как список (ul), то форма будет являться одним из пунктов этого списка (li). Естественно, если мы захотим перенести форму в заголовок, нам придется оборачивать ее в div, однако это лишь вопрос разметки. Перейдем к примеру:

<?php if (!(current_user_can('level_0'))){ ?>
<h2>Login</h2>
<form action="<?php echo get_option('home'); ?>/wp-login.php" method="post">
<input type="text" name="log" id="user_login" value="<?php echo wp_
specialchars(stripslashes($user_login), 1) ?>" size="20" />
<input type="password" name="pwd" id="user_pass" size="20" />
<input type="submit" name="submit" value="Send" />
<p>
<label for="rememberme"><input name="rememberme" id="rememberme" type="checkbox"
checked="checked" value="forever" /> Remember me</label>
<input type="hidden" name="redirect_to" value="<?php echo $_SERVER['REQUEST_URI']; ?>" />
</p>
</form>
<p>Lost your password? <a href="<?php echo get_option('home'); ?>/wp-login.php?action=lostpassword">
Recover!</a></p>
<?php } else { ?>
<h2>Admin</h2>
<ul>
<li><a href="<?php bloginfo('wpurl'); ?>/wp-admin/">Dashboard</a></li>
<li><a href="<?php bloginfo('wpurl'); ?>/wp-admin/post-new.php">Write a post</a></li>
<li><a href="<?php echo wp_logout_url(urlencode($_SERVER['REQUEST_URI'])); ?>">Logout</a></li>
</ul>
<?php }?>

В первую очередь мы осуществляем проверку, является ли посетитель сайта зарегистрированным пользователем. Если указанная проверка привела к отрицательному результату, то мы выводим на экран форму входа. Наиболее важной частью кода является строка:

<input type="hidden" name="redirect_to" value="<?php echo $_SERVER['REQUEST_URI']; ?>" />

Она задает перенаправление, происходящее после входа в систему. Перенаправление возвращает пользователя к тому месту, откуда он начал работать с формой.

Двигаемся дальше. Ветка else будет выполнена в том случае, если пользователь уже зарегистрирован. Здесь идет череда проверок, которая в зависимости от пользовательского уровня определяет, какие элементы и ссылки выводить на экран. К примеру, если пользователь обладает нулевым уровнем, зачем ему показывать ссылку «Написать запись»? Ведь он все равно не сможет осуществить это действие.

Помните, что если ваш проект не нуждается в отдельной форме входа, то размещать ее «просто так, чтоб была» не нужно. Тем самым вы можете привлечь злоумышленников, которые вполне могут отыскать неприкрытые лазейки в коде и осуществить свои непотребные деяния. Тем более, зачем просто так забивать пространство сайта?

Блог про WordPress
Комментарии: 4
  1. Donatte

    Logout не работает. В алресную строку при логауте добавляется мусор. Работает только такая: Logout

    И ещё,при неправильном вводе пароля выкидывает в дефолтное окноавторизации, что всю эту писанину сводит к нулю.

  2. Дмитрий Геннадьевич

    А вот мне интересно , почему автор не ответил на предыдущий комментарий.

    1. Дмитрий (автор)

      Потому что комментарий появился через два года после написания статьи, и мне было в падлу снова разбираться в этом.

  3. Андрей

    Ответ БОМБА :-)

    Сайт классный — без воды как многие сейчас пытаются писать статьи в блогах.

    Очень приятно читать — даже статьи написанные 6 ЛЕТ!!! назад :) Вам бы и правда немного подредактировать статьи и цены бы сайту не было. Прочитал все 5 статей про формы регистрации на wordpress. До сих пор актуально и ценно. Спасибо.

Добавить комментарий для Андрей Отменить ответ

Получать новые комментарии по электронной почте.