WordPress. Вход в админку с любой страницы блога

wordpressПродолжаю публиковать, по мере нахождения, переводы небольших, но весьма полезных заметок о расширении базовой функциональности шаблонов WordPress, без использования дополнительных плагинов.

И сегодня хочу вам представить небольшую статью, о том как можно вывести блок авторизации/регистрации пользователей WordPress в любое место вашего шаблона.

Итак в результате наших действий, мы получим вот такие блоки до и после авторизации.

до авторизации

после авторизации

 

Для начала определимся что именно нам нужно отобразить в этом блоке:

  1. Поле для ввода имени пользователя
  2. Поле для пароля
  3. Чекбокс для запоминания пароля
  4. Скрытое поле, сообщающее вордпрессу, куда перенаправить пользователя после авторизации
  5. Кнопку отправки данных
  6. Две ссылки, одну для регистрации, другую для восстановления пароля

Поскольку мы собираемся делать форму, работающую в любом шаблоне, мы будем использовать функцию get_option(’home’), которая получает полный путь, к папке в которой установлен WordPress.

[php]
<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]

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

Для того чтобы показывать форму входа/регистрации, только неавторизованным пользователям, мы воспользуемся функцией current_user_can(), с параметром level_0.

[php]
<?php if (!(current_user_can(‘level_0’))){ ?>
//код указанный выше
<?php } else { /*next to come*/}?>
[/php]

Последнее что осталось сделать, это написать код, для авторизованного пользователя, следующий после else

[php]
<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]

В результате у нас получился вот такой код, и вам остается только скопировать его и вставить в любом месте вашего шаблона:

[php]
<?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 }?>

[/php]

Оригинал статьи.


Posted

in

by

Comments

29 responses to “WordPress. Вход в админку с любой страницы блога”

  1. akm Avatar
    akm

    Удобно, секнс. В WP2.7. добавлена ф-ция wp_logout_url(%REDIRECT_URL%), которая автоматич. разлогинивает и редиректит по указанному пути 😉

  2. ferol Avatar

    а как можно вывести надпись Вы вошли как User

    1. dreamhelg Avatar
      dreamhelg

      Для этого нужно вставить одну строчку в список со ссылками для авторизованных пользователей:

        Вы авторизовались как user_login); ?> ...

      Эта строчка выведет имя пользователя блога.

  3. Тим Avatar
    Тим

    А если писать слова ЛОГИН и ПАРОЛЬ, русскими буквами, то отображаются кракозябры 🙁
    Как лечить?

    1. dreamhelg Avatar
      dreamhelg

      проверьте кодировку в который вы сохраняли файл, должна быть utf-8

  4. Vadim Avatar
    Vadim

    Здравствуйте!
    Вписал код в правый сайдбар. Все нормально отображается.
    Но когда входишь под именем зарегистрировааного пользователя, Надписи:
    Dashboard
    Write new Post
    Write new Page
    Log out
    выводятся вертикально в правом верхнем углу, а весь сайт опускается вниз.
    У меня шаблон от сайта:
    http://www.mangoorange.com (локализованный).
    Спасибо!

  5. Vadim Avatar
    Vadim

    Ошибся ! в леовм верхнем углу

    1. dreamhelg Avatar
      dreamhelg

      Возможны разные причины, но если такое поведение происходит после того как вы залогинились, возможно стоит изменить название класса для UL списка, скорее всего с таким же именем у вас в css есть другой класс. Вместо admin_box, напишите любое другое название.

  6. tatarinme Avatar

    а как сделать чтоб при автоизации пользователи отсавались на той страницы от куда они авторизовались чтоб она не заходили в админку???

    1. dreamhelg Avatar
      dreamhelg

      Вот так, как написано в этой статье. Авторизовавшись, они остануться на этой же странице.

  7. tatarinme Avatar

    ясно абобольшое !!!!

  8. Tima Avatar

    А что на счет регистрации? если нужно чтоб пользователь регился на одной из страничек?

    1. dreamhelg Avatar
      dreamhelg

      там в примере, одна из ссылок ведет к регистрации пользователей

  9. STROGOS Avatar

    >
    Вы авторизовались как
    user_login);
    ?>

    Она выводит добро пожаловать админ при любом пользователе..

  10. mse Avatar
    mse

    выхоту в статье не работает
    а работает он вот так 🙂

    <a href="” title=””>

    1. dreamhelg Avatar
      dreamhelg

      Справедливое замечание, а не работает он потому, что на момент написания статьи, был актуален вордпресс, версии 2.6, а в 2.7-8 для этого есть отличный теплейтный тег – wp_loginout, он выводит ссылку на вход, если пользователь не авторизован, и на выход, если авторизован. Очень удобно.

  11. Дмитрий Avatar

    Всё чудесно, но когда юзер разлогинивается, то его кидает на страницу авторизации админки(((
    можно как-то доработать эту деталь? чтобы его допустим на главную редиректило?

    1. dreamhelg Avatar
      dreamhelg

      Для того, чтобы пользователь возвращался на указанную страницу, можно использовать функцию wp_loginout, которая принимает $redirect. Например, чтобы пользоваель возвращался на главную старницу блога, следует написать что-то вроде:

      wp_loginout(get_option('home'))

      1. Дмитрий Avatar

        у нас последняя строчка в коде
        <a href="/wp-login.php?action=logout&redirect_to=”>Log out

        куда здесь добавить wp_loginout(get_option(‘home’))
        ???

  12. Дмитрий Avatar

    <a href="/wp-login.php?action=logout&redirect_to=”>Log out

    т.е.

  13. Дмитрий Avatar

    всё..спасибо…настроил)

    теперь следующая проблема
    при вводе неправильного пароля тоже кидает в панель авторизации…
    как теперь, что при неправильно вводе пароля выдавалось сообщение и выкидывало например на страницу с этим сообщением7

  14. ZOndeR Avatar
    ZOndeR

    а в какие файлы эти коды вписывать?

    1. dreamhelg Avatar
      dreamhelg

      Там, где хотите вывести форму входа

  15. Nadine Avatar

    А у меня другой вопрос. Я подгрузила одну тему, а в ней нигде нет входа в админку. Как я могу войти в свою админпанель?

  16. Kama Avatar

    Я раньше тоже так вставлял в сайдбар логин-форму и ссылки которые мне необходимы для редактирования блога. Но все это муторно, к тому же нередко приходилось выносить новые ссылки – опять лезть в шаблон. В конечном счете, сделал плагин – активировал и порядок 🙂

    Может кому пригодится: http://wp-kama.ru/id_127/plagin-dlya-legkogo-upravleniya-saytom-na-wordpress-versiya-3.html

    Плагин универсальный получился – подойдет под любой шаблон.

    1. Сергей Avatar

      Спасибо, реальный плагин!
      Использую:-)

  17. Estrella Avatar
    Estrella

    Люди! помоги ПОЖАЛУЙСТА зарегистрироваться на word press!!!!!!!!!
    уже истыкала все,что возможно и ничего не получается!

  18. Надежда Avatar
    Надежда

    Помогите. не работает кнопка Log Out в админке. Когда нажимаю на Log Out , не могу выйти с админки, выдаёт, что страница не может загрузиться. Так и на домене и на поддомине. Буду премного благодарна.

  19. Максим Avatar

    Спасибо за полезную информацию!

Leave a Reply to Vadim Cancel reply

Your email address will not be published. Required fields are marked *