Продолжаю публиковать, по мере нахождения, переводы небольших, но весьма полезных заметок о расширении базовой функциональности шаблонов WordPress, без использования дополнительных плагинов.
И сегодня хочу вам представить небольшую статью, о том как можно вывести блок авторизации/регистрации пользователей WordPress в любое место вашего шаблона.
Итак в результате наших действий, мы получим вот такие блоки до и после авторизации.
Для начала определимся что именно нам нужно отобразить в этом блоке:
- Поле для ввода имени пользователя
- Поле для пароля
- Чекбокс для запоминания пароля
- Скрытое поле, сообщающее вордпрессу, куда перенаправить пользователя после авторизации
- Кнопку отправки данных
- Две ссылки, одну для регистрации, другую для восстановления пароля
Поскольку мы собираемся делать форму, работающую в любом шаблоне, мы будем использовать функцию get_option(’home’), которая получает полный путь, к папке в которой установлен WordPress.
<h3>Login</h3> <form action="<?php echo get_option('home'); ?>/wp-login.php" method="post"> <p><label for="log">User</label><input type="text" name="log" id="log" value="<?php echo wp_specialchars(stripslashes($user_login), 1) ?>" size="20" /> </p> <p><label for="pwd">Password</label><input type="password" name="pwd" id="pwd" size="20" /></p> <p><input type="submit" name="submit" value="Send" class="button" /></p> <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> <a href="<?php echo get_option('home'); ?>/wp-register.php">Register</a> <a href="<?php echo get_option('home'); ?>/wp-login.php?action=lostpassword">Recover password</a>
В скрытое поле, мы поместили URL страницы, с которой логинится пользователь, так что после авторизации, он снова будет направлен на эту страницу.
Для того чтобы показывать форму входа/регистрации, только неавторизованным пользователям, мы воспользуемся функцией current_user_can(), с параметром level_0.
<?php if (!(current_user_can('level_0'))){ ?> //код указанный выше <?php } else { /*next to come*/}?>
Последнее что осталось сделать, это написать код, для авторизованного пользователя, следующий после else
<ul class="admin_box"> <li><a href="<?php echo get_option('home'); ?>/wp-admin/">Dashboard</a></li> <li><a href="<?php echo get_option('home'); ?>/wp-admin/post-new.php">Write new Post</a></li> <li><a href="<?php echo get_option('home'); ?>/wp-admin/page-new.php">Write new Page</a></li> <li><a href="<?php echo get_option('home'); ?>/wp-login.php?action=logout&redirect_to=<?php echo urlencode($_SERVER['REQUEST_URI']) ?>">Log out</a></li> </ul>
В результате у нас получился вот такой код, и вам остается только скопировать его и вставить в любом месте вашего шаблона:
<?php if (!(current_user_can('level_0'))){ ?> <h3>Login</h3> <form action="<?php echo get_option('home'); ?>/wp-login.php" method="post"> <p><label for="log">User</label><input type="text" name="log" id="log" value="<?php echo wp_specialchars(stripslashes($user_login), 1) ?>" size="20" /> </p> <p><label for="pwd">Password</label><input type="password" name="pwd" id="pwd" size="20" /></p> <p><input type="submit" name="submit" value="Send" class="button" /></p> <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> <a href="<?php echo get_option('home'); ?>/wp-register.php">Register</a> <a href="<?php echo get_option('home'); ?>/wp-login.php?action=lostpassword">Recover password</a> <?php } else { ?> <ul class="admin_box"> <li><a href="<?php echo get_option('home'); ?>/wp-admin/">Dashboard</a></li> <li><a href="<?php echo get_option('home'); ?>/wp-admin/post-new.php">Write new Post</a></li> <li><a href="<?php echo get_option('home'); ?>/wp-admin/page-new.php">Write new Page</a></li> <li><a href="<?php echo get_option('home'); ?>/wp-login.php?action=logout&redirect_to=<?php echo urlencode($_SERVER['REQUEST_URI']) ?>">Log out</a></li> </ul> <?php }?>
Удобно, секнс. В WP2.7. добавлена ф-ция wp_logout_url(%REDIRECT_URL%), которая автоматич. разлогинивает и редиректит по указанному пути ;)
а как можно вывести надпись Вы вошли как User
Для этого нужно вставить одну строчку в список со ссылками для авторизованных пользователей:
Вы авторизовались как user_login); ?> ...
Эта строчка выведет имя пользователя блога.
А если писать слова ЛОГИН и ПАРОЛЬ, русскими буквами, то отображаются кракозябры :(
Как лечить?
проверьте кодировку в который вы сохраняли файл, должна быть utf-8
Здравствуйте!
Вписал код в правый сайдбар. Все нормально отображается.
Но когда входишь под именем зарегистрировааного пользователя, Надписи:
Dashboard
Write new Post
Write new Page
Log out
выводятся вертикально в правом верхнем углу, а весь сайт опускается вниз.
У меня шаблон от сайта:
http://www.mangoorange.com (локализованный).
Спасибо!
Ошибся ! в леовм верхнем углу
Возможны разные причины, но если такое поведение происходит после того как вы залогинились, возможно стоит изменить название класса для UL списка, скорее всего с таким же именем у вас в css есть другой класс. Вместо admin_box, напишите любое другое название.
а как сделать чтоб при автоизации пользователи отсавались на той страницы от куда они авторизовались чтоб она не заходили в админку???
Вот так, как написано в этой статье. Авторизовавшись, они остануться на этой же странице.
ясно абобольшое !!!!
А что на счет регистрации? если нужно чтоб пользователь регился на одной из страничек?
там в примере, одна из ссылок ведет к регистрации пользователей
>
Вы авторизовались как
user_login);
?>
…
Она выводит добро пожаловать админ при любом пользователе..
выхоту в статье не работает
а работает он вот так :)
<a href="» title=»»>
Справедливое замечание, а не работает он потому, что на момент написания статьи, был актуален вордпресс, версии 2.6, а в 2.7-8 для этого есть отличный теплейтный тег — wp_loginout, он выводит ссылку на вход, если пользователь не авторизован, и на выход, если авторизован. Очень удобно.
Всё чудесно, но когда юзер разлогинивается, то его кидает на страницу авторизации админки(((
можно как-то доработать эту деталь? чтобы его допустим на главную редиректило?
Для того, чтобы пользователь возвращался на указанную страницу, можно использовать функцию wp_loginout, которая принимает $redirect. Например, чтобы пользоваель возвращался на главную старницу блога, следует написать что-то вроде:
wp_loginout(get_option('home'))
у нас последняя строчка в коде
<a href="/wp-login.php?action=logout&redirect_to=»>Log out
куда здесь добавить wp_loginout(get_option(‘home’))
???
<a href="/wp-login.php?action=logout&redirect_to=»>Log out
т.е.
всё..спасибо…настроил)
теперь следующая проблема
при вводе неправильного пароля тоже кидает в панель авторизации…
как теперь, что при неправильно вводе пароля выдавалось сообщение и выкидывало например на страницу с этим сообщением7
а в какие файлы эти коды вписывать?
Там, где хотите вывести форму входа
А у меня другой вопрос. Я подгрузила одну тему, а в ней нигде нет входа в админку. Как я могу войти в свою админпанель?
Я раньше тоже так вставлял в сайдбар логин-форму и ссылки которые мне необходимы для редактирования блога. Но все это муторно, к тому же нередко приходилось выносить новые ссылки — опять лезть в шаблон. В конечном счете, сделал плагин — активировал и порядок :)
Может кому пригодится: http://wp-kama.ru/id_127/plagin-dlya-legkogo-upravleniya-saytom-na-wordpress-versiya-3.html
Плагин универсальный получился — подойдет под любой шаблон.
Спасибо, реальный плагин!
Использую:-)
Люди! помоги ПОЖАЛУЙСТА зарегистрироваться на word press!!!!!!!!!
уже истыкала все,что возможно и ничего не получается!
Помогите. не работает кнопка Log Out в админке. Когда нажимаю на Log Out , не могу выйти с админки, выдаёт, что страница не может загрузиться. Так и на домене и на поддомине. Буду премного благодарна.
Спасибо за полезную информацию!