Kapitel 1. Webanwendungen mit WordPress erstellen
Diese Arbeit wurde mithilfe von KI übersetzt. Wir freuen uns über dein Feedback und deine Kommentare: translation-feedback@oreilly.com
Dieses Buch hilft dir, alles mit WordPress zu bauen: Websites, Themes, Plugins, Webdienste und Webanwendungen. Wir haben uns dafür entschieden, uns auf Web-Apps zu konzentrieren, weil du sie als Super-Websites betrachten kannst, die alle Techniken nutzen, die wir behandeln werden.
Viele Menschen glauben, dass WordPress nicht leistungsfähig genug oder nicht für die Entwicklung von Webanwendungen geeignet ist. Wir entwickeln seit vielen Jahren Webanwendungen mit WordPress und wissen, dass es absolut möglich ist, damit skalierbare Anwendungen zu erstellen.
In diesem Kapitel definieren wir zunächst, was eine Web-App ist, und erklären dann, warum WordPress ein großartiges Framework für ihre Entwicklung ist. Wir beschreiben auch einige Situationen, in denen WordPress nicht der beste Weg ist, um eine Web-App zu erstellen.
Was ist eine App?
Uns gefällt die Wikipedia-Definition: "Anwendungssoftware (kurz: App) ist eine Software, die dazu dient, eine Gruppe von koordinierten Funktionen, Aufgaben oder Aktivitäten zum Nutzen des Nutzers auszuführen."
Was ist eine Web App?
Eine Web-App ist einfach eine App, die über einen Webbrowser läuft.
Bei einigen Webanwendungen wird die Browsertechnologie ausgeblendet - zum Beispiel, wenn du deine Webanwendung in eine native Android- oder iOS-Anwendung integrierst, eine Website als Anwendung in Google Chrome ausführst oder eine Anwendung mit Adobe AIR verwendest. Innerhalb dieser Anwendungen gibt es jedoch immer noch ein System, das HTML, CSS und JavaScript analysiert.
Du kannst dir eine Web-App auch als eine Website vorstellen , die noch weitere anwendungsähnliche Elemente enthält. Es gibt keine genaue Grenze, ab der eine Website eine Web-App ist. Es ist einer der Fälle, in denen du es einfach weißt, wenn du es siehst.
Wir können dir einige Funktionen einer Web-App erklären, dir einige Beispiele geben und dann versuchen, eine Kurzdefinition zu finden, damit du weißt, wovon wir im Allgemeinen sprechen, wenn wir den Begriff in diesem Buch verwenden.
Hinweis
Bei der Lektüre dieses Buches wirst du immer wieder auf SchoolPress verweisen. SchoolPress ist eine Webanwendung, die wir entwickeln, um Schulen und Pädagogen bei der Verwaltung ihrer Schüler und Lehrpläne zu helfen. Alle Codebeispiele beziehen sich auf Funktionen, die in SchoolPress vorhanden sein könnten. Wir werden später in diesem Kapitel mehr über das Gesamtkonzept von SchoolPress erzählen.
Merkmale einer Web App
Im Folgenden sind einige Merkmale aufgeführt, die typischerweise mit Web-Apps und Anwendungen im Allgemeinen verbunden sind. Je mehr dieser Merkmale eine Website aufweist, desto angemessener ist es, sie als Web-App zu bezeichnen.1
- Interaktive Elemente
-
Eine typische Website beinhaltet das Navigieren durch geladene Seiten, Scrollen und das Klicken auf Hyperlinks. Auch bei Web-Apps gibt es Links und Scrollen, aber sie verwenden meist andere Methoden, um durch die App zu navigieren.
Websites mit Formularen bieten transaktionale Erfahrungen. Ein Beispiel wäre ein Kontaktformular auf einer Website oder ein Bewerbungsformular auf der Karriereseite eines Unternehmens. Formulare ermöglichen es den Nutzern, mit einer Website zu interagieren und nicht nur zu klicken.
Web-Apps werden noch mehr interaktive Elemente der Benutzeroberfläche (UI) haben. Beispiele dafür sind Symbolleisten, Drag-and-Drop-Elemente, Rich-Text-Editoren und Schieberegler.
- Aufgaben statt Inhalte
-
Erinnere dich daran, dass Web-Apps "entwickelt wurden, um dem Nutzer zu helfen, bestimmte Aufgaben zu erfüllen." Google Maps-Nutzer erhalten Wegbeschreibungen. Gmail-Nutzer schreiben E-Mails. Trello-Nutzer verwalten Listen. SchoolPress-Benutzer/innen kommentieren Klassendiskussionen.
Einige Apps sind immer noch inhaltsorientiert. Eine typische Sitzung mit einer Facebook- oder Twitter-App besteht zu etwa 90 % aus Lesen. Die Apps selbst bieten jedoch eine andere Art, Inhalte zu durchsuchen, als das typische Surfen im Internet.
- Anmeldungen
-
Logins und Konten ermöglichen es einer Web-App, Informationen über ihre Nutzer/innen zu speichern. Diese Informationen werden verwendet, um die Hauptaufgaben der App zu erleichtern und eine dauerhafte Erfahrung zu ermöglichen. Wenn sie eingeloggt sind, können SchoolPress-Nutzer/innen sehen, welche Diskussionen ungelesen sind. Außerdem haben sie einen Benutzernamen, der ihre Aktivitäten innerhalb der App kennzeichnet.
Web-Apps können auch verschiedene Benutzerebenen haben. Bei SchoolPress gibt es Administratoren, die das Innenleben der App kontrollieren, Lehrer, die Klassen einrichten, und Schüler, die an Klassendiskussionen teilnehmen.
- Fähigkeiten des Geräts
-
Web-Apps, die auf deinem Telefon laufen, können auf deine Kamera, dein Adressbuch, die interne Speicherung und GPS-Standortinformationen zugreifen. Webanwendungen, die auf dem Desktop laufen, können auf eine Webcam oder eine lokale Festplatte zugreifen. Dieselbe Webanwendung kann je nach Gerät, auf das sie zugreift, unterschiedlich reagieren. Web-Apps passen sich an unterschiedliche Bildschirmgrößen, Auflösungen und Funktionen an.
- Offline arbeiten
-
Wann immer es möglich ist, ist es eine gute Idee, deine Webanwendungen auch offline funktionieren zu lassen. Natürlich ist es die Interaktivität des Internets, die den "Web"-Teil einer Web-App ausmacht, aber eine Website, die auch dann noch funktioniert, wenn du durch einen Tunnel fährst, fühlt sich eher wie eine App an.
Mit Gmail kannst du E-Mails offline verfassen. Mit Evernote kannst du offline Notizen verfassen und sie dann mit dem Internet synchronisieren, wenn die Verbindung wiederhergestellt ist.
- Mashups
-
Web-Apps können eine oder mehrere Web-Apps miteinander verbinden. Eine Web-App kann verschiedene Webdienste und APIs nutzen, um Daten zu pushen und zu beziehen. Du könntest eine Web-App haben, die ortsbezogene Informationen wie Längen- und Breitengrad von Twitter und Foursquare abruft und sie auf einer Google-Karte veröffentlicht.
Mobile Apps
Seit der Veröffentlichung der ersten Ausgabe dieses Buches im Jahr 2012 haben sich Web-Apps - und insbesondere mobile Apps - rasant entwickelt. Bei den meisten Websites haben mobile Geräte inzwischen die Desktop-Computer als größte Traffic-Quelle überholt(Quelle: Perficient, Inc.).
Im Jahr 2012 sah die typische Web-App so aus wie Basecamp, eine Projektmanagement-Software, auf die du über deinen Desktop-Webbrowser zugreifen kannst. Im Jahr 2019 sieht die typische Web-App aus wie Twitter, eine Kommunikations-App, auf die du über dein iOS- oder Android-Handy zugreifen kannst.
Da in den meisten Fällen die Mehrheit deiner Nutzerinnen und Nutzer über ein mobiles Gerät auf deine Websites und Apps zugreifen wird, unterstützen wir eine "Mobile First"-Mentalität bei der Gestaltung und Entwicklung von Web-Apps. In Kapitel 16 erfährst du, wie du deine WordPress-Apps nativ auf Mobilgeräten zum Laufen bringst. In Kapitel 4 behandeln wir die Grundlagen des responsiven Designs und die korrekte Darstellung deiner Websites für jede Bildschirmgröße.
Progressive Web Apps
Progressive Web Apps (PWAs) sind Websites, die die Vorteile moderner Browserfunktionen nutzen, um sich wie native Apps in Android, iOS oder auf dem Desktop zu verhalten. Websites, die Service Worker nutzen, um offline zu funktionieren, verfügen über eine Web-App-Manifestdatei, um die App für das Betriebssystem (OS) zu definieren, und erfüllen einige andere Anforderungen, damit sie direkt vom Browser aus als App gestartet werden können.
PWAs wurden vom Google Chrome-Team vorangetrieben, werden aber inzwischen auch von iOS und den meisten modernen Webbrowsern unterstützt. Ein Plugin für die PWA-Unterstützung ist in der Entwicklung, um die wichtigsten Funktionen von PWAs im WordPress-Kern zu unterstützen. Du kannst dieses Plugin verwenden, um deine WordPress-Website in eine PWA zu verwandeln, und das ist eine gute Idee, aber in Wirklichkeit ist die Programmierung einer PWA mehr eine Denkweise als eine einfache Umwandlung. Ähnlich wie bei den "Merkmalen einer Web-App", die wir gerade beschrieben haben, gibt es auf der PWA-Hauptseite von Google eine Checkliste mit den Merkmalen, die für die meisten PWAs erwartet werden, einschließlich dieser grundlegenden Merkmale:
-
Die Website wird über HTTPS bereitgestellt.
-
Die Seiten sind auf Tablets und mobilen Geräten responsive.
-
Alle App-URLs werden geladen, wenn du offline bist.
-
Metadaten werden für den Bildschirm "Zur Startseite hinzufügen" bereitgestellt.
-
Der erste Ladevorgang ist auch bei 3G schnell.
-
Die Seite funktioniert browserübergreifend.
-
Die Seitenübergänge fühlen sich nicht so an, als würden sie im Netz blockieren.
-
Jede Seite hat eine URL.
Zusätzlich zu den Basismerkmalen gibt es eine Checkliste mit Punkten für "vorbildliche" PWAs, die das Nutzererlebnis (UX) und die Leistung abdeckt. Das Lighthouse-Tool von Google bietet automatisierte Tests und Berichte zur Erfüllung der PWA-Kriterien. Auch vollständig native oder für den Browser entwickelte Apps können von einigen der Vorschläge in den PWA-Checklisten und Lighthouse-Berichten profitieren.
Warum WordPress verwenden?
Es gibt nicht die eine Programmiersprache oder das eine Software-Tool, das für jede Aufgabe geeignet ist. Warum du WordPress vielleicht nicht verwenden solltest, werden wir gleich erläutern, aber jetzt wollen wir erst einmal einige Situationen durchgehen, in denen WordPress für die Entwicklung deiner Web-App eine gute Wahl wäre.
Du benutzt bereits WordPress
Wenn du bereits WordPress für deine Hauptseite verwendest, bist du vielleicht nur ein kleines Plugin davon entfernt, die von dir benötigten Funktionen hinzuzufügen. WordPress hat großartige Plugins für E-Commerce (WooCommerce), Foren (bbPress), Mitgliederseiten (Paid Memberships Pro), soziale Netzwerke (BuddyPress) und Gamification (BadgeOS).
Wenn du deine App in deine bestehende WordPress-Website integrierst, sparst du Zeit und machst es deinen Nutzern leichter. Wenn deine Anwendung also relativ einfach ist, kannst du ein eigenes Plugin für deine WordPress-Seite erstellen, um die Funktionen deiner Web-App zu programmieren.
Wenn du mit WordPress für deine bestehende Website zufrieden bist, lass dich nicht verwirren, wenn man dir sagt, dass du auf etwas anderes upgraden musst, um bestimmte Funktionen auf deiner Website hinzuzufügen. Das ist wahrscheinlich nicht wahr. Du musst nicht die ganze Arbeit, die du bereits mit WordPress geleistet hast, über Bord werfen, und die folgenden Gründe sprechen dafür, bei WordPress zu bleiben.
Content Management ist einfach mit WordPress
Ursprünglich als Blogging-Plattform entwickelt, hat sich WordPress im Laufe der Jahre und mit der Einführung von Custom Post Types (CPTs) in Version 3.0 zu einem voll funktionsfähigen Content Management System (CMS) entwickelt. Jede Seite oder jeder Beitrag kann von Administratoren über das Dashboard bearbeitet werden, auf das du über deinen Webbrowser zugreifen kannst. Wie du mit CPTs arbeitest, erfährst du in Kapitel 5.
WordPress macht das Hinzufügen und Bearbeiten von Inhalten mit einem WYSIWYG-Editor (What You See Is What You Get) ganz einfach, sodass du nicht jedes Mal einen Webdesigner hinzuziehen musst, wenn du eine einfache Änderung an deiner Website vornehmen willst. Du kannst auch eigene Menüs und Navigationselemente für deine Website erstellen, ohne dass du den Code anfassen musst.
Wenn sich deine Web-App auf bestimmte Inhalte konzentriert (z.B. konzentriert sich unsere SchoolPress-App auf Aufgaben und Diskussionen), kannst du mit der Custom Post Types API für WordPress (siehe Kapitel 5) diese benutzerdefinierten Inhalte schnell einrichten und verwalten.
Auch Apps, die eher aufgabenorientiert sind, haben in der Regel ein paar Seiten für Informationen, Dokumentation und Verkauf. Wenn du WordPress für deine App verwendest, kannst du deine App und all deine Inhalte an einem Ort verwalten.
Benutzerverwaltung ist mit WordPress einfach und sicher
WordPress hat alles, was du brauchst, um sowohl administrative Benutzer als auch Endbenutzer zu deiner Website hinzuzufügen.
Neben der Kontrolle des Zugriffs auf Inhalte ist das Rollen- und Fähigkeitssystem in WordPress erweiterbar und ermöglicht es dir zu steuern, welche Aktionen für bestimmte Nutzergruppen verfügbar sind. So können Nutzer/innen mit der Rolle "Mitwirkender" standardmäßig neue Beiträge hinzufügen, diese aber nicht veröffentlichen. Genauso kannst du neue Rollen und Fähigkeiten erstellen, um zu bestimmen, wer Zugriff auf deine benutzerdefinierten Funktionen hat.
Mit Plugins wie Paid Memberships Pro kannst du die integrierte Benutzerverwaltung erweitern, um Mitglieder verschiedener Stufen zu benennen und zu kontrollieren, auf welche Inhalte die Benutzer Zugriff haben. Du kannst zum Beispiel eine Stufe einrichten, um zahlenden Mitgliedern Zugang zu Premium-Inhalten auf deiner WordPress-Website zu geben.
Plugins
Im WordPress-Repository gibt es mehr als 55.000 kostenlose Plugins. Es gibt noch viel mehr Plugins, sowohl kostenlose als auch Premium-Plugins, auf verschiedenen Seiten im Internet. Wenn du eine Idee für eine Erweiterung deiner Website hast, ist die Wahrscheinlichkeit groß, dass es dafür ein Plugin gibt, mit dem du Zeit und Geld sparen kannst.
Es gibt eine Handvoll unverzichtbarer Plugins, die wir auf fast jeder Website und Webanwendung verwenden, die wir erstellen.
Bei den meisten Websites, die du erstellst, möchtest du die Ausgabe für ein schnelleres Surfen zwischenspeichern, Tools wie Google Analytics für die Besucherverfolgung nutzen, Sitemaps erstellen und die Seiteneinstellungen für die Suchmaschinenoptimierung (SEO) anpassen.
Für all diese Funktionen gibt es viele gut unterstützte Plugins. Wir empfehlen unsere Favoriten in diesem Buch; eine Liste mit findest du auf der Website dieses Buches.
Flexibilität ist wichtig
WordPress ist ein vollwertiges Framework, das viele Dinge kann. Außerdem basiert WordPress auf der PHP-, JavaScript- und MySQL-Technologie, so dass alles, was du in PHP/MySQL erstellen kannst (also so ziemlich alles), problemlos in deine WordPress-Anwendung integriert werden kann.
WordPress und PHP/MySQL sind nicht perfekt für jede Aufgabe, aber sie eignen sich gut für eine Vielzahl von Aufgaben. Wenn du eine Plattform hast, die mit deinem Unternehmen mitwächst, kannst du schneller handeln und umschwenken. Hier ist zum Beispiel ein typischer Ablauf für , die Website eines schlanken Startups, das mit WordPress arbeitet:
-
Kündige dein Startup mit einer einseitigen Website an.
-
Füge ein Formular hinzu, um E-Mail-Adressen zu sammeln.
-
Füge einen Blog hinzu.
-
Konzentriere dich auf SEO und optimiere alle Inhalte.
-
Schiebe Blogbeiträge auf Twitter und Facebook.
-
Foren hinzufügen.
-
Verwende das Plugin Paid Memberships Pro, damit Mitglieder für den Zugang bezahlen können.
-
Füge benutzerdefinierte Formulare, Tools und Anwendungsverhalten für zahlende Mitglieder hinzu.
-
Aktualisiere die Benutzeroberfläche mit JavaScript-Techniken und -Frameworks.
-
Passe die Website und den Server an die Skalierung an.
-
Lokalisiere die Website/App für verschiedene Länder und Sprachen.
-
Füge die Unterstützung für Progressive Web Apps hinzu.
-
Starte iOS- und Android-Wrapper für die App.
Das Schöne an diesem Weg ist, dass du bei jedem Schritt dieselbe Nutzerdatenbank hast und dieselbe Entwicklungsplattform verwendest.
Häufige Sicherheitsupdates
Die Tatsache, dass WordPress auf Millionen von Websites eingesetzt wird, macht es zu einem Ziel für Hacker, die versuchen, die Sicherheit des Systems zu durchbrechen. Einige dieser Hacker waren in der Vergangenheit erfolgreich, aber die Entwickler von WordPress kümmern sich schnell um Sicherheitslücken und veröffentlichen Updates, um sie zu beheben. Das ist so, als ob Millionen von Menschen deine Software ständig testen und reparieren würden, denn genau das passiert auch.
Die zugrunde liegende Architektur von WordPress macht das Einspielen dieser Updates zu einem schnellen und problemlosen Prozess, den auch unerfahrene Internetnutzer/innen durchführen können. Wenn du WordPress geschickt einrichtest und auf die neuesten Versionen aktualisierst, sobald sie verfügbar sind, ist WordPress eine weitaus sicherere Plattform für deine Website als alle anderen verfügbaren Systeme. Auf das Thema Sicherheit gehen wir in Kapitel 8 näher ein.
Kosten
WordPress ist kostenlos. PHP ist kostenlos. MySQL ist kostenlos. Die meisten Plugins sind kostenlos.
Server und Hosting kosten Geld, aber je nachdem, wie groß deine Webanwendung ist und wie viel Traffic du hast, kann das relativ günstig sein. Wenn du benutzerdefinierte Funktionen benötigst, die in den vorhandenen Plugins nicht enthalten sind, musst du eventuell einen Entwickler dafür bezahlen. Oder wenn du selbst Entwickler bist, kostet dich das etwas Zeit.
Antworten auf einige häufig geäußerte Kritikpunkte an WordPress
Einige sehr lautstarke Kritiker von WordPress behaupten, dass es kein gutes Framework für die Entwicklung von Webanwendungen ist, oder dass es überhaupt kein Framework ist. Bei allem Respekt vor denjenigen, die diese Meinung vertreten, möchten wir hier erläutern, warum wir anderer Meinung sind. Im Folgenden findest du einige gängige Kritikpunkte.
WordPress ist nur für Blogs
Viele Menschen glauben, dass WordPress nur zum Betreiben von Blogs geeignet ist, weil es ursprünglich für Blogs entwickelt wurde.
Aussagen wie diese waren noch vor ein paar Jahren wahr, aber WordPress hat inzwischen starke CMS-Funktionen implementiert, die es auch für andere inhaltsorientierte Websites nützlich machen. Mit einem Marktanteil von mehr als 60 % ist WordPress heute das beliebteste CMS im Einsatz.2 Abbildung 1-1 zeigt eine Folie aus der Präsentation "State of WordPress" von Matt Mullenweg vom WordCamp San Francisco 2013. Die auf dem Kopf stehende Pyramide auf der linken Seite stellt ein WordPress aus dem Jahr 2006 dar, bei dem der größte Teil des Codes der Blog-Anwendung gewidmet ist und nur ein kleiner Teil des CMS- und Plattform-Codes das System aufrecht erhält. Die Pyramide auf der rechten Seite stellt den aktuellen Stand der WordPress-Plattform dar, bei der der größte Teil des Codes in der Plattform selbst steckt, mit einer CMS-Schicht darüber und der Blog-Anwendung, die auf der CMS-Schicht läuft. WordPress ist eine viel stabilere Plattform als noch vor ein paar Jahren.
Mit der Custom Post Types API kannst du deine WordPress-Installation so anpassen, dass sie neben Blogbeiträgen und Seiten auch andere Inhaltstypen unterstützt. Wir behandeln dies im Detail in Kapitel 5.
WordPress ist nur für Inhaltsseiten
Ähnlich wie die Leute, die sagen, dass WordPress nur für Blogs geeignet ist, werden auch einige sagen, dass WordPress nur für Inhaltsseiten geeignet ist.
Erstens: Selbst wenn WordPress nur für inhaltsbasierte Websites und Apps anwendbar wäre, würde das eine große Anzahl von Apps ausmachen. Auf dem Startbildschirm deines Handys befinden sich wahrscheinlich viele inhaltsbasierte Apps wie Netflix, Twitter, Facebook, Reddit und Evernote. Das sind sehr beliebte Apps, die von großen Unternehmen betrieben werden. Wir schlagen nicht vor, dass diese Apps auf WordPress laufen sollten, aber wir schlagen vor, dass du eine ähnliche App mit WordPress als Anwendungsframework erstellen kannst.
Zweitens ist WordPress, wie wir in diesem Buch im Detail besprechen werden, ein großartiges Framework, um interaktive Webanwendungen zu erstellen. Das Hauptmerkmal, das die Verwendung von WordPress als Framework ermöglicht, ist die Plugin-API, die es dir erlaubt, in die Standardfunktionen von WordPress einzugreifen und Dinge zu ändern. Du kannst nicht nur die Tausenden von Plugins nutzen, die im WordPress-Repository und anderswo im Internet verfügbar sind, sondern du kannst die Plugin-API auch nutzen, um deine eigenen Plugins zu schreiben, mit denen WordPress alles tun kann, was in PHP/MySQL möglich ist.
WordPress skaliert nicht
Manche verweisen auf eine Standard-WordPress-Installation, die auf einem Low-End-Hosting läuft, und stellen fest, dass die Seite bei hoher Last langsamer wird oder abstürzt.
Als wir dir vorschlugen, dass du mit WordPress eine Website wie Facebook erstellen kannst, hast du vielleicht zu Recht auf diese Idee geschimpft.
Hinweis
Wenn du vorhast, eine App in Facebook-Größe zu entwickeln, ist dies nicht das richtige Buch für dich. Frag deinen CTO, welcher Teil seines Milliardenbudgets für deine App vorgesehen ist und welche Ingenieure du von Google und Amazon abwerben musst, um deine individuelle Lösung zu bauen.
In Wirklichkeit laufen viele Websites mit hohem Traffic auf WordPress. WordPress.com läuft mit der gleichen Software wie alle anderen WordPress-Websites und ist eine der am stärksten frequentierten Websites der Welt.
Wenn die Nutzung deiner Anwendung zunimmt, musst du einzelne Komponenten aktualisieren und austauschen, um die Skalierung zu erreichen. Die Probleme bei der Skalierung von WordPress sind die gleichen wie bei jeder anderen Anwendung auch: Caching von Seiten und Daten, schnellere Verarbeitung von Datenbankaufrufen und Verbesserung der Netzwerkleistung. Große Websites wie WordPress.com, TechCrunch und die Blogs der New York Times haben mit WordPress skaliert. Die meisten Lektionen, die wir bei der Skalierung von PHP/MySQL-Anwendungen im Allgemeinen gelernt haben, gelten auch für WordPress. Wir behandeln die Skalierung von WordPress-Anwendungen ausführlich in Kapitel 14.
WordPress ist unsicher
Wie bei jedem Open-Source-Produkt gibt es auch bei WordPress einen Kompromiss in Bezug auf die Sicherheit.
Einerseits ist WordPress so beliebt, dass es das Ziel von Hackern sein wird, die nach Sicherheitslücken suchen. Und da der Code quelloffen ist, werden diese Schwachstellen leichter zu entdecken sein.
Da WordPress aber Open Source ist, wirst du davon erfahren, wenn diese Schwachstellen öffentlich werden, und jemand anderes wird die Schwachstelle wahrscheinlich für dich beheben.
Wir fühlen uns sicherer, wenn wir wissen, dass es da draußen viele Leute gibt, die versuchen, WordPress auszunutzen, und ebenso viele Leute, die daran arbeiten, WordPress gegen diese Angriffe zu schützen. Wir glauben nicht an "Sicherheit durch Unklarheit", außer als zusätzliche Maßnahme. Wir ziehen es vor, dass die Sicherheitslücken in unserer Software offen zu Tage treten, anstatt bis zum schlimmstmöglichen Zeitpunkt unentdeckt zu bleiben.
Kapitel 8 befasst sich ausführlicher mit Sicherheitsfragen, einschließlich einer Liste bewährter Methoden zur Absicherung deiner WordPress-Installation und wie du sicher programmieren kannst.
WordPress-Plugins sind Mist
Die Plugin-API von WordPress und die Tausenden von Plugins, die damit entwickelt wurden, sind die geheime Soße und unserer Meinung nach der Hauptgrund dafür, dass WordPress so beliebt und als Website-Plattform so erfolgreich ist.
Manche Leute werden sagen: "Klar, es gibt Tausende von Plugins, aber die sind alle Mist." OK, einige der Plugins sind Mist.
Aber es gibt eine Menge Plugins, die definitiv kein Mist sind - darunter AppPresser, das von Brian Messenlehner, einem Mitautor, entwickelt wurde. Wenn du WordPress für die Verwaltung deiner schriftlichen Inhalte oder deines E-Commerce-Shops verwendest, ist das AppPresser-Plugin und die Plattform der schnellste Weg, um diese Inhalte oder diesen Shop in eine mobile App zu verwandeln.
Auch Paid Memberships Pro, entwickelt von Co-Autor Jason Coleman, ist kein Mist. Wenn du Paid Memberships Pro für die Abrechnung und Verwaltung deiner Mitglieder verwendest, kannst du dich bei der Entwicklung deiner App auf deine Kernkompetenzen konzentrieren, anstatt dich mit der Integration deiner Website in ein Zahlungsportal zu beschäftigen.
Viele Plugins tun etwas sehr Einfaches (z. B. die Admin-Leiste vor Nicht-Administratoren verstecken), funktionieren genau wie angekündigt und haben keinen Platz für Mist.
Die Themes und Plugins im WordPress.org-Repository werden von Freiwilligen auf Sicherheit und Codequalität geprüft. Der Theme-Review-Prozess auf WordPress.org ist bekanntlich strenger und umfassender als die Prozesse auf anderen Marktplätzen. Das Tide-Projekt arbeitet daran, die Plugin- und Theme-Repositories mit automatisierten Tests auszustatten, um die Qualität von Plugins und Updates zu verbessern und Kompatibilitäts- und Sicherheitsprobleme schneller zu erkennen.
Selbst schlechte Plugins können repariert, umgeschrieben oder ausgeliehen werden, damit sie besser funktionieren. Manchmal ist es vielleicht einfacher, ein schlechtes Plugin umzuschreiben, anstatt es zu reparieren. Aber du bist trotzdem weiter, als wenn du alles von Grund auf selbst schreiben müsstest.
Niemand zwingt dich, WordPress-Plugins zu verwenden, ohne sie selbst zu prüfen. Wenn du eine seriöse Webanwendung entwickelst, wirst du den Plugin-Code selbst überprüfen, ihn an deine Standards anpassen und mit der Entwicklung fortfahren.
Wann du WordPress nicht verwenden solltest
WordPress ist nicht die Lösung für jede Anwendung. In diesem Abschnitt werden einige Fälle beschrieben, in denen du WordPress nicht für die Erstellung deiner Anwendung verwenden solltest.
Du planst, die Technologie deiner Website zu lizenzieren oder zu verkaufen
WordPress verwendet die GNU General Public License, Version 2 (GPLv2), die Beschränkungen für die Verbreitung von Software enthält, die du mit ihr erstellst. Das heißt, du kannst nicht einschränken, was andere mit deiner Software machen, wenn du sie verkaufst oder verteilst.
Das ist ein kompliziertes Thema, aber der Grundgedanke ist, dass du dir keine Gedanken über die GPLv2 machen musst, wenn du deine Anwendung nur verkaufst oder den Zugang zu ihr verteilst. Wenn du jedoch den zugrunde liegenden Quellcode deiner Anwendung verkaufst oder weitergibst, gilt die GPLv2 für den Code, den du weitergibst.
Wenn wir SchoolPress zum Beispiel auf unseren eigenen Servern hosten und Accounts für den Zugriff auf die App verkaufen, gilt das nicht als Vertrieb und die GPLv2 hat keinerlei Auswirkungen auf unser Geschäft.
Wenn wir jedoch Schulen erlauben wollen, die Software auf ihren eigenen Servern zu installieren, müssen wir ihnen den Quellcode zur Verfügung stellen. Dies würde als eine Art der Verbreitung gelten. Unsere Kunden könnten unseren Quellcode legal kostenlos weitergeben, auch wenn wir ihnen die Software zunächst in Rechnung gestellt hätten. Wir müssen die GPLv2-Lizenz verwenden, die es uns nicht erlaubt, einzuschränken, was die Nutzer/innen mit dem Code machen, nachdem sie ihn heruntergeladen haben.
Eine andere Plattform wird dich schneller ans Ziel bringen
Wenn du ein Team von erfahrenen Ruby-Entwicklern hast, solltest du Ruby für die Entwicklung deiner Web-App verwenden. Wenn es eine Plattform, ein Framework oder ein Paket gibt, das 80 % der Funktionen enthält, die du für deine Webanwendung brauchst, und WordPress nichts Vergleichbares hat, solltest du wahrscheinlich diese andere Plattform verwenden.
Flexibilität ist dir nicht wichtig
Eine der besten Eigenschaften einer WordPress-Website ist die Möglichkeit, Teile deiner Website schnell zu ändern, um sie besser an deine Bedürfnisse anzupassen. Wenn zum Beispiel die Facebook-"Likes" keinen Traffic mehr bringen, kannst du dein Facebook-Connect-Plugin deinstallieren und eines für Pinterest installieren.
In der Regel ist es schneller, dein Theme zu aktualisieren oder Plugins auf einer WordPress-Website auszutauschen, als Funktionen auf einer anderen Plattform von Grund auf neu zu entwickeln. In Fällen, in denen Optimierung und Leistung wichtiger sind als die Möglichkeit, die Anwendung schnell zu aktualisieren, ist die Programmierung einer nativen Anwendung oder die Programmierung in PHP die bessere Wahl.
Wenn deine App nur eine einfache Aufgabe erfüllen soll, solltest du sie auf einer niedrigeren Ebene aufbauen. Der Lizenzserver von Paid Memberships Pro zum Beispiel besteht im Wesentlichen aus einer einzigen JSON-Datei mit Add-on-Informationen und einem kleinen Skript, das die Lizenzschlüssel prüft und gezippte Dateien liefert. Jason hat diesen Lizenzserver direkt in PHP entwickelt, mit umfangreichen Caching-Funktionen. Der Lizenzserver läuft auf einem $10/Monat DigitalOcean Sroplet und bedient mehr als 80.000 Websites, die Paid Memberships Pro nutzen.
Wenn du über die Ressourcen von Facebook verfügst, kannst du es dir auch leisten, alles von Hand zu bauen und eigene PHP-zu-C-Compiler und native iOS-Komponenten zu verwenden, um die Ladezeiten deiner Website und App um ein paar Millisekunden zu verkürzen.
Deine App muss hochgradig echtzeitfähig sein
Ein möglicher Nachteil von WordPress, auf den wir später noch eingehen werden, ist seine Abhängigkeit von der typischen Webserver-Architektur. In der typischen WordPress-Konfiguration ruft ein Nutzer eine URL auf, die über HTTP mit einem Webserver (z. B. Apache) kommuniziert, der ein PHP-Skript startet, um die Seite zu erstellen, und dann die vollständige Seite an den Nutzer zurückgibt.
Es gibt Möglichkeiten, die Leistung dieser Architektur durch Caching-Techniken und/oder optimierte Server-Setups zu verbessern. Du kannst WordPress asynchron machen, indem du Ajax-Aufrufe verwendest oder mit alternativen Clients auf die Datenbank zugreifst. Wenn deine Anwendung jedoch in Echtzeit und vollständig asynchron laufen muss (z. B. eine Chatroom-ähnliche Anwendung oder ein Multiplayer-Spiel), solltest du dir den Einsatz von WordPress gut überlegen.
Viele WordPress-Entwicklerinnen und -Entwickler, darunter auch Matt Mullenweg, der Gründer und geistige Führer von WordPress, wissen um diese Einschränkung. Immer mehr Funktionen von WordPress werden in JavaScript verlagert, wo Berechnungen in den Browser verlagert werden können und Frameworks wie REACT verwendet werden können, um hochgradig interaktive Erlebnisse zu schaffen. Der neue Gutenberg-Editor, der mit WordPress 5.0 eingeführt wurde, ist das beste Beispiel für diese Entwicklung und ein Hinweis auf das, was noch kommen wird. Aber im Moment hast du es schwer, WordPress dazu zu bringen, asynchron mit der gleichen Leistung zu arbeiten wie eine native App oder etwas, das komplett in Node.js oder anderen Technologien entwickelt wurde, die speziell für Echtzeitanwendungen geeignet sind.
WordPress als Anwendungs-Framework
Content-Management-Systeme wie WordPress, Drupal und Joomla werden oft aus der Framework-Diskussion ausgeklammert, aber in Wirklichkeit eignet sich WordPress (insbesondere) hervorragend für das, worum es bei Frameworks eigentlich geht: die schnelle Erstellung von Anwendungen.
Innerhalb weniger Minuten kannst du WordPress einrichten und hast eine voll funktionsfähige App mit Benutzeranmeldung, Sitzungsmanagement, Inhaltsverwaltung und einem Dashboard zur Überwachung der Website-Aktivitäten.
Die verschiedenen APIs, gemeinsamen Objekte und Hilfsfunktionen, die in diesem Buch behandelt werden, ermöglichen es dir, komplexe Anwendungen schneller zu programmieren, ohne dass du dich um die Integration von Systemen auf niedrigerer Ebene kümmern musst.
Abbildung 1-2 zeigt das rechte Dreieck aus Mullenwegs "State of WordPress"-Präsentation aus dem Jahr 2013, das eine stabile WordPress-Plattform mit einer darauf aufbauenden CMS-Schicht und einer darauf aufbauenden Blogging-Anwendung darstellt.
Die Realität ist, dass der Großteil der aktuellen WordPress-Codebasis die zugrunde liegende Anwendungsplattform unterstützt. Betrachte jede WordPress-Version als ein Anwendungs-Framework, das mit einer Beispiel-Blogging-App gebündelt ist.
WordPress im Vergleich zu Model-View-Controller-Frameworks
Model-View-Controller (MVC) ist ein gängiges Entwurfsmuster, das in vielen Softwareentwicklungs-Frameworks verwendet wird. Die Hauptvorteile von einer MVC-Architektur sind die Wiederverwendbarkeit des Codes und die Trennung der Anliegen (SoC). WordPress verwendet keine MVC-Architektur, fördert aber auf seine eigene Weise die Wiederverwendung von Code und die Trennung von Belangen (SoC).
Hier erklären wir kurz die MVC-Architektur und wie sie sich auf den WordPress-Entwicklungsprozess übertragen lässt. Wenn du mit MVC-basierten Frameworks vertraut bist, sollte dir dieser Abschnitt helfen zu verstehen, wie du die WordPress-Entwicklung auf ähnliche Weise angehen kannst.
Abbildung 1-3 beschreibt eine typische MVC-basierte Anwendung. Der Endbenutzer verwendet einen Controller, der den Zustand und die Daten der Anwendung über ein Modell bearbeitet, das dann eine Ansicht aktualisiert, die dem Benutzer angezeigt wird. In einer Blog-Anwendung könnte ein Nutzer zum Beispiel die Seite mit den letzten Beiträgen (eine View) ansehen. Der Nutzer klickt auf einen Beitragstitel, der ihn zu einer neuen URL (einem Controller) führt, die die Beitragsdaten (in einem Model) lädt und den einzelnen Beitrag anzeigt (eine andere View).
Die MVC-Architektur unterstützt die Wiederverwendbarkeit von Code, indem sie die Interaktion zwischen Models, Views und Controllern ermöglicht. Zum Beispiel können sowohl die Ansicht der letzten Beiträge als auch die Ansicht der einzelnen Beiträge dasselbe Beitragsmodell verwenden, wenn sie Beitragsdaten anzeigen. Dieselben Modelle können im Frontend zur Anzeige von Beiträgen und im Backend zu deren Bearbeitung verwendet werden. Die MVC-Architektur unterstützt SoC, indem sie es den Designern ermöglicht, sich auf die Ansichten zu konzentrieren, während die Programmierer ihre Aufmerksamkeit auf die Modelle richten.
Du könntest versuchen, eine MVC-Architektur in WordPress zu verwenden. Es gibt eine Reihe von Projekten, die dir dabei helfen, aber wir glauben, dass der Versuch, MVC auf WordPress zu übertragen, zu Problemen führen könnte, wenn der WordPress-Kern MVC nicht offiziell unterstützt. Stattdessen schlagen wir vor, dem "WordPress Way" zu folgen, wie er in diesem Buch beschrieben wird.
Wenn du dich jedoch für interessierst, ist das WP MVC Plugin in aktiver Entwicklung und hilft dir, ein MVC-Framework für die Erstellung von WordPress-Plugins zu verwenden. Wenn du kein vollständiges MVC-Framework verwenden willst oder musst, gibt es einige Möglichkeiten, einen MVC-Prozess in WordPress abzubilden.
Modelle = Plugins
In einem MVC-Framework befindet sich der Code, der die zugrunde liegenden Datenstrukturen und die Geschäftslogik speichert, in den Modellen. Hier verbringen die Programmierer den größten Teil ihrer Zeit.
In WordPress sind Plugins der richtige Ort, um neue Datenstrukturen, komplexe Geschäftslogik und benutzerdefinierte Beitragstypen zu speichern.
Dieser Vergleich hinkt in mehrfacher Hinsicht. Erstens fügen viele Plugins ansichtsähnliche Funktionen hinzu und enthalten Designelemente - z. B. jedes Plugin, das ein Widget zur Verwendung auf deinen Seiten hinzufügt. Zweitens werden Formulare und andere Designkomponenten, die im WordPress-Dashboard verwendet werden, in der Regel auch in Plugins verarbeitet.
Eine Möglichkeit, den SoC übersichtlicher zu gestalten, wenn du deinen WordPress-Plugins View-ähnliche Komponenten hinzufügst, besteht darin, einen Templates- oder Pages-Ordner zu erstellen und deinen Frontend-Code darin abzulegen. Es ist gängige Praxis, dass Templates die vom Plugin verwendete Vorlage überschreiben können. Wenn du zum Beispiel WordPress mit dem Plugin Paid Memberships Pro verwendest, kannst du einen Ordner namens paid-memberships-pro/pages in dein aktives Theme einfügen, um die Standard-Seitenvorlagen zu überschreiben. (Diese Technik zum Überschreiben von Plugin-Vorlagen wird in Kapitel 4 behandelt).
Ansichten = Themen
In einem MVC-Framework wird der Code zur Anzeige der Daten für den Benutzer in den Ansichten geschrieben. Hier verbringen Designer und Frontend-Entwickler den Großteil ihrer Zeit.
In WordPress sind Themes der richtige Ort, um Templating-Code und Logik zu speichern.
Auch hier lässt sich der Vergleich nicht eins zu eins übertragen, aber "Ansichten = Themen" ist ein guter Ausgangspunkt.
Controller = Template Loader
In einem MVC-Framework wird der Code zur Verarbeitung von Benutzereingaben (in Form von URLs oder $_GET
oder $_POST
Daten) und zur Entscheidung, welche Modelle und Ansichten zur Bearbeitung einer Anfrage verwendet werden sollen, in den Controllern gespeichert. Der Controller-Code wird in der Regel von einem Programmierer bearbeitet und oft einmal eingerichtet und dann vergessen. Der Hauptteil der Programmierung in einer MVC-Anwendung findet in den Modellen und Ansichten statt. Trotzdem sind die Controller ein wichtiger Teil der Funktionsweise einer Anwendung.
In WordPress werden alle Seitenanfragen (sofern sie nicht auf eine zwischengespeicherte .html-Datei zugreifen) über die Datei index.php abgewickelt und von WordPress entsprechend der Template-Hierarchie verarbeitet. Der Template-Loader findet heraus, welche Datei im Template verwendet werden soll, um die Seite für den Endnutzer anzuzeigen. Verwende zum Beispiel search.php, um Suchergebnisse anzuzeigen, single.php, um einen einzelnen Beitrag anzuzeigen, und so weiter.
Das Standardverhalten kann über die WP_Rewrite API (siehe Kapitel 7) und andere Hooks und Filter weiter angepasst werden. Informationen zur Templating-Hierarchie findest du im WordPress-Theme-Handbuch; wir behandeln die Templating-Hierarchie ausführlicher in Kapitel 4.
Um besser zu verstehen, wie MVC-Frameworks funktionieren, bietet das PHP-Framework Yii eine großartige Ressource, die im Detail erklärt, wie man seine MVC-Architektur am besten nutzt.3
Wenn du mehr darüber erfahren möchtest, wie du mit WordPress als Framework Webanwendungen entwickeln kannst, lies dieses Buch weiter.
Anatomie einer WordPress App
In diesem Abschnitt beschreiben wir die App, die wir als Begleiter für dieses Buch entwickelt haben: SchoolPress. Wir erläutern die beabsichtigte Funktionalität von SchoolPress, wie sie funktioniert und wer sie nutzen wird, und - was für dieses Buch am wichtigsten ist - wie die einzelnen Teile der App in WordPress aufgebaut sind.
Sei nicht beunruhigt, wenn du einige der folgenden Begriffe nicht verstehst. In späteren Kapiteln gehen wir auf alles, was hier vorgestellt wird, genauer ein. Wann immer möglich, verweisen wir auf das Kapitel, das dem besprochenen Feature entspricht.
Hinweis
Dieses Buch soll kein "Wie man die SchoolPress-App nachbaut"-Buch oder eine Schritt-für-Schritt-Anleitung sein. Wenn es sinnvoll ist, verwenden wir SchoolPress in unseren Code-Beispielen im ganzen Buch, damit du keine Zeit darauf verwenden musst, den Kontext jedes einzelnen Beispiels zu verstehen.
Was ist SchoolPress?
SchoolPress ist eine Web-App, die es Lehrer/innen leicht macht, mit ihren Schüler/innen außerhalb des Klassenzimmers zu interagieren. Lehrer/innen können Klassen erstellen und ihre Schüler/innen dazu einladen. Jede Klasse verfügt über ein Forum für Ad-hoc-Diskussionen und ein strukturiertes System, in dem die Lehrkräfte Aufgaben stellen und die Schüler/innen ihre Arbeiten abgeben können.
Du kannst die funktionierende App auf der SchoolPress-Website finden. Der Quellcode der Anwendung ist im SchoolPress GitHub Repo zu finden.
SchoolPress läuft in einem WordPress Multisite-Netzwerk
SchoolPress betreibt eine Multisite-Version von WordPress. Auf der Hauptseite finden sich kostenlose Konten, mit denen sich Lehrkräfte anmelden und ihre Klassen verwalten können. Sie enthält auch alle Marketinginformationen für die einzelnen Schulseiten im Netzwerk, einschließlich der Seite, auf der man sich für eine kostenpflichtige Mitgliedschaft anmelden und auschecken kann.
Schulen können eine eigene Subdomain einrichten, in der die Klassen für ihre Lehrkräfte untergebracht werden. Diese Einrichtung bietet eine bessere Kontrolle und Berichterstattung für alle Klassen in der gesamten Schule. Einzelheiten zur Verwendung eines Multisite-Netzwerks mit WordPress findest du in Kapitel 12.
Das SchoolPress Geschäftsmodell
SchoolPress verwendet die Plugins Paid Memberships Pro, PMPro Register Helper und PMPro Network, um den Anmeldeprozess anzupassen und Kreditkartenzahlungen für sich anmeldende Schulen zu akzeptieren.
Schulen können gegen eine Jahresgebühr eine eigene Subdomain für ihre Schule erwerben. Andere SchoolPress-Nutzer zahlen nicht für den Zugang. Wenn Schuladministratoren sich anmelden, können sie einen Schulnamen und einen Slug für ihre Subdomain <IhreSchule>.schoolpress.me angeben. Eine neue Netzwerkseite wird für sie eingerichtet und sie erhalten Zugang zu einer optimierten Version des WordPress-Dashboards für ihre Seite.
Der Schulverwalter lädt dann die Lehrkräfte in das System ein. Lehrkräfte können auch eine Einladung für eine Schule beantragen, die von der Schulleitung genehmigt werden muss. Lehrer/innen können Schüler/innen zu den von ihnen erstellten Klassen einladen. Schüler/innen können ebenfalls eine Einladung zu einer Klasse beantragen, die von der Lehrkraft genehmigt werden muss.
Lehrkräfte können sich auch kostenlos anmelden, um ihren Unterricht auf schoolpress.me zu hosten. Auf Seiten, die auf dieser Subdomain gehostet werden, können Anzeigen oder andere Monetarisierungsmodelle laufen. Einzelheiten zur Einrichtung von E-Commerce mit WordPress werden in Kapitel 15 behandelt.
Mitgliedschaftsstufen und Nutzerrollen
Lehrer/innen erhalten eine Lehrermitgliedschaft (über Paid Memberships Pro) und eine benutzerdefinierte Rolle namens "Lehrer/in", mit der sie ihre Klassen erstellen und bearbeiten, Diskussionen in ihren Klassenforen moderieren und Aufgaben für ihre Klassen erstellen und verwalten können.
Lehrkräfte haben keinen Zugriff auf das WordPress-Dashboard. Sie erstellen und verwalten ihre Klassen und Aufgaben über Frontend-Formulare, die zu diesem Zweck erstellt wurden.
Schüler/innen erhalten die Mitgliedsstufe "Schüler/in" und die Standardrolle "Abonnent/in" in WordPress. Schüler/innen haben nur Zugang zu den Kursen, zu denen sie von ihren Lehrkräften eingeladen wurden, und können nur an diesen teilnehmen. Einzelheiten zu Benutzerrollen und -fähigkeiten werden in Kapitel 6 erläutert, und in Kapitel 15 geht es um die Verwendung von Mitgliedschaftsstufen zur Zugangskontrolle.
Klassen sind BuddyPress Gruppen
Wenn Lehrer/innen "Klassen" erstellen, erstellen sie in Wirklichkeit BuddyPress-Gruppen und laden ihre Schüler/innen in die Gruppe ein. Mit BuddyPress erhalten wir Klassenforen, private Nachrichten und eine gute Möglichkeit, unsere Nutzer zu organisieren.
Die Diskussionsforen der Klassen werden durch das bbPress-Plugin betrieben. Für jede Klasse wird ein neues Forum erstellt, und BuddyPress verwaltet den Zugang zu den Foren. Details zur Nutzung von Drittanbieter-Plugins wie BuddyPress und bbPress findest du in Kapitel 3.
Zuweisungen sind ein CPT
Aufgaben sind ein CPT, das ein Frontend-Formular für Lehrer/innen verwendet, um neue Aufgaben zu veröffentlichen. Aufgaben sind genau wie die Standard-Blogposts in WordPress, mit einem Titel, Inhalt und angehängten Dateien. Der/die Lehrer/in, der/die die Aufgabe veröffentlicht, ist der/die Autor/in des Beitrags.
Hinweis
WordPress hat eingebaute Beitragstypen wie Beiträge und Seiten und eingebaute Taxonomien wie Kategorien und Tags. Für SchoolPress erstellen wir unsere eigenen CPTs und Taxonomien. Mehr über das Erstellen von benutzerdefinierten Beitragstypen und Taxonomien findest du in Kapitel 5.
Einreichungen sind ein (Sub-)CPT für Zuweisungen
Die Schüler/innen können Kommentare zu einer Aufgabe posten und sie können auch wählen, ob sie ihre offizielle Einreichung für die Aufgabe über ein anderes Formular im Frontend posten wollen.
Übermittlungen sind, wie Zuweisungen, auch CPTs. Beiträge werden mit Aufgaben verknüpft, indem das Feld post_parent
auf die ID der Aufgabe gesetzt wird, für die der Beitrag eingereicht wurde. Schüler/innen können Textinhalte und einen oder mehrere Anhänge zu einer Einsendung hinzufügen.
Semester sind eine Taxonomie der Klasse CPT
Eine benutzerdefinierte Taxonomie namens Semester wird für die Gruppe/Klasse CPT eingerichtet. Schuladministratoren können neue Semester zu ihren Websites hinzufügen. Zum Beispiel könnte ein "Herbstsemester 2019" erstellt werden und Lehrkräfte könnten dieses Semester bei der Erstellung ihrer Klassen zuweisen. Die Schüler/innen können dann ganz einfach eine Liste aller Herbstkurse 2019 durchsuchen.
Abteilungen sind eine Taxonomie der Klasse CPT
Eine benutzerdefinierte Taxonomie namens Abteilung wird auch für die Gruppe/Klasse CPT eingerichtet. Diese ist auch als Dropdown-Liste für Lehrkräfte verfügbar, wenn sie ihre Klassen erstellen, und ermöglicht es den Schülern, die Liste der Klassen nach Abteilung zu durchsuchen.
SchoolPress hat ein eigenes Plugin
Hinter den Kulissen werden die benutzerdefinierten Teile der SchoolPress-App von einem einzigen benutzerdefinierten Plugin namens SchoolPress gesteuert. Dieses Hauptplugin enthält die Definitionen für die verschiedenen CPTs, Taxonomien und Benutzerrollen. Es enthält auch den Code zur Anpassung der Plugins von Drittanbietern, die SchoolPress nutzt, wie Paid Memberships Pro und BuddyPress.
Das Haupt-Plugin enthält außerdem Klassen für Schuladministratoren, Lehrer und Schüler, die die Klasse WP_User
erweitern, sowie Klassen für Klassen, Aufgaben und Einsendungen, die die Klasse WP_Post
umschließen. Diese (PHP-)Klassen ermöglichen es uns, unseren Code objektorientiert zu organisieren, so dass wir leichter kontrollieren können, wie unsere verschiedenen Anpassungen zusammenwirken und unseren Code in Zukunft erweitern können. Es macht Spaß, mit diesen Klassen zu arbeiten, und sie ermöglichen den in Beispiel 1-1 gezeigten Code.
Beispiel 1-1. Mögliche Ereignisse bei der Benutzeranmeldung
if
(
$class
->
isTeacher
(
$current_user
))
{
//this is the teacher, show them teacher stuff
//...
}
elseif
(
$class
->
isStudent
(
$current_user
))
{
//this is a student in the class, show them student stuff
//...
}
elseif
(
is_user_logged_in
())
{
//not logged in, send them to the login form with a redirect back here
wp_redirect
(
wp_login_url
(
get_permalink
(
$class
->
ID
)));
exit
;
}
else
{
//not a member of this class, redirect them to the invite page
wp_redirect
(
$class
->
invite_url
);
exit
;
}
Die Erstellung von benutzerdefinierten Plugins wird in Kapitel 3 behandelt, die Erweiterung der Klasse WP_User
in Kapitel 6.
SchoolPress verwendet ein paar andere benutzerdefinierte Plugins
Gelegentlich wird ein Teil des Codes für eine bestimmte Anwendung entwickelt, der auch für andere Projekte nützlich wäre. Wenn der Code so weit werden kann, dass er außerhalb des Kontexts der aktuellen App und des Hauptplugins ausgeführt werden kann, kann er in ein separates benutzerdefiniertes Plugin eingebaut werden.
Ein Beispiel dafür ist das Plugin "Vor- und Nachname als Anzeigename erzwingen", das für dieses Projekt erforderlich war. Es benötigte keinen der Hauptplugins, um zu funktionieren, und ist auch für andere WordPress-Seiten außerhalb der SchoolPress-App nützlich. Wir haben ein separates Plugin für diese Funktion erstellt und pflegen es im WordPress.org-Repository, damit andere es nutzen und davon profitieren können.
SchoolPress verwendet das Memberlite Theme
Die Hauptseite von schoolpress.me läuft mit einem angepassten Memberlite Child-Theme. Wenn sich ein Schuladministrator für eine Premium-Subdomain anmeldet, kann er aus einer Vielzahl von Memberlite Child-Themes wählen und die Farben, Schriftarten und Logos des Themes ändern, damit sie besser zum Branding der Schule/Klasse passen. Außerdem verwenden alle Themes ein responsives Design, das sicherstellt, dass die Website sowohl auf Mobil- und Tablet-Displays als auch auf Desktop-Displays gut aussieht.
Der Code im Memberlite-Theme ist streng auf die Programmierung der Anzeige beschränkt. Der Code des Themes umfasst natürlich HTML und CSS für das Layout der Seite, enthält aber auch einfache Logik, die in das SchoolPress-Plugin integriert wird (wie der vorhergehende Verzweigungscode). Jeder Code, der die benutzerdefinierten Beitragstypen oder Benutzerrollen manipuliert oder viele Berechnungen beinhaltet, wird jedoch an das SchoolPress-Plugin delegiert.
Nachdem wir nun geklärt haben, was eine App ist, warum du eine App mit WordPress erstellen solltest, die "WordPress"-Methode zur Trennung von Belangen vorgestellt und unsere SchoolPress-Beispiel-App in groben Zügen beschrieben haben, wollen wir uns nun mit dem Kern von WordPress beschäftigen, was darin enthalten ist und wie es funktioniert.
1 Viele der Ideen in diesem Abschnitt sind von den folgenden Blogbeiträgen beeinflusst: "Was ist eine Webanwendung?" von Dominique Hazaël-Massieux und "Was ist eine Webanwendung?" von Bob Baxley.
2 W3Tech führt regelmäßig Umfragen über die Nutzung verschiedener Content-Management-Systeme durch.
3 Yii ist ein MVC-basiertes PHP-Framework. Andere PHP-Frameworks wie Laravel sind bei WordPress-Entwicklern und der PHP-Community im Allgemeinen beliebter, aber die MVC-bezogene Dokumentation auf der Yii-Website ist besonders gut geschrieben.
Get Erstellen von Webanwendungen mit WordPress, 2. Auflage now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.