Memberbereich für Wordpress

Wer Wordpress als CMS einsetzt, wird sich zwar freuen, wie einfach die Verwaltung der Website funktioniert, aber viele Webseiten benötigen nicht nur einen öffentlichen Webauftritt, sondern auch einen besonderen, passwortgeschützen Bereich, auf den nur registrierte Benutzer Zugriff haben, landläufig auch Memberbereich genannt. In einer Standardinstallation kann man Wordpress zwar so einstellen, dass sich jeder registrieren kann, aber man hat keine Möglichkeit einen Memberbereich zu gestalten.

Da eine Bekannte von mir so etwas ähnliches wollte, habe ich mich mal damit beschäftigt.

Unter den vielen Plugins, die etwas in dieser Richtung anbieten, sind mir zwei besondere Perlen aufgefallen. Dies wäre zum einen User Access Manager und zum anderen Sidebar Login. Beide Plugins ergänzen sich gegenseitig sehr gut. Während UserAccess Manager dafür sorgt, dass Seiten und Artikel erstellt werden können, die nur bestimmte Nutzergruppen sehen können, stellt Sidebar Login ein Login-Widget für die Sidebar zur Verfügung.

User Access Manager

usam.jpg Mittels dieses Plugins kann man eine beliebige Anzahl von Benutzergruppen anlegen und dort jeweils festlegen, was diesen Benutzergruppen erlaubt ist. Sowohl Artikel, Seiten als auch Kategorien können dann den Benutzergruppen zugeordnet werden und können dann nur noch von Mitgliedern dieser Benutzergruppe gelesen werden. Das Plugin sorgt u.a. auch dafür, dass die Standard-Funktionen von Wordpress so überschrieben werden, dass sie diese Einstellungen beachten. Man braucht also keine Änderungen im Theme durchführen, z.B. wird die Liste der Wordpress-Seiten automatisch passend zum gerade eingeloggten Benutzer zusammengestellt. Ebenso sind automatisch alle für den Benutzer nicht lesbaren Artikel im Blog verschwunden.

Zusätzlich kann auch der Upload-Ordner geschützt werden, sodass Bilder darin auch nur noch von eingeloggten Benutzern geöffnet werden können. Der Webserver wird per .htaccess-Datei so konfiguriert, dass Zugriffe über Wordpress (z.B. Bilder aus der WP-Mediathek) ganz normal angezeigt werden, direkte Zugriffe über die URL erfordern dagegen eine Passwort-Abfrage. So kann man sich also sicher sein, dass sowohl die Seiten selbst nur für Benutzer angezeigt werden, als auch die verlinkten Medien (Bilder, Videos, etc.).

Um als Admin nicht den Überblick zu verlieren, erhalten geschützte Seiten und Artikel standardmässig einen erweiterten Namen, sodass man sehr einfach sieht, was jeder lesen kann und was nicht.

Die Installation des Plugins geht einfach von der Hand, mehr als die normale Plugin-Installation ist nicht notwendig. Nach Anlegen der ersten Benutzergruppe können auch direkt die Artikel zugewiesen werden.Auf jeden Fall eine Top-Empfehlung!

Sidebar Login

sidebarlogin_0.jpg Wenn man für seine Seite viel Mühe ins Design und CSS gesteckt hat, möchte man seinen Besuchern nur ungern den Standard-Wordpress-Login zumuten, da dieser vom Seiten-Design komplett unabhängig ist. Ausserdem ist es sowieso eine gute Idee, die normale Login-Seite auf eine andere URL umzubiegen, um etwas Schutz vor automatisierten Einbruchsversuchen zu haben.

Mittels Sidebar Login erhält man deshalb ein Widget, das sich wie jedes andere Widget in der Sidebar auch ans normale Seiten-Design hält und dort eine Login- sowie eine Logout-Möglichkeit zur Verfügung stellt. Installieren, Widget hinzufügen, fertig. Man kann noch konfigurieren, ob diverse Zusatzlinks in der Login-Box angezeigt werden sollen (z.B. das Dashboard) bzw. auch eigene Links eingeben. Sehr einfach und wieder eine Top-Empfehlung!

Was ich übrigens leider noch nicht gefunden habe, ist eine schönere Möglichkeit eine Benutzerregistrierung zur Verfügung zu stellen. Es gibt zwar ein paar Plugins, aber mir hat keins richtig zugesagt. Da meine Bekannte ihren Benutzern die Logins aber sowieso selbständig zur Verfügung stellt, ist das in diesem Fall erstmal egal.

