Tags

#Kirby & CMS

Kirby, WordPress und andere Redaktionssysteme samt Plugins, Templates und Arbeitsweisen.

Verlinkte Listen in Wordpress automatisch generieren

Verlinkte Listen in Wordpress automatisch generieren

Manchmal benötigt man in Wordpress Strukturen, die spezieller und kleinteiliger sind, als die üblichen Kategorien/Tag-Zuweisungen. Mit ein paar Umwegen und dem Plugin ACF ist es auch Wordpress möglich, contentabhängige Listen zu generieren.

Wenn ich mir kleinere und moderne Content-Management-Systeme wie beispielsweise http://de.processwire.com anschaue, bin ich schon etwas neidisch:

Bei Processwire gibt es keine vorgefertigten Feldtypen; man muss sie bei jedem Projekt neu aufbauen. Das führt dann dazu, dass http://demo.processwire.com eben durch die enorm vereinfachte Felder-Philosophie ziemlich schnell umgesetzt sind. https://www.youtube.com/watch?v=IHqnLQy9R1A&list=PLo7Qkm2fy7zDdXCHTBUZXG7C3poa3efAQ&index=2.

Eine Webseite für einen speziellen Kundenwunsch hätten wir damit wunderbar umsetzen können, wenn wir a) die Zeit gehabt hätten uns in Processwire intensiv einzuarbeiten und b) wir nicht so auf Wordpress stehen würden.
Die Voraussetzungen

Die Kunden hatten eine alte Seite mit ziemlich vielen Daten, die in Beziehung miteinander stehen. Wenn wir uns auf die Processwire-Demo-Seite von oben beziehen: eine Seite mit Hochhäusern. Jeder Stadt sind dort Hochhäuser zugeordnet. Jedem Hochhaus eine spezifische Höhe, ein Baujahr und die Architekten. Diese spezifischen Daten sind wiederum untereinander verknüpft: Es gibt Übersichtsseiten über Architekten und welche Häuser sie entworfen haben, wie auch Seiten mit Häusern gleicher Höhe.
Das Problem

Das Problem an der Sache war, dass die gesamten Daten der alten Kundenseite via PHP aus Text-Dateien ausgelesen wurden und bei Syntaxfehlern natürlich das ganze Beziehungsgeflecht kaputt gemacht werden konnte. Deshalb hatte der vorherige Entwickler gesagt: Ihr dürft das nicht ändern, ich mach das gerne für euch.

Der Kunde möchte es aber bei einer Wordpress-Seite selbst ändern.
Die Vorüberlegungen

Uns ist es enorm wichtig, wenn nicht sogar am wichtigsten, dass die Update-Fähigkeiten unserer Wordpress-Seiten gewahrt bleiben. Deshalb sind Frickeleien am Core natürlich tabu und auch Plugins werden bei uns nur entwickelt, wenn es zu diesen einen längerfristigen Service & Wartungsvertrag gibt.

Wir brauchen eine flexible Lösung, die quasi das Kategorie/Tag-System von Wordpress aufbohrt. Zusätzlich soll der Inhalt nur an speziellen Positionen im Template ausgeben werden und jederzeit selbst von dem Kunden gepflegt werden können.

Und es klappt!
Die workin media Lösung

Viele, die sich schon intensiver mit Wordpress auseinandergesetzt haben, kennen mit Sicherheit das Plugin http://www.advancedcustomfields.com von Elliot Condon. Damit kann man relativ simpel neue Inhaltsfelder generieren um nicht-statische Inhalte an fixen Positionen im Layout auszugeben.

https://workin-media.hnz.io/wp-content/uploads/2015/06/advanced-custom-fields.png Ansicht des Plugins im Backend.

Jedem Feld kann dort ein Label zugeordnet werden. Wir haben nun das Beispiel „Hochhaus“ genommen und als Checkbox angelegt: Jedes Hochhaus ist dort seiner Seite zugeordnet (siehe links).

