WordPress: Panel Logowania w Sidebar

W WordPress zawsze mnie denerwowała strona logowania, nie tylko to, że wygląda inaczej niż zastosowana skórka. Nie podobała mi się konieczność wejścia w kolejną podstronę tylko po to aby się zalogować. I jeszcze jedno … po zalogowaniu następuje przekierowanie do profilu/admina, a ja chcę na stronę na której się logowałem! Praktyczny przykład: wchodzisz na stronę z postem, chcesz zostawić komentarz jako Ty, wpisujesz login oraz hasło, klikasz loguj i… jesteś zalogowany na stronie z postem w którym chcesz zamieścić komentarz. A teraz wyobraź sobie jak to się robi w „zwykłym” WP. Widać różnicę? No to zaczynamy.

Otwieramy w katalogu ze skórkami plik sidebar.php i wstawiamy w niego prosty kod wyświetlający formularz logowania, link do rejestracji i do przypomnienia hasła w przypadku niezalogowanych, natomiast w przypadku zalogowanych użytkowników link do profilu i wylogujący:

<li><h2>Meta</h2>
<?php
if ( is_user_logged_in() ) {
  global $userdata;
?>
  <ul>
<?php if ( $userdata->user_level == 10 ) { // Dla admina, zmien wg wlasnego uznania ?>
  <li><a href="<?php echo get_settings('siteurl'); ?>/wp-admin/index.php">Nowości</a></li>
  <li><a href="<?php echo get_settings('siteurl'); ?>/wp-admin/post.php">Dodaj wpis</a></li>
  <li><a href="<?php echo get_settings('siteurl'); ?>/wp-admin/moderation.php">Poczekalnia</a></li>
  <li><a href="<?php echo get_settings('siteurl'); ?>/wp-admin/plugins.php">Wtyczki</a></li>
<?php } ?>
  <li><a href="<?php echo get_settings('siteurl'); ?>/wp-admin/profile.php">Profil</a></li>
  <li><a href="<?php echo get_settings('siteurl'); ?>/wp-login.php?action=logout">Wyloguj się!</a></li>
  </ul>
<?php } else { ?>
  <form name="loginform" id="loginform" action="<?php echo get_settings('siteurl'); ?>/wp-login.php" method="post">
  <p><label><input type="text" name="log" id="log" value="" size="15" tabindex="5" /> Login</label></p>
  <p><label><input type="password" name="pwd" id="pwd" value="" size="15" tabindex="6" /> Hasło</label></p>
  <p><label><input type="submit" name="submit" id="submit_loguj" value="Loguj &raquo;" tabindex="8" /></label> <label><input name="rememberme" type="checkbox" id="rememberme" value="forever" tabindex="7" /> Pamiętaj mnie!</label></p>
  <input type="hidden" name="redirect_to" value="<?php echo rawurlencode( $_SERVER['REQUEST_URI'] ); ?>" />
  </form>
  <ul>
  <li><a href="<?php echo get_settings('siteurl'); ?>/wp-register.php">Rejestracja</a></li>
  <li><a href="<?php echo get_settings('siteurl'); ?>/wp-login.php?action=lostpassword">Zapomniane hasło</a></li>
  </ul>
<?php } ?>
</li>

Oczywiście dostępne linki (mowa głównie o tych dostępnych dla administratora) można zmienić wedle własnego uznania.

Następnie bierzemy się za plik wp-login.php.
Dla akcji login ( case ‘login’ ) zmieniamy domyślne przekierowanie (wp-admin) na główną stronę naszego bloga oraz odkodujemy przychodzący link przekierowania. Wymieniamy kod:

if ( !isset( $_REQUEST['redirect_to'] ) )
  $redirect_to = 'wp-admin/';
else
  $redirect_to = $_REQUEST['redirect_to'];

na:

if ( !isset( $_REQUEST['redirect_to'] ) || empty( $_REQUEST['redirect_to'] ) )
  $redirect_to = get_settings('siteurl').'/';
else
  $redirect_to = rawurldecode( $_REQUEST['redirect_to'] );

Aby również użytkownicy mający możliwość (uprawnienie) edycji postów byli przekierowani na stronę, z której się logowali, musimy zakomentować (lub usunąć) następujące linie:

/* if ( !$user->has_cap('edit_posts') && ( empty( $redirect_to ) || $redirect_to == 'wp-admin/' ) )
$redirect_to = get_option('siteurl') . '/wp-admin/profile.php'; */

I to w zasadzie tyle, choć jeszcze, aby wylogowywało nas na główną stronę (a nie na „starą” stronę logowania), dla akcji logout (case ‘logout’ w pliku wp-login.php) zmieniamy linijkę:

