Für Menschen · Seien Sie begeistert und Sie werden begeistern !
WordPress bringt eine eigene User-Verwaltung mit und so kann man auch auf Grund diverser Rollen und Objekte die Inhalte steuern. In einigen Fällen ist es eine typische Anforderung, dass man den kompletten Inhalt nur den registrierten Usern zugänglich macht. Gleiches gilt natürlich auch für Teile des Content. Es gibt sicher verschiedene Anwendungen - einige kleine Lösungsvorschläge möchte ich hier kurz vorstellen.
Eine einfache Möglichkeit ist die Abfrage der Rechte - die WordPress-Funktion current_user_can() erlaubt dies und kann einfach in Templates des Themes verwendet werden. Somit kann man steuern, dass nur geloggte User mit den entsprechenden Rechten den Inhalt sehen.
Im einfachsten Fall könnte man dies wie folgt im Template einbauen:
if ( current_user_can( 'manage_options' ) )
the_content( the_title( '', '', false ) . ' ' . __( 'weiterlesen »', FB_BASIS_TEXTDOMAIN ) );
else
_e( 'Nur für geloggte User zugänglich', FB_BASIS_TEXTDOMAIN );
Ohne die einzelnen Rechte abzufragen genügt die Abfrage mittels der Funktion is_user_logged_in(). Damit wird geprüft, ob der User geloggt ist.
Hier gibt es sicher diverse Ansätze und Möglichkeiten, die aber leicht nutzbar sind und trotzdem die unterschiedlichen Rollen und Objekte berücksichtigen. Die Objekte je Rolle sind übersichtlich im Codex beschrieben.
Nun ist die Integration im Template recht einfach, sorgt aber dafür dass man in der Regel jedes Template anpassen muss. Da WordPress mit Hooks arbeitet, kann man hier auch einhaken und zentral via Plugin oder functions.php im Theme eine Funktion dafür ablegen.
Die folgende Funktion ist so ein Beispiel und prüft in dem Fall unabhängig von den Rechten, sondern lediglich ob der User geloggt ist - wenn ja, dann darf der Inhalt gesehen werden. Über den Hook the_content wird hier zentral gesteuert - so dass die Ausgabe im Theme, welche via dem Template Tag the_content() kommt, nur dann den Content wieder gibt, wenn man als User geloggt ist.
Parallel wurde hier auch explizit im Feed nur ausgegeben, wenn man geloggt ist - !is_feed().
Als Alternative für nicht geloggte User wird ein Abschnitt des Content ausgegeben - dazu gibt es verschieden Ansätze, hier wurde explizit mit Zeichen gearbeitet. So entsteht quasi ein Teaser für den Leser.
function content_only4logged_in($content) {
// alle geloggten User
if ( is_user_logged_in() &&
!is_null($content) &&
!is_feed()
) {
return $content;
} else {
$content = wp_html_excerpt( $content, 80 );
$content .= ' …';
$content .= __( '
Sorry, more of this content is only available for logged users.', FB_TEXTDOMAIN );
return $content;
}
}
add_action( 'the_content', 'content_only4logged_in' );
Eine weitere Alternative ist es, nur einen bestimmten Abschnitt des Content nur für geloggte User frei zu geben. Dies könnte man beispielsweise über die Shortcode-API von WordPress tun. Auch dazu ein Beispiel. Hier wird der Shortcode [member] eingesetzt. Alles innerhalb dieses Elementes ist nur für geloggte User sichtbar.
Auch dieser Code gehört in ein Plugin oder die Schnittstelle des Themes für neue Funktionen.
function fb_check_logged_in( $atts, $content = null ) {
if ( is_user_logged_in() &&
!is_null($content) &&
!is_feed()
) {
return $content;
} else {
return __( 'Sorry, this content is only available for logged users.', FB_TEXTDOMAIN );
}
}
add_shortcode( 'member', 'fb_check_logged_in' );
Eine denkbare Alternative ist auch das Ausgeben von Inhalten nach einem bestimmten Zeitraum. Diese Möglichkeit kann sicher beliebig erweitert werden. So lohnt sicher die Erweiterung um eine Metabox zur Eingabe eines Datums an den Beiträgen oder Erweiterung von Parametern um den Zeitrahmen in einem Shortcode abzufragen.
function content_only4time($content) {
$date = strtotime( '01-10-2010' ); // day-month-year
$now = strtotime( date('d-m-Y') );
echo $now . ' - ' . $date;
if ( $date && ( $date < $now ) ) {
return $content;
} else {
return __( '
Sorry, die Zeit ist noch nicht reif.', FB_TEXTDOMAIN );
}
}
add_action( 'the_content', 'content_only4time' );
In diesem Zusammenhang kann das Plugin wpSleep genutzt werden, welches via Shortcode und den Parametern der Zeit die Ausgabe steuert.
Die Liste der Ansätze und vor allem der Möglichkeiten lässt sich beliebig fort führen - mit den Möglichkeiten kommt man eventuell auf eigene Ideen und kann die aufgezeigten Ansätze nutzen. Gern können weitere Ideen und Möglichkeiten in den Kommentaren untergebracht werden.
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 980 Beiträge, 18722 Kommentare in 14 Kategorien und 464 Tags.
Das Blog wird liebevoll mit xHTML & CSS in Handarbeit gestaltet. Erstellt mit ♥ zum Befüllen und Erhalten.
Design und Code ist unter Copyright
© 2001 - 2012 bueltge.de [by:ltge.de]
4. August 2010 um 17:51
Ich habe es mit einer recht kurzen FAssung an entsprechender Stelle in einem Plugin wo gelöst:
if (!is_user_logged_in())Funktioniert genau so gutreturn;
4. August 2010 um 18:55
@Dirk: ja, dass ist ja der erste Ansatz, wobei ich nich das Objekt einschränke. Die Abfrage habe ich drin - nur diese beachtet aber den Feed nicht, eventuell beachten.
4. August 2010 um 20:53
Dies ist dann der Punkt an dem gekürzte Feeds Sinn machen. Jetzt mal so als Argument gegen die Fullfeed-Evangelisten.
Der eingeloggt User bekommt den kompletten Text zu sehen, während im Feed nur der Auszug veröffentlicht wird. Dann kann man die Abfrage ob es ein Feed ist vernachlässigen.
Wer im Feed zwischen angemeldete und nicht angemeldete User unterscheiden will, muss jedem User eine einzigartige (oder neudeutsch: unique) Feed-Adresse generieren. Als Beispiel:
example.com/blog/feed?user_id=user0815. Denkbar wäre es diese Feedadresse im Profil einzublenden. Andernfalls müsste man im Theme nacharbeiten und bei eingeloggten Usern die User-ID an die Feedadresse anhängen.Im Plugin kann man dann auswerten ob ein entsprechender Parameter übergeben wurde:
if(is_feed && isset($_GET['user']) { trallali }Der Aufwendigste Teil besteht dann darin, die Zuordnung ID zu User herzustellen. Ggf. kann man eine entsprechende ID in den Metadaten des Users ablegen und mit einer DB-Abfrage vergleichen.
Diese Lösung ist nun nicht 100% sicher, da man die Feedadresse auch weiter geben kann. Sie stellt jedoch einen kleinen Workaround dar wenn man auf gekürzte Feeds aus irgend welchen Glaubensgründen verzichten möchte oder muss.
4. August 2010 um 23:44
Na ja, es handelt sich dabei „nur“ um die Abfrage bei einem Widget
5. August 2010 um 09:25
@Ralf: ja, ich würde schon den Feed speisen, ebene excerpt - solche Sachen sind ja meist für Bezahl-content; daher ist dieser Artikel entstanden. Mitunter ist es ja auch einfach Content für eine gesperrte Nutzergruppe und dann muss man auch nix im offenen Feed einspeisen, den würde ich dann lieber ganz weg nehmen oder eben nur registrierten Usern geben. Man kann ja dynamisch Feeds erstellen via Hook und die Adresse mit dem usernamen ausgeben, der dann kein PW benötigt und so sind die Inhalte über jeden Reader abrufbar.
23. August 2010 um 19:49
Hallo Frank,
in der Vergangenheit habe ich auch mit dem WordPress Plugin "User Access Manager" ganz gute Erfahrungen zur Nutzerverwaltung gemacht. Mit diesem Plugin kann man recht einfach verschiedene Kategorien anlegen, die nur von bestimmten festgelegten Gruppen noch dem Login gesehen werden.
Ob das Plugin auch mit WordPress 3 läuft, habe ich allerdings noch nicht getestet. Mit WordPress 2.9 lief es jedenfalls problemlos.
Eine selbst programmierte Kontrolle der Nutzerrechte ist natürlich noch besser, aber in manchen Fällen reicht eventuell schon ein Plugin. Die Idee der zeitabhängigen Ausgabe klingt spannend.
Gruß, Jan
3. Juni 2011 um 21:14
gibt es eine Möglichkeit usern die Sich für Inhlat meiner Seite registriert haben den Zugang zu wp-admin komplett zu verwehren aber trotzdem würde ich gerne das Usermangement von WordPress verwenden?
3. Juni 2011 um 22:38
@Niko: ja, in dem du ihen den Bereich verbietest und immer ein Redirect auf deine Wunschseite setzt. Geht mit dem Plugin Adminimize, in dem du das Dashboard und Profil für Rolle Leser deaktivierst und ein Redirect einstellst oder mit eigenem Code via wp_redirect
5. Juni 2011 um 15:55
kann ich die Ausgabe des Inhalts auch nach bestimmten Usern filtern?
also if user a { gib mir pagename==a } if unser b { gib mir pagename==b} etc.
Lieben Gruß Niko
6. Juni 2011 um 16:06
@NIko: ja, ist ebenso möglich. Du kannst dir den User ausgeben lassen und abgleichen, eventuell via get_the_author()