Wenn man nun eine neue Seite erstellt, beispielsweise „New York City“, dann kann dort der Nutzer „Park Avenue“ und „Chrysler Building“ anhäkeln; denn wir wissen ja alle, dass das AT&T Corporate Center in Chicago steht.

Diese manuelle Zuordnung mussten wir so implementieren, weil bei unserem Kunden, anders als bei den Hochhäusern, sich die Elemente einer Kategorie oft verändern können und er so die Möglichkeit hat auf der Seite, auf der sie ausgegeben werden, die Inhalte zu definieren.

Die Ausgabe haben wir mit folgendem Code in der function.php des aktiven Themes gesteuert:

// Add Shortcode
function hochaus() {

$values = get_field('Hochaus');
$field = get_field_object('Hochhaus');
$label = $value[$key];

if($values) {
echo '
';
foreach($values as $value)
{
echo '- ' . '[' . $value . '](' . $value . ')' . '
';
}
echo '
';
}
}
add_shortcode( 'hochhaus', 'hochhaus' );

Was macht der Code? Er erstellt über den Shortcode eine Liste, mit allen angehäkelten Häusern an der Position des Shortcodes. Außerdem verlinkt er sie zu dem Linkziel, das im ACF definiert wurde.
Wofür eignet sich die Methode?

- Darstellung kleinerer Inventarlisten

- Zuordnung verschieder Datenpunkte

- Flexible Handhabung/Pflege der Ausgabe

Bildnachweis: https://pixabay.com/de/einstellungen-optionen-software-265131/

Wordpress: Formulardaten von Contact Form 7 via SMTP richtig versenden

Wordpress: Formulardaten von Contact Form 7 via SMTP richtig versenden

Wie können in Wordpress Formular-Komponenten wie http://wordpress.org/plugins/contact-form-7/ oder das (kostenpflichtige) http://www.gravityforms.com funktionieren, wenn der Wordpress-Server nicht die Mails verarbeitet? Weil beispielsweise ein externer Mailserver für die Zustellung eingerichtet ist? Wir haben die Lösung. Vielleicht nicht lehrbuchreif. Dafür funktioniert's – sogar mit den "richtigen" Absender-Namen und E-Mail-Adresse.

Es kommt öfter vor, als einem bewusst ist, dass der Mailserver einer Domain nicht vom selben Server gestellt wird. Wir bei der workin media nutzen beispielsweise die http://www.google.de/intx/de/enterprise/apps/business/ um effektiv und zentral unsere Mails verwalten zu lassen. Das heißt aber auch, dass Wordpress-Formulare nicht mehr funktionieren, da diese standardmäßig mit der php-Funktion http://php.net/manual/de/function.mail.php verschickt werden wollen. Ob dies klappt oder nicht, bekommt ihr dadurch zu spüren, ob ihr bei neuen Kommentaren, Updates, etc. von eurer Seite per Mail benachrichtigt werdet oder nicht (natürlich auch via http://php.net/manual/de/function.phpinfo.php).

Oder eben, weil Mails aus Formularen nicht ankommen. Und das ist tatsächlich etwas tricky, weil beispielsweise Contact Form 7 dem Nutzer gute Miene zum bösen Spiel macht und zwar auf der Seite anzeigt, dass die Nachricht versendet. Es aber nicht macht.

Die Lösung: Mailversand via SMTP. Da können wir euch eine Lösung anbieten, indem ihr im Code rumflickelt. Oder ein Plugin, was das für euch übernimmt.
Die Codelösung

Zunächst editiert ihr eure config.php im Stammverzeichnis der Wordpress Installation und fügt folgenden Code ein:

// SMTP
function smtp_wp_mail($phpmailer) {
$phpmailer->IsSMTP(); // telling the class to use SMTP
$phpmailer->Host = "smtp.example.com"; // set the SMTP server host
$phpmailer->Port = 465; // set the SMTP server port
$phpmailer->SMTPSecure = "ssl"; // enable SMTP via SSL
$phpmailer->SMTPAuth = true; // enable SMTP authentication
$phpmailer->Username = "wordpress@example.com"; // set the SMTP account username
$phpmailer->Password = "PASSWORD"; // set the SMTP account password
}

