Wer seinen WordPress-Weblog so einstellt, dass neue User sich registrieren können, der ist vielleicht mit dem gleichen Problem wie Ralf konfrontiert. Nach einer Anmeldung bei Verwendung des Template-Tag wp_loginout()
wird man zur Profilseite bzw. zur Index weiter geleitet – warum nicht auf eine andere Seite ?
Mich hatte beim Einloggen in WordPress immer gestört das man nach dem Login im Profil landet. Das ist besonders dann ärgerlich, wenn man unangemeldet im Blog ein wenig gestöbert hat, dann einen Kommentar hinterlassen will und nach dem Login halt im Profil anstatt im Beitrag landet. So muss man u.U. mühsam den Beitrag wieder raus suchen bei dem man seinen Kommentar hinterlassen will.
Etwas eleganter lösen kann man den Login indem man den Besucher nach dem Einloggen genau auf die Seite zurück leitet, die er vor dem Login angeschaut hat.
WordPress erlaubt einen Redirect (Umleitung) mittels der Variablenredirect_to=URL"
. Dabei muss man die komplette URL inkl.http://
übergeben. Leider unterstützt die Funktionwp_loginout()
nicht direkt einen Redirect mittels Parameter.
Eine passende Lösung hat Ralf parat, bei der nur ein recht kleiner Codeschnipsel anstatt der Funktion wp_loginout()
im Template integriert werden muss.
In meinem konkreten Fall wird WordPress als Dokumentationstool für ein Entwicklerprojekt genutzt und verschiedene User pflegen die Dokumentation. Diese Anwender wollten nun gern direkt nach einem Login in den Editiermodus – in diesem Fall sieht der Code dann folgendermaßen aus.
<?php
$redirect = 'wp-admin/post-new.php';
if (!is_user_logged_in()) {
$link = '<a href="' . get_settings('siteurl') . '/wp-login.php?redirect_to='.$redirect.'">' . __('Login') . '</a>';
}
else {
$link = '<a href="' . get_settings('siteurl') . '/wp-login.php?action=logout&redirect_to='.$redirect.'">' . __('Logout') . '</a>';
}
echo apply_filters('loginout', $link);
?>
Mit WordPress Version 2.7 wurden neue Funktionen eingeführt, die die obige Syntax nicht ohne weiteres erlauben. Möglich ist der Filter loginout
aber weiterhin. Daher nutzt bitte das folgende Beispiel und passt es an eure Wünsche an.
<?php
$redirect = 'wp-admin/post-new.php';
if ( !is_user_logged_in() ) {
$link = '<a href="' . esc_url( wp_login_url( $redirect ) ) . '">' . __('Login') . '</a>';
} else {
$link = '<a href="' . esc_url( wp_logout_url( $redirect ) ) . '">' . __('Logout') . '</a>';
}
echo $link;
?>
Alternativ ebenso ein Beispiel über den Filter loginout
.
<?php
$redirect = '/wp-admin/post-new.php';
if ( !is_user_logged_in() ) {
$link = '<a href="' . get_option('siteurl') . $redirect . '">' . __('Login') . '</a>';
} else {
$link = '<a href="' . get_option('siteurl') . $redirect . '">' . __('Logout') . '</a>';
}
echo apply_filters('loginout', $link);
?>
Hallo Frank,
danke für den Quellcode. Ich habe ihn für meine Zwecke etwas geändert.
<php $link = '<a href="'.get_settings('siteurl').'/wp-login.php?redirect_to='.get_permalink().'">'.__('Login').'</a>'; >
Ich möchte verhindern, daß die Leser auf das Dashboard gelangen. Das ist auch Alles prima sofern sie nicht direkt die wp-login.php aufrufen.
Gibt es eine Möglichkeit das man nicht in das Dashboard gelangt?
Grüße
der Denis
Soll das Dashboard komplett entfernt werden? oder soll nur der Link auf eine andere Seite führen, z.B. Verwalten? Beides geht.
Moin Frank,
das Dashboard soll bleiben, nur der Leser soll nicht ins Backend. Das soll nur über WP-ADMIN gelingen (Das werde ich mit einem Verzeichnisschutz sperren). Ich habe jetzt in der wp-login.php in Zeile 294 das redirect_to geändert und nur ein / eingeführt. Klappt alles. Komisch ist nur. Wenn ich mit dem iE7 die Seite http://www.denis-online.de/wp-login.php aufrufen werde ich sofort umgeleitet auf http://www.denis-online.de im Firefox passiert das nicht. Nach dem Login ist alles prima.
Grüße
der Denis