Für Menschen · Seien Sie begeistert und Sie werden begeistern !
Vor geraumer Zeit habe ich mal einen kurzen Artikel veröffentlicht, in dem ich gezeigt habe, wie man die Links zum Ein- und Ausloggen in WordPress nutzt. In diesem Artikel möchte ich nun ein wenig weiter gehen und zeigen, wie man beispielsweise das Login-Formular in das Theme holt. Damit sind Anpassungen an das Design und die Integration an die eigenen Bedürfnisse sehr einfach umzusetzen.
Im ersten Fall möchte ich euch das klassische Login Formular zeigen, so dass es nicht gleich zu viel Code wird. Die folgende Syntax stellt dabei ein einfaches Login Formular im Theme dar. Ich habe keine weiteren Anpassungen vorgenommen und habe mich am Standard von WordPress orientiert.
<form action="<?php echo wp_login_url( get_permalink() ); ?>" method="post">
<label for="log">
<input type="text" name="log" id="log" value="<?php echo wp_specialchars(stripslashes($user_login), 1) ?>" size="22" /> User
</label><br />
<label for="pwd">
<input type="password" name="pwd" id="pwd" size="22" /> Password
</label><br />
<input type="submit" name="submit" value="Send" class="button" />
<label for="rememberme"><input name="rememberme" id="rememberme" type="checkbox" checked="checked" value="forever" /> Remember me</label>
</form>