Die entsprechenden Felder müsst ihr mit den Daten eures externen Mailproviders befüllen.

Als nächstes müsst ihr in der wp-includes/pluggable.php Wordpress noch klar machen, dass ihr Mails nun via SMTP verschicken wollt.  Sucht bitte $phpmailer->IsMail(); und ersetzt die Zeilen mit der folgenden Version:

// Set to use PHP's mail()
// $phpmailer->IsMail();

//SMTP
smtp_wp_mail($phpmailer);

Bei jeder Wordpress-Aktualisierung können diese Änderungen verloren gehen.
Die Plugin-Lösung

https://workin-media.hnz.io/wp-content/uploads/2014/06/smtp-mail11.png WP SMTP Mail im Dashboard

Für einige ist die Plugin-Lösung der einfachere Weg, wobei das Plugin nichts anderes macht, als wir weiter oben beschrieben. Nur eben im Wordpress-Backend in einer netten Formular-Ansicht. Wir nutzen hier http://wordpress.org/plugins/wp-mail-smtp/.

Das Problem, was es beim SMTP-Versand geben kann, ist ärgerlich: Viele Server verbieten es (zu Recht!) Mails unter falschen Namen zu versenden.

Wenn allerdings ein Nutzer ein Kontaktformular auf eurer Seite verwendet, wollt ihr auch, dass das Kontaktformular von eben jener Person kommt. Martina Musterfrau (martina@musterfrau.de) benutzt dann zwar das Formular – die Mail von Wordpress kommt aber über den SMTP-Account, den wir vorher definiert hatten. Und wenn ich dann Frau Musterfrau schnell antworten möchte und nicht daran denke, schreibe ich leider dem SMTP-Account eine Mail.

Es gibt allerdings noch andere Probleme: Beispielsweise kann man so Kontaktformulardaten nicht an Ticketsysteme wie http://osticket.com.de, http://www.otrs.com/?lang=de oder https://www.zendesk.de übergeben, da durch die falsche Zuweisung die Systeme ad absurdum geführt werden und immer eine händische Korrektur des Absenders nötig wäre. Dafür, dass solche Systeme Arbeit abnehmen sollen und eben nicht zusätzliche verursachen, war das für uns nicht tragbar.
Die Lösung bei Contact Form 7

https://workin-media.hnz.io/wp-content/uploads/2014/06/contact-form-711.png Zusätzliche Kopfzeilen

Bei  Contact Form 7 gibt es das von mir sträflich übersehene Zusatzfeld "Zusätzliche Kopfzeilen", was beispielsweise dazu gedacht ist, Antwortadressen hinzuzufügen. Dann bekommt ihr zwar immer noch eine Mail von eurem Account. Wenn ihr Antwortet, wird aber dem richtigen Absender geantwortet. Außerdem funktioniert die Weiterleitung zu beispielsweise Zendesk perfekt.

Gebt einfach (mit den Standardformular-Tags) folgenden Code in das Feld ein:

Reply-To: <>

Denkt an das Leerzeichen zwischen den beiden Tags. Und alle sind glücklich.


Serverfehler: Keine Datenbankverbindung

Serverfehler: Keine Datenbankverbindung

Der workin-media-Server war in der Nacht zum 3. Februar für wenige Stunden nicht erreichbar. Statt der eigentlichen Seiten, wurde die Fehlermeldung angezeigt, dass keine MySQL-Verbindung bestünde. Das Problem ist behoben.

Die Ursache war ein Fehler des Server-Betriebssystems (CentOS), dass durch uns kurzfristig behoben wurde: Eine Datei, die gelöscht werden sollte, es aber nicht wurde, war für den Fehler verantwortlich. Dadurch konnte der SQL-Server nicht mehr gestartet werden. Datenbankbasierte Seiten, die beispielsweise auf Joomla oder Wordpress basieren, haben dadurch nicht mehr funktioniert.

