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.
Ab WordPress 3.0
Ab der Version 3.0 geht das alles ein wenig einfacher und es gibt eine Funktion für das Formular um den User das Einloggen zu ermöglichen. Folgende Parameter sind möglich.
wp_login_form(array(
'echo' => true,
'redirect' => site_url($_SERVER['REQUEST_URI']),
'form_id' => 'loginform',
'label_username' => __('Username'),
'label_password' => __('Password'),
'label_remember' => __('Remember Me'),
'label_log_in' => __('Log In'),
'id_username' => 'user_login',
'id_password' => 'user_pass',
'id_remember' => 'rememberme',
'id_submit' => 'wp-submit',
'remember' => true,
'value_username' => ,
'value_remember' => false
));
Damit könnte ein Login wie folgt aussehen:
global $user_login;
if (is_user_logged_in()) {
echo __( 'Hello', FB_BASIS_TEXTDOMAIN ) . $user_login . '<a href="' . wp_logout_url() . '" title="' . __( 'Logout', FB_BASIS_TEXTDOMAIN ) . '">' . __( 'Logout', FB_BASIS_TEXTDOMAIN ) . '</a>';
} else {
wp_login_form();
}