Worauf man aber achten sollte ist, dass die registrierten Benutzer nur den Rang “Abonnent” erhalten, damit sie in der Admin-Oberfläche keinen Unfug anstellen können. ;)

Bessere Suche für Wordpress

Es gibt in der Blogosphäre eine Menge Artikel, die sich mit einer besseren Suche in Wordpress-Blogs beschäftigen. Die Ursache ist ganz klar: die Standardsuche von Wordpress ist in größeren Blogs nicht mehr zu gebrauchen. Die Anzeige von allen gefundenen Artikeln mit dem gesamten Text untereinander, ist bei mehr als 10 Artikeln einfach nur noch unübersichtlich.

Auch ich habe mich deshalb damit beschäftigt und ich bin nun recht zufrieden. Ich nutze dazu momentan zwei Plugins:

Autocompleter

Vorschlagsliste beim Suchen mit Plugin Autocompleter Autocompleter ist schnell und unkompliziert installert und sorgt dafür, daß im Suchfeld oben rechts mittels Ajax (Javascript) eine Vorschlagsliste mit zur Eingabe passenden Tags und Kategorien erscheint. Da ich hier überhaupt keine Kategorien benutze, habe ich natürlich die Kategoriesuche ausgeschaltet. Zuerst habe ich überlegt, das Plugin so umzuschreiben, dass auch noch Titel und Text von Artikeln durchsucht werden. Aber nach kurzem Überlegen habe ich mich dagegen entschieden. Die kurzen Sucheingaben die man typischerweise in solchen Eingabefeldern eingibt, würden die Vorschlagsliste schnell sprengen. Außerdem hätte dies nicht unerhebliche Auswirkungen auf die Datenbank-Performance.

Einzige Voraussetzung damit Autocompleter out-of-the-box funktioniert ist, dass das Theme das Eingabefeld mit der ID “s” belegt. Dies sollte im Regelfall aber immer so sein.

Better Search

Suchergebnisse mit dem Plugin Better Search “Better Search” habe ich installiert, um die Suchergebnisseite selbst zu verbessern. Das Plugin ersetzt nach Installation die normale Ergebnisseite mit seiner eigenen und bietet (unter anderem) folgende Verbesserungen:

  • Artikel werden nur noch mit ihrem Exzerpt dargestellt, dadurch erheblich bessere Übersicht
  • Ergebnisse werden auf mehreren Seiten dargestellt (sog. Pagination), Anzahl der Ergebnisse pro Seite kann der Nutzer selbst einstellen
  • Es wird die Gesamt-Anzahl der Ergebnisse angezeigt
  • Es wird eine sogenannte “Heatmap” von häufig gesuchten Begriffen angezeigt, die Heatmap wird sowohl auf der Ergebnisseite als auch im Dashboard im Admin-Bereich angezeigt

Das Plugin bietet noch ein paar mehr Funktionen, aber dies sind die auffälligsten. Bis auf die “Heatmap” nutze ich auch alles in meinem Blog. Die Anpassung der Ergebnisseite ist aber ein ganzes Stück Arbeit, die sich jedoch lohnt. Meine Ergebnisseite hat mich einige Zeit gekostet, dafür ist sie aber nun optimal in mein Theme integriert. Wie gut sich “Better Search” integriert und wie aufwändig es ist notwendige Anpassungen zu machen, hängt aber vom einzelnen Theme ab.

Zusammen leisten die beiden Plugins bei mir sehr gute Dienste. Offen bleiben für mich aber noch zwei Dinge.

Erstens werden in den Exzerpts auf der Suchergebnisseite die Gallery-Shortcodes nicht ausgewertet. Stattdessen sind Sie im Klartext für den Benutzer zu sehen. Vermutlich wird die Lösung hierfür so aussehen, dass ich sie mit PHP ausfiltern werde. Selbst wenn ich es schaffen würde, Wordpress zu überreden die Codes auszuwerten, würde das wohl vermutlich eher unübersichtlich werden. Zweitens suche ich noch eine Möglichkeit die Suchwörter auf der Ergebnisseite hervorzuheben, um es dem Benutzer einfacher zu machen, einzuschätzen ob seine Suche erfolgreich war. Es gibt dazu zwar einige Plugins, die aber wohl inkompatibel zu “Better Search” sind.

Was tun mit nicht funktionierenden Links?

Ich bin momentan immer noch dabei, meine alten Artikel, die ich aus meinem Serendipity Blog übernommen habe, zu korrigieren, damit alles korrekt angezeigt wird. Dabei muss ich alle möglichen Sachen fixen: alte Links die noch aus uralten Wordpress-Zeiten stammen, alte interne Links, die noch auf den Serendipity-Pfad verweisen, Smilie-Grafik-Links in Text-Smilies zurückverwandeln und nicht zuletzt auch tote externe Links korrigieren.