Muss ich noch etwas tun?
Nein. Dies war ein serverseitiges Problem und hat nichts mit euren Seiten zu tun. Alles gut.

Sind Daten verloren gegangen?
Nur die, die nicht erfasst werden konnten, als die Seiten offline waren. Ansonsten werdet ihr keine Daten vermissen.

Wird so etwas noch mal vorkommen?
Wir hoffen nicht! Wir tun viel, um die Erreichbarkeit der Seiten zu garantieren. Nur leider kann man solche Fehler nicht vorhersagen. Wir können da nur schnell reagieren.

Wir entschuldigen uns für entstandene Unannehmlichkeiten.

So schützt ihr WordPress

So schützt ihr WordPress

Bereits über http://marketpress.de/2013/10-jahre-wordpress-wir-feiern-du-kannst-gewinnen-inkl-infografik/ soll WordPress weltweit verwendet werden. Das ist schon eine ziemlich große Hausnummer. Kein Wunder also, dass das Content-Management-System auch in illegalen Kreisen äußerst beliebt ist. Oft passiert es daher, dass WordPress gekapert wird und der Administrator anfangs davon gar nicht mitbekommt – bis Google oder eine andere Suchmaschine plötzlich von der Webseite warnt, weil sie Viren verbreitet.

Wir geben euch hier 10 nützlichen Tipps, wie ihr eure WordPress-Installation besser schützen könnt.
Nutzt auf gar keinen Fall "admin" als Benutzer

Bis zur 3.0-Version von WordPress, wurde der Admin-Useraccount automatisch generiert. Inzwischen kann man zwar den Nutzernamen frei wählen, viele nehmen aber dennoch den Vorschlag, der voreingestellt ist. Das ist fatal: Wenn ihr "admin" als Nutzer habt und zusätzlich ein unsicheres Passwort, ist es für Angreifer mehr als leicht eure Installation zu übernehmen, weil sie ja einen Teil der Anmeldung (den Namen) schon kennen.

Außerdem solltet ihr die Autorenseite des Admins verschleiern. Was bringt es denn, zwar den Admin-Namen zu ändern, ihn aber im Klartext in der URL eurer Autorenseite anzuzeigen? Die lautet nämlich standardmäßig auch http://eureseite.de/author/username.

Um den Namen in der URL zu ändern, benötigt ihr Zugriff auf eure WordPress-Datenbank. In der Tabelle wp_users gibt es den Eintrag user_nicename. Diesen Namen nutzt WordPress um den Link für die Autorenseite zu generieren. Ihr könnt ihn dort in einen anderen Namen umändern (benutzt bitte keine Sonderzeichen sondern nur Buchstaben, Zahlen, Unterstriche und Minuszeichen).

Wenn ihr das gemacht habt, kann man von außen nicht mehr den Namen des Administrator-Accounts ablesen.
Verwendet sichere Passwörter

123456 und passwort sind keine sicheren Passwörter, liebe Leute!
Ladet aktuelle Software

Updates, Updates, Updates! WordPress und die verwendeten Plugins müssen ständig weiterentwickelt werden. Und zwar nicht nur um die Bedienung und das Aussehen zu verbessern, sondern um Sicherheitslücken zu stopfen. Denn das Böse schläft nie. Deshalb aktualisiert so schnell wie möglich eurer WordPress und die installierten Plugins. Achtet auch darauf, dass ihr keine Software bei euch draufhaut, die seit zwei Jahren nicht aktualisiert wurde. Denn auch da können sich gefährliche Einfalltore befinden.
Kontrolliert Themes und Plugins

Weniger ist manchmal mehr. Nutzt bitte nur die Plugins, die ihr auch tatsächlich benötigt. Aktivierte Komponenten, die nicht gebraucht werden verlangsamen nicht nur eure System, sie machen auch das Aktualisieren unnötig kompliziert. Als Richtlinie solltet ihr euch merken, so wenige fremde Plugins wie möglich zu installieren.