Nun ist das nicht immer ausreichend und abhängig von den Usern, die geloggt sind, und ob man sich überhaupt im Theme registrieren kann, habe ich ein kleines Beispiel geschrieben, welches diverse Aspekte beachtet.
Mit der folgenden Syntax ist dabei die Ansicht für geloggte User (if ( $user_ID )) eine völlig andere und neue User bekommen das Formular nur dann, wenn sie sich registrieren dürfen (get_option('users_can_register')); abhängig von den Einstellungen im Backend von WordPress.
Ebenso bekommen User, die ein User_Level größer 1 (if ( $user_level >= 1 )) haben, einen Link mehr, direkt zum Schreiben eines Artikels. Alternativ kann hier auch mit der Funktion current_user_can() gearbeitet werden und daher explizit das Objekt der Rolle abgefragt werden.
<?php
global $user_ID, $user_identity, $user_level;
if ( $user_ID ) { ?>
<h3><?php _e( 'Control panel', FB_BASIS_TEXTDOMAIN ); ?></h3>
<ul>
<li><?php _e( 'Identified as', FB_BASIS_TEXTDOMAIN ); ?> <strong><?php echo $user_identity ?></strong>.
<ul>
<li><a href="<?php bloginfo('url') ?>/wp-admin/"><?php _e( 'Dashboard', FB_BASIS_TEXTDOMAIN ); ?></a></li>
<?php if ( $user_level >= 1 ) { ?>
<li><a href="<?php bloginfo('url') ?>/wp-admin/post-new.php"><?php _e( 'Write an article', FB_BASIS_TEXTDOMAIN ); ?></a></li>
<?php } ?>
<li><a href="<?php bloginfo('url') ?>/wp-admin/profile.php"><?php _e( 'Profile', FB_BASIS_TEXTDOMAIN ); ?></a></li>
<li><a href="<?php wp_logout_url( urlencode($_SERVER['REQUEST_URI']) ); ?>"><?php _e( 'Exit', FB_BASIS_TEXTDOMAIN ); ?></a></li>
</ul>
</li>
</ul>
<?php } elseif ( get_option('users_can_register') ) { ?>
<h3><?php _e( 'Identification', FB_BASIS_TEXTDOMAIN ); ?></h3>
<ul>
<li>
<form action="<?php echo wp_login_url(get_permalink()); ?>" method="post">
<p>
<label for="log">
<?php _e( 'User', FB_BASIS_TEXTDOMAIN ); ?>
<input type="text" name="log" id="log" value="<?php echo wp_specialchars(stripslashes($user_login), 1) ?>" size="22" />
</label><br />
<label for="pwd">
<?php _e( 'Password', FB_BASIS_TEXTDOMAIN ); ?>
<input type="password" name="pwd" id="pwd" size="22" />
</label><br />
<input type="submit" name="submit" value="<?php _e( 'Send', FB_BASIS_TEXTDOMAIN ); ?>" class="button" />
<label for="rememberme">
<input name="rememberme" id="rememberme" type="checkbox" checked="checked" value="forever" /><?php _e( 'Remember me', FB_BASIS_TEXTDOMAIN ); ?>
</label><br />
<input type="hidden" name="redirect_to" value="<?php echo $_SERVER['REQUEST_URI']; ?>"/>
</p>
</form>
</li>
<li>
<a href="<?php echo site_url('wp-login.php?action=register', 'login'); ?>"><?php _e( 'Register', FB_BASIS_TEXTDOMAIN ); ?></a>
</li>
<li>
<a href="<?php echo site_url('wp-login.php?action=lostpassword', 'login'); ?>"><?php _e( 'Recover password', FB_BASIS_TEXTDOMAIN ); ?></a>
</li>
</ul>
<?php } ?>
Wem die User-Level nicht ausreichen, der kann WordPress auch erweitern, entweder via Code, hier erklärt, oder mit Hilfe eines Plugins.
Mit Hilfe von einigen Zeilen PHP kann schnell ein Berechtigungsobjekt einer Rolle zugewiesen werden, beispielsweise in beim Aktivieren des Theme wie folgt.
function my_new_object() {
global $wp_roles;
$wp_roles->add_cap('administrator', 'MyObject');
}
// start an activation theme
if ( is_admin() && isset($_GET['activated'] ) && $pagenow == 'themes.php' )
my_new_object();
Das Objekt kann dann einfach via Standard angefragt werden.
if ( current_user_can('MyObject') )
Alternativ kann man natürlich auch neue Rollen anlegen: add_role('Neue_Rolle', 'Neuer Name der Rolle');. Die Funktion erlaubt auch das gleichzeitige übernehmen von Rechten, dazu steht der dritte optionale Parameter bereit, der mehrere Werte in einem Array erwartet. Ansonsten die Objekte via add_cap() hinzufügen.
Das ist nur ein kleiner Ansatz, viele Möglichkeiten ergeben sich - viel Erfolg beim Nutzen der Möglichkeiten.
Ich bin urlaubsreif, ersticke in Arbeit und damit auch für die Leser des Weblogs nicht zu erreichen. Bitte geduldet euch ein wenig mit Supportanfragen.
Leider muss ich die Kommentarfunktion deaktivieren, ansonsten würde ich weiter in Arbeit ersticken oder die Anfragen nicht nach bestem Gewissen beantworten.
Vielen Dank für das Verständnis!
bueltge.de [by:ltge.de] wird von Frank Bültge geführt, administriert und gestaltet. Alle Inhalte sind persönlich von mir ausgewählt und erstellt, nach bestem Gewissen und Können, was die Möglichkeit von Fehlern nicht ausschließt.
Das Weblog wird angetrieben von WordPress und aktuell gibt es 854 Beiträge, 15040 Kommentare in 14 Kategorien und 450 Tags.
Das Blog wird liebevoll mit xHTML & CSS in Handarbeit gestaltet.
Design und Code ist unter Copyright
© 2001 - 2010 bueltge.de [by:ltge.de]
3. November 2009 um 20:24
Schicker Artikel, dachte zunächst mkay das ist ja nicht viel was man das beschreiben kann, aber dein Panel ist echt cool
Grüße Michael
4. November 2009 um 08:51
@Michael P.: Vielen Dank, freut mich! Insbesondere kann man so besser anpassen und holt sich nicht wieder die Abhängigkeit eines Plugins ins Haus, wo es doch eine reine Funktion von WP im Theme ist bzw. sein kann.
7. November 2009 um 22:26
Ich habe mein Login-Formular als Widget umgesetzt. Dadurch bin ich auch noch ein wenig unabhängiger im Einsatz da es mit jedem Widget-fähigen Theme zusammen arbeiten sollte. Aber im Grunde genommen ist es das gleiche wie bei dir. Ein, zwei Abfragen rein was der User kann und dementsprechend ein, zwei Icons mehr oder weniger dargestellt.
17. November 2009 um 13:22
Hallo Frank,
wie kann man Deine super Erweiterung umschreiben, wenn das Registrieren im Blog nicht aktiv ist und ich trotzdem gern ein Login verwenden möchte.
Danke und Grüße
Micha
17. November 2009 um 15:41
@Micha: das Regsitrieren hat keine Relevanz; das ist ja nur zur Prüfung; wenn du also das Regsitrieren nicht aktiv hast, dann wird dieser Bereich auch nie geladen. Sondern immer nur das einfache Login-Form.
17. November 2009 um 16:01
@Frank: aber dann wird das gesammte Formular nicht angezeigt. Sobald man Registrieren im Blog aktiviert, sieht man auch das Formular.
Grüße Micha
18. November 2009 um 09:49
@Micha: Mit Hilfe von $user_ID wird geprüft, ob der user geloggt ist, wenn nicht, dann wird das Form nur gezeigt, wenn man sich registrieren kann. Wenn du aber einfach ein Form möchtest zum Einloggen, dann sollte das erste Form im Beitrag genügen. Alternativ muss der PHP-Code im zweiten Code-Bereich des Artikels geändert werden.
22. November 2009 um 21:36
Danke!
1. Dezember 2009 um 12:38
@Frank
ich bin gerne abhängig von einem Plugin wenn es verlässlich arbeitet. Erspart es mir doch jede Menge Zeit die ich anderweitig nutzen kann. Da ich aber jetzt anfange selbst Themes zu bauen, könnte ich Deine Lösung direkt in das neue Theme mit einbauen wenn das geht und ich das darf?
LG MXWorker
1. Dezember 2009 um 13:41
@MXWorker: ja, sicher; einfach nutzen
4. Dezember 2009 um 22:12
thx klappt perfekt bis auf den logout....
esc_url( wp_logout_url( urlencode($_SERVER['REQUEST_URI']) ) );
hab ich geändert in wp_logout_url(urlencode($_SERVER['REQUEST_URI']));
esc_url hab ich entfernt
gruss
18. Dezember 2009 um 18:43
Hallo, das ist ja alles genjal. Echt klasse.
Als Wordpress neuling habe ich mir ein shop aufgebaut wo sich die kunden regestrieren müssen jedoch so haben sie die möglichkeit auf das dashboard zu zugreifen was ich eigentlich nicht möchte.
Da mir deine Ihre Artikel sehr gut gefallen haben und das was ich gefunden habe auch benutzen könnte, dachte ich frag mal hier was für möglichkeiten ich habe.
Ich suche die möglichkeit das Kunden sich einlogen können aber nicht auf das dashboard zugreifen (only frontend) können oder das ich dort die möglichkeit habe ihre Rechnungen anzeigen zu lassen. Aber dann so das ich auch dort Bilder oder Banner einbinnden kann.
Über tipss infos Plugins oder codes würde ich mich sehr freuen
lg Sven
20. Dezember 2009 um 21:35
@Sven: Adminimize als Plugin einsetzen und du kannst umleiten; es gibt bestimmt auch noch andere Plugins die das können; alternativ selber bauen wp_rewrite()