Für letztere Aufgabe bin ich heute über das sehr nützliche Plugin Broken Link Checker gestolpert. Satte 98 Links wurden mir als nicht funktionsfähig angezeigt. Ein Großteil besteht aus Links auf eine Menge privater Fotos, die ich vor längerem leider aus Versehen gelöscht habe und die ich nicht wiederherstellen kann. Allerdings sind auch viele externe Links tot: sei es weil die Domain nicht mehr existiert oder sei es weil der Betreiber seine Website umstrukturiert hat.

Manches kann ich korrigieren, indem ich per Hand den neuen Link raussuche, manches lässt sich aber einfach nicht mehr wiederherstellen. Kein Wunder bei bis zu 5 Jahre alten Artikeln. Den Link ganz zu löschen, möchte ich aber auch nicht, weil ich ungern Geschichtsfälschung betreibe, der Artikel wurde vor 5 Jahren nunmal mit Link geschrieben, warum sollte ich den Artikel ändern nur weil der Link tot ist? Ausserdem beruht der Artikel zu einem Großteil auf einem Link, der Sinn des Artikels wäre nicht mehr nachvollziehbar, wenn der Link entfernt würde. Dann könnte ich auch gleich den Artikel ganz löschen. Die Links müssten also irgendwie gesondert markiert werden.

Zum Glück markiert der Broken Link Checker schon im Auslieferungszustand diese Links in Artikeln selbständig mit einer eigenen CSS-Klasse und formatiert die Links auf diese Weise automatisch als durchgestrichenen Text. So weiss der informierte Leser was los ist.

Da aber die wenigsten Leser so informiert sind, wäre es natürlich am schönsten, wenn noch zusätzlich ein kleiner Informationstext angezeigt würde. Für so etwas bieten sich Tooltips am besten an. Mit dem Broken Link Checker ist dies aber nicht direkt möglich, sondern erfordert etwas Zusatzarbeit.

Zuerst ist eine Änderung in der broken-link-checker.php des Plugins notwendig. In Zeile 124 muss folgender Text geändert werden:

return $matches[1].$matches[2].$matches[3].' class="broken_link"'.$matches[4].

Daran hängt man den Text als String in HTML-Schreibweise, der als Tooltip erscheinen soll und schliesst diesen mit einem Punkt ab (wichtig!):

"<span><h3>Nicht funktionsfähiger Link</h3>Dieser Link funktioniert nicht.</span>".

Die Zeile muss dann also so aussehen (alles direkt hintereinander in einer Zeile):

return $matches[1].$matches[2].$matches[3].' class="broken_link"'.$matches[4]."<span><h3>Nicht funktionsfähiger Link</h3>Dieser Link funktioniert nicht.</span>".

Der Code sorgt dafür, dass in den Link (<a>) ein <span>-Element eingefügt wird. Dies alleine würde aber nicht zum gewünschten Ziel führen einen Tooltip anzuzeigen. Dazu ist noch ein wenig CSS notwendig, das sich einfach in das dafür vorgesehene Feld in den Link Checker Optionen eingeben lässt:

a.broken_link, a.broken_link:link, a.broken_link:visited, a.broken_link:active  {
  position: relative;
  text-decoration: line-through;
  font-style: italic;
  color: #0000ff;
  }

a.broken_link:hover {
  color: #0000ff;
  background: transparent;
  }

a.broken_link span {
  display: none;
  text-decoration: none;
}

a.broken_link:hover span {
  display: block;
  position: absolute;
  top: 20px;
  left: 0;
  width: 300px;
  z-index: 100;
  color: #000000;
  border:1px solid #000000;
  background: #FFFFCC;
  font: 12px Verdana, sans-serif;
  text-align: left;
  }

a.broken_link span h3 {
  display: block;
  margin: 0;
  padding: 0;
  font-size: 16px;
  font-weigth: bold;
  color: yellow;
  background-color: gray;
  border: 0px;
  border-bottom: 1px solid black;
}

Danach sollte es sofort funktionieren. Wenn der Benutzer mit der Maus über den weiterhin durchgestrichenen Text fährt, wird der Tooltip mit der Information angezeigt unter dem Mauszeiger angezeigt. Der Text des Tooltips kann natürlich beliebig angepasst werden, ebenso das Design des Tooltips selbst.

Quelle des Tooltips: webbe.de