Auch ist es wichtig, etwas Hirnschmalz zu investieren, ob die Quelle, von der ihr das Plugin oder Theme habt, vertrauenswürdig ist.

Wenn ihr euch unsicher seid, könnt ihr Plugins mit http://wordpress.org/plugins/antivirus/ testen und Themes mit http://wordpress.org/plugins/theme-check/.
Schützt das Backend

Wer sich als Angreifer bis ins Backend durchschlagen konnte, hat die volle Kontrolle über eure WordPress-Installation. Deshalb geben wir euch hier mehrere Vorschläge, euch ordentlich abzusichern.

Schützt zunächst euer Backend per .htaccess (Verzeichnisschutz). Zwar wäre es am logischsten, den gesamten Ordner wp-admin zu schützen; dies hat bei manchen Kunden aber nicht richtig funktioniert. Woran das liegt? Keine Ahnung. Deshalb schützt am Besten die wp-login.php, damit hatten wir noch keine Probleme:

protect wp-login.php

AuthName "Admin-Bereich"
AuthType Basic
AuthUserFile /pfad-zur/.htpasswd
require valid-user

Jedes mal, wenn ihr nun http://www.eureseite.de/wp-admin aufruft, müsst ihr zusätzlich noch die Nutzerdaten der .htpasswd eintragen. http://www.htpasswdgenerator.de/.

Doppelt hält bekanntlich besser, weshalb ich euch dringend noch zu einer Zwei-Wege-Authentifizierung rate. Das Prinzip ist ganz einfach: Zu einem erfolgrteichen Login benötigt ihr nicht nur ein Passwort, sondern noch eine zusätzliche Passphrase, die euch per App oder SMS zugesendet werden kann. Wie die TAN beim Online-Banking. http://wordpress.org/plugins/google-authenticator/screenshots/.
Macht Backups

Zwar bieten viele Provider (wie auch wir) eine automatische Sicherung der Daten an, es kann aber nicht schaden, seine Dateien selbst zu sichern. Eine typische Installation besteht aus den Dateien auf dem FTP und der Datenbank. Ein automatisiertes Plugin, das wir empfehlen können, ist http://wordpress.org/plugins/backwpup/. Hier könnt ihr eure Sicherungskopien direkt in der Dropbox speichern lassen und genau einstellen, wann und was dort hingeschrieben wird.
Spiegelt eure Installation lokal

Wir legen euch zusätzlich ans Herz, ab und an mal eure Installation lokal zu spiegeln – oder in einer Entwicklungs-Umgebung auf dem Server. Denn dort könnt ihr rumspielen, ohne dass es gleich jeder im Live-System sehen kann. Ihr könnt Plugins testen, überprüfen, ob nach Updates oder zusätzlichen Plugins noch alles so funktioniert, wie ihr es euch wünscht. Und das tolle: Euch steht nicht gleich der kalte Schweiß auf der Stirn, wenn etwas nicht so funktioniert. Kurz und knapp: Baut niemals in der Live-Umgebung!
Nutzt Sicherheits-Plugins

Security-Plugins für WordPress gibt es wie Sand am mehr. Wir können an dieser Stelle deshalb keine abschließenden Empfehlungen geben, sondern euch an unseren Erfahrung teilhaben lassen.
Wordfence Security

http://wordpress.org/plugins/wordfence/: Das Plugin schützt eure Seite mit einer Firewall und kümmert sich um viele Security-Einstellungen. Wir nutzen es. Wir mögen es.
Better WP Security

Das http://wordpress.org/plugins/better-wp-security/ checkt eure bisherigen Security-Bemühungen und bietet mit der One-Click-Protection einen einfachen Weg, eure Webseite zu schützen. Nicht so groß wie Wordfence, dafür einfacher zu bedienen.
Exploit Scanner

Der http://wordpress.org/plugins/exploit-scanner/ schaut sich Dateien auf dem Server und auch Teile der Datenbank. Außerdem überprüft es die Liste aller aktiven Plugins.