====== WordPress ======
//WordPress// ist eine Blog-Software und einfaches [[lexikon:cms|CMS]], geschrieben in [[php:start|PHP]] für [[mysql:start|MySQL-Datenbanken]].
===== Installation =====
Die Installation von //WordPress// ist recht einfach, im folgenden werden daher nur fortgeschrittene Konfigurationen beschrieben, die nicht im jeden Fall notwendig sind.
==== Cronjob ====
WordPress kommt mit einem eigenen Werkzeug, das regelmäßige Aufgaben übernimmt, wie z. B. das Überprüfen ob geplante Beiträge veröffentlicht werden sollen: //wp-cron//. Dieses Werkzeug ist an die Funktionsweise von [[unix:cron|Cronjobs]] angelehnt, wird jedoch nur aufgerufen, wenn jemand die Website besucht. Bei größeren Websites (oder auch bei Webshops mit WooCommerce) und vielen Wartungsaufgaben kann dies die Website verlangsamen. Hierbei empfiehlt es sich nun, //wp-cron// auf echte Cronjobs umzustellen:
=== 1. wp-cron in WordPress deaktivieren ===
Zuerst sollte der Aufruf von //wp-cron// durch Website-Besucher deaktiviert werden. Dies geschieht durch das einfügen folgender Zeile in die Datei ''wp-config.php'':
define( 'DISABLE_WP_CRON', 'true' );
=== 2. Cronjob einrichten ===
Nun muss ein echter Cronjob auf dem Server eingerichtet werden, der die Datei ''wp-cron.php'' aufruft. Dies geschieht je nach Webhoster über den Kunden-Administrationsbeich oder das [[lexikon:cli|Terminal]].
Der Befehl zum Aufruf von //wp-cron// durch den Cronjob kann bspw. so aussehen:
php /path/to/htdocs/wordpress/wp-cron.php
===== Erweiterungen =====
==== Typische Erweiterungen ====
Dies sind Erweiterungen, die bei jeder WordPress-Installation zum Einsatz kommen können/sollten, egal welche weiteren Funktionen die Seite benötigt:
* [[https://wordpress.org/plugins/antispam-bee/|AntiSpam Bee]]: Automatisches Erkennen und Entfernen von Spam-Kommentaren. Gute Alternative zum Standard-Plugin Akismet, das ohne Registrierung funktioniert und deutschen Datenschutzrichtlinien entspricht.
* [[http://jetpack.me/|Jetpack]]: Stellt viele hilfreiche Funktionen zur Verfügung, die oft gewünscht und sonst nur über viele zusätzliche Plugins hinzugefügt werden können. **Nachteil:** Es wird ein Account bei [[https://wordpress.com|WordPress.com]] benötigt und die Seite **muss** mit dem Account verknüpft werden.
==== Weitere Erweiterungen ====
* [[http://wordpress.org/plugins/authenticator/|Authenticator]]
* [[http://wordpress.org/plugins/breadcrumb-navxt/|Breadcrumb NavXT]]
* [[https://wordpress.org/plugins/contact-form-7/|Contact Form 7]]: Kontakt-Formular für WordPress
* [[https://de.wordpress.org/plugins/custom-sidebars/|Custom Sidebars]]
* [[https://wordpress.org/plugins/html-on-pages/|.html On Pages]]: Fügt an URLs zu Seiten die Endung ''.html'' an
* [[https://wordpress.org/plugins/kimili-flash-embed/|Kimili Flash Embed]]: Flash-Elemente einbinden
* [[https://getshortcodes.com/|Shortcodes Ultimate]]
* [[https://wordpress.org/plugins/wordpress-importer/|WordPress Importer]]
=== Social Media ===
* [[https://wordpress.org/plugins/social/|Social]]: Beim Veröffentlichen eines Beitrags automatisch einen [[twitter:start|Tweet]] und/oder einen [[facebook:start|Facebook-Status]] veröffentlichen, sowie Reaktionen bei Twitter und Facebook auslesen.
* [[https://wordpress.org/plugins/wp-to-twitter/|WP To Twitter]]: Nachdem Veröffentlichen eines Beitrags automatisch einen Tweet veröffentlichen.
=== Statistik ===
* [[https://wordpress.org/plugins/wp-piwik/|WP-Piwik]]: WordPress mit der Open-Source-Statistik-Software [[piwik:start|Piwik]] verbinden, sodass Besucher mit Piwik erfasst und im WordPress-Backend Piwik-Statistiken angezeigt werden können.
=== Mehrsprachigkeit ==
* [[https://wordpress.org/plugins/loco-translate/|Loco Translate]]: Übersetzungen für Themes und Plugins erstellen
* [[https://wordpress.org/plugins/multilanguage/|Mulilanguage]]
* [[http://wordpress.org/plugins/multisite-language-switcher/|Multisite Language Switcher]]
=== Entwicklung ===
* [[http://www.advancedcustomfields.com/|Advanced Custom Fields (ACE)]]: Ermöglicht einfaches und komfortables Erstellen von beliebigen Eingabe-Feldern für Beiträge, Seiten, etc. im WordPress-Backend. Ein quasi Must-have bei selbst-entwickelten Seiten.
* [[http://wordpress.org/plugins/widget-css-classes/|Widget CSS Classes]]
===== Themes =====
==== Empfehlenswerte Themes ====
=== Allgemein ===
* Standard-Themes (Twenty-Reihe)
* [[http://www.elmastudio.de/themes/|Themes von Elmastudio]]
=== Einzelne Themes ===
* [[http://independentpublisher.me/|Independent Publisher]]
* [[http://dimsemenov.com/themes/touchfolio/|Touchfolio]]
==== Boilerplats ====
* [[http://themble.com/bones/|Bones]]
* [[http://html5blank.com/|HTML5 Blank]]
* [[https://roots.io/sage/|Sage]]
==== Child Themes ====
//Child Themes// sind eine elegante Möglichkeit bestehende Themes zu verändern oder zu erweitern, ohne das Theme direkt zu bearbeiten. Dadurch können z.B. Themes problemlos aktualisiert werden, ohne das die eigenen Änderungen verloren gehen.
[[http://codex.wordpress.org/Child_Themes|WordPress Codex: Child Themes]]
=== Vorgehensweise ===
- Child Theme nach [[http://codex.wordpress.org/Child_Themes|Anleitung im WordPress Codex]] erstellen.
- Änderungen am CSS oder am Template des Themes vornehmen (siehe unten).
== Bei CSS-Änderungen ==
Bei Änderungen am CSS können die Änderungen einfach direkt in die ''styles.css'' des Child-Themes geschrieben werden.
== Bei Template-Änderungen ===
- Bei Änderungen an Templates muss zunächst der entsprechende Template-Teil des Hauptthemes, z.B. die ''header.php'' oder ''footer.php'', in den Ordner des Child-Themes kopiert werden.
- In dem kopierten Template-Teil kann dann einfach die Änderung vorgenommen werden.
Die geänderten Template-Teile des Child-Themes werden dann anstelle der Template-Teile des Hauptthemes geladen.
==== Theme-Entwicklung ====
* [[http://wphierarchy.com/|WordPress Template Hierarchy]]
* [[https://codex.wordpress.org/Template_Hierarchy|WordPress Codex: Template Hierarchy]]
=== Seiten-Templates ===
Um ein eigenes Seiten-Template zu erstellen, muss im Template-Verzeichnis nur eine neue Datei erzeugt werden (z.B. ''foobar.php'') und am Anfang der Datei folgender Kommentar für WordPress stehen:
/*
* Template Name: FooBar
*/
Dann lässt sich beim Erstellen einer Seite in der Spalte rechts das Template "FooBar" auswählen.
=== JavaScript auf jQuery-Basis einfügen ===
Um ein [[javascript:start|JavaScript]], das auf dem [[lexikon:framework|Framework]] [[jquery:start|jQuery]] basiert, zu einem Template hinzuzufügen, sollte die Funktion ''wp_enqueue_script'' verwendet werden:
Nach Best-Practice sollten alle JavaScripts in der ''functions.php'' per ''wp_enqueue_script'' im Theme hinzugefügt werden. Für Tests, Theme- oder Komponenten-Entwicklung funktioniert die Funktion allerdings auch außerhalb der ''functions.php''.
=== Text-Bereinigen, Zeilenumbrüche erhalten ===
$fake_newline = '--OMGKEEPTHISNEWLINE--'; # or some unique string
$escaped_newlines = str_replace("\n", $fake_newline, $_POST['message']);
$sanitized = sanitize_text_field($escaped_newlines);
Quelle: [[http://stackoverflow.com/a/20444149|Stack Overflow: How to sanitize multi-line text from a textarea without losing line breaks?]]
===== Internationalisierung =====
* [[http://code.tutsplus.com/tutorials/how-to-localize-wordpress-themes-and-plugins--wp-22779|Tuts+: How To Internationalize WordPress Themes And Plugins]]
==== Funktionen ====
* [[https://codex.wordpress.org/Function_Reference/_2|__( $text, $domain )]]\\ Text übersetzen ohne ihn direkt auszugeben
* [[https://codex.wordpress.org/Function_Reference/_e|_e( $text, $domain )]]\\ Text übersetzen und direkt ausgeben
===== Entwicklung =====
* [[http://codex.wordpress.org/Conditional_Tags|WordPress Codex: Conditional Tags]]
* [[https://wordimpress.com/the-wordpress-page-lifecycle-visual-graphic/|WordImpress: WordPress Page Loading Lifecycle Visual Graphic]]
* [[wordpress:rest:start|WordPress REST API]]
==== Widgets ====
* [[https://github.com/tommcfarlin/WordPress-Widget-Boilerplate|Widget Boilerplate]]
==== Plugins ====
=== Tutorials ===
* [[http://code.tutsplus.com/tutorials/integrating-multiple-choice-quizzes-in-wordpress-creating-the-backend--wp-31221|Tuts+: Integrating Multiple Choice Quizzes In WordPress, Part 1: Creating The Backend]]
* [[http://code.tutsplus.com/tutorials/integrating-multiple-choice-quizzes-in-wordpress-creating-the-frontend--wp-31336|Tuts+: Integrating Multiple Choice Quizzes In WordPress, Part 2: Creating The Frontend]]
=== Boilerplate ===
* [[https://github.com/tommcfarlin/WordPress-Plugin-Boilerplate|Plugin Boilerplate]]
==== Posts ====
=== Funktionen ===
* ''the_author_posts_link()''\\ Link zur Autoren-Seite
=== Post-Status ===
Status von Posts bzw. Seiten:
^ Status ^ Erklärung ^
| publish | Eine veröffentlichter Post |
| pending | Ein zu moderierender/rezensierender Post |
| draft | Ein Entwurf |
| auto-draft | Ein automatisch gespeicherter, neuer Post (ohne Inhalt) |
| future | Ein Post, der zu einem späteren Zeitpunkt veröffentlicht wird |
| private | Ein nicht-öffentlicher/privater Post |
| inherit | Eine automatisch gespeicherte Revision |
| trash | Ein Post im Papierkorb |
Quelle: [[http://codex.wordpress.org/Function_Reference/get_post_status|WordPress Codex: get_post_status()]]
===== Migration =====
Die Migration einer WordPress-Website funktioniert am erfahrungsgemäß am einfachsten über folgenden Weg:
- Sicherung der Dateien auf dem alten Server bzw. Test-Server
- Sicherung der Datenbank auf dem alten Server bzw. Test-Server als unkomprimierte SQL-Datei\\ Siehe: [[https://codex.wordpress.org/Backing_Up_Your_Database#Using_phpMyAdmin|WordPress Codex: Backing Up Your Database: Using phpMyAdmin]]
- Suchen- und Ersetzen der alten Adresse, bspw. ''http://example.local'', durch die neue, z.B. ''http://www.example.com'', in einem Text-Editor
- Upload der gesicherten Dateien auf den neuen Server
- Upload der geänderten SQL-Datenbank
- Ggf. Anpassen der Datei ''wp-config.php'' zur neuen Datenbank-Konfiguration
Die Website funktioniert i.d.R. ad-hoc auf dem neuen Server.
==== Bekannte Probleme ====
=== Verlust von Text-Widgets ===
Erstellte Text-Widgets werden aus bisher ungeklärten Gründen nicht mehr angezeigt.\\
**Workaround:** Die Text-Widgets müssen auf der neuen Seite neu erstellt werden.
=== Fehler beim Datenbank-Import: "#1273 – Unknown collation: ‘utf8mb4_unicode_ci’" ===
WordPress nutzt, wenn die MySQL-Datenbank aktuell genug ist, den neueren Zeichensatz ("Collation") ''utf8mb4_unicode_ci'', der allerdings bei älteren MySQL-Datenbanken nicht zur Verfügung steht.\\
**Workaround:** //Alle// Datenbank-Tabellen und -Felder mit der eingestellten Collation ''utf8mb4_unicode_ci'' müssen umgestellt werden auf ''utf8_general_ci''.
Quelle: [[https://wordpress.org/support/topic/sql-error-when-importing-database-1?replies=1|WordPress Support: SQL error when importing database]]
===== Links =====
* [[https://wordpress.org/|WordPress]]
* [[http://codex.wordpress.org/|WordPress Codex]]
* [[http://capsicummediaworks.com/killer-wordpress-checklist/|Capsicum Mediaworks: Killer WordPress Checklist]]
* [[http://queryposts.com/|QueryPosts]]
* [[http://adambrown.info/p/wp_hooks/hook|Übersicht über alle Wordpress-Hooks]]
* [[https://pinboard.in/u:aberaberarne/t:wordpress|Arnes Link-Sammlung zu WordPress]]
==== Tutorials ====
=== Kostenpflichtige Tutorials ===
* [[https://www.video2brain.com/de/videotraining/wordpress-fuer-redakteure|video2brain: WordPress für Redakteure]]
* [[https://www.video2brain.com/de/videotraining/wordpress-plug-ins-crashkurs|video2brain: WordPress Plug-ins – Crashkurs]]
* [[https://www.video2brain.com/de/videotraining/wordpress-sicher-aktualisieren|video2brain: WordPress sicher aktualisieren]]
* [[https://www.video2brain.com/de/videotraining/wordpress-themes-mit-bootstrap|video2brain: WordPress-Themes mit Bootstrap]]