$redirect_to = 'wp-login.php?loggedout=true';

na

$redirect_to = get_settings('siteurl').'/';

i tyle (-:

Update:
Duży update posta do obecnej postaci jaka się u mnie prezentuje. Opisy na podstawie WordPress 2.1


13 Responses to “WordPress: Panel Logowania w Sidebar”

  • leksa Says:

    mnie tez to denerwowalo :D

  • Pit Says:

    Witaj mógłbyś zaktualizować to do 2.3

  • wallace Says:

    Szczerze, nie widzę takiej potrzeby, praktycznie nikt z tego nie korzysta, a po za tym w 2.3 idea jest taka sama, a drobiazgi niekompatybilne można samemu wyłapać i zmienić.

  • Patryk Dominiczak Says:

    Zastanawiam się dlaczego nie wyświetla się to w ogóle w bloku, tylko do tego dany blok ginie. Coś nie tak tutaj jest…

  • Patryk Dominiczak Says:

    Tak jak myślałem, mała poprawka:

    
    <li><h2>Meta</h2>
    <?php
    if ( is_user_logged_in() ) {
      global $userdata;
    ?>
      <ul>
    <?php if ( $userdata->user_level == 10 ) { // Dla admina, zmien wg wlasnego uznania ?>
      <li><a href="<?php echo get_settings('siteurl'); ? rel="nofollow">/wp-admin/index.php">Nowości</a></li>
      <li><a href="<?php echo get_settings('siteurl'); ? rel="nofollow">/wp-admin/post.php">Dodaj wpis</a></li>
      <li><a href="<?php echo get_settings('siteurl'); ? rel="nofollow">/wp-admin/moderation.php">Poczekalnia</a></li>
      <li><a href="<?php echo get_settings('siteurl'); ? rel="nofollow">/wp-admin/plugins.php">Wtyczki</a></li>
    <?php } ?>
      <li><a href="<?php echo get_settings('siteurl'); ? rel="nofollow">/wp-admin/profile.php">Profil</a></li>
      <li><a href="<?php echo get_settings('siteurl'); ? rel="nofollow">/wp-login.php?action=logout">Wyloguj się!</a></li>
      </ul>
    <?php } else { ?>
      <form name="loginform" id="loginform" action="<?php echo get_settings('siteurl'); ?>/wp-login.php" method="post">
      <p><label><input type="text" name="log" id="log" value="" size="15" tabindex="5" /> Login</label></p>
      <p><label><input type="password" name="pwd" id="pwd" value="" size="15" tabindex="6" /> Hasło</label></p>
      <p><label><input type="submit" name="submit" id="submit_loguj" value="Loguj &raquo;" tabindex="8" /></label> <label><input name="rememberme" type="checkbox" id="rememberme" value="forever" tabindex="7" /> Pamiętaj mnie!</label></p>
      <input type="hidden" name="redirect_to" value="<?php echo rawurlencode( $_SERVER['REQUEST_URI'] ); ?>" />
      </form>
      <ul>
      <li><a href="<?php echo get_settings('siteurl'); ? rel="nofollow">/wp-register.php">Rejestracja</a></li>
      <li><a href="<?php echo get_settings('siteurl'); ? rel="nofollow">/wp-login.php?action=lostpassword">Zapomniane hasło</a></li>
      </ul>
    <?php } ?>
    </li>

  • Patryk Dominiczak Says:

    Edit: coś nie bardzo mi wyszło umieszczenie kodu

  • wallace Says:

    Poprawiłem (chodziło o jeden zabłąkany slash ?), dzięki.

  • janusz Says:

    ja to uzywam i to nie do celow swoich tylko dla uzytkownikow.. prowadze strone kulinarna i dalej to skrypcik co napisales dla nich aby sie mogli logowac i dodawac przepisy

  • janusz Says:

    no ja mam 2.6.3 i jakos tych dodatkowcyh opcji nie moglem poprawic i zalapac…
    moze chcialbys pomoc. to wtedy mialbym wszytsko tak jak nalezy.
    chodzi o te przekirowania w wp-login itp

  • Maciek Says:

    No właśnie ja też chciałem tego użyć w nowszej wersji 2.6 albo 2.7 i się zaciąłem na zmianach. Czy jest szansa na uaktualnienie dla nowego WP?

  • tom Says:

    Możesz to poprawić do wersji 2.9.1 ?

  • goral21ss Says:

    Witam jestem świeży w temacie WordPress i chciałem się dowiedzieć czy na WP można postawić niewielki portal informacyjny i czy można tak zmodyfikować panel użytkownika by można było przesyłać wiadomości między zarejestrowanymi użytkownikami?