Private WordPress Beiträge für geloggte User zeigen

Die Zeiten ändern sich.

Dieser Beitrag scheint älter als 13 Jahre zu sein – eine lange Zeit im Internet. Der Inhalt ist vielleicht veraltet.

WP Adventskalender 08
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' );

Von Frank Bültge

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.