Mitunter nutzt man die Funktion der privaten Beiträge in WordPress. Diese Beiträge kann nur der User sehen, der sie erstellt hat, bzw. die Rolle des Administrators. Um alle Usern diese Artikel zu zeigen, die im System angemeldet sind, kann man verschiedene Wege gehen. Ich möchte mal zwei unterschiedliche Wege kurz aufzeigen.
Mit Benutzerdefinierten Feldern
Mit Hilfe der Benutzerdefinierten Feldern wird ein neues Feld private
gepflegt; wenn man den Post sehen darf, dann ist dieses Feld mit dem Wert true
zu pflegen. Dieses Feld fragen wir dann in der Loop bei der Ausgabe im Frontend ab.
if ( have_posts() ) :
while ( have_posts() ) : the_post();
// the loop
$private = get_post_custom_values('private'); // read custom field
if ( isset($private[0]) && $private == 'true' ) {
if ( is_user_logged_in() ) {
// display private post, only logged users
}
} else {
// display public post, for every visitors
}
endwhile;
endif;
Mit Berechtigungsobjekt
Eine andere Methode ist es via Funktion das Berechtigungsobjekt der entsprechenden Rolle zu geben. Dies kann man mit Hilfe eines Plugins tun, zum Beispiel Members, oder einfach mit einem kleinen Codeschnipsel in functions.php
des Themes. Der jeweilige Schnipsel muss nur einmal aufgerufen werden, danach kann er entfernt bwz. auskommentiert werden, da das Berechtigungsobjekt in der Datenbank abgespeichert wird.
Das Hinzufügen des Berechtigungsobjektes zum Lesen privater Beiträge read_private_posts
zur Rolle des Autors author
. Handelt es sich um Seiten, dann ist das Objekt read_private_pages
abzufragen.
function fb_add_cap2role() {
global $wp_roles;
$wp_roles->add_cap('author', 'read_private_posts');
}
add_action( 'init', 'fb_add_cap2role' );
Ebenso können die Rechte natürlich wieder entfernt werden, dies geht beispielsweise mit der folgenden kleinen Lösung.
function fb_remove_cap2role() {
global $wp_roles;
$wp_roles->remove_cap('author', 'read_private_posts');
}
add_action( 'init', 'fb_remove_cap2role' );