React JS für WordPress-Benutzer: Eine grundlegende Einführung
Veröffentlicht: 2018-10-19Seit über 15 Jahren ist WordPress die beliebteste und umfassendste CMS-Lösung, mit der Sie alles von einem einseitigen Portfolio bis hin zu einer vollwertigen E-Commerce-Plattform erstellen können. WordPress verwendet PHP für seine gesamte Backend-Infrastruktur wie Updates, APIs, Authentifizierung, DB-Schicht und den Großteil des Frontends. Wie andere gängige Frameworks musste sich auch WordPress in letzter Zeit weiterentwickeln.
Angesichts des steigenden Potenzials und der Leistungsfähigkeit von JavaScript-Anwendungen für das Web sowie für Desktop- und native mobile Anwendungen versucht die WP REST API, die Lücke zwischen dem Erbe des PHP-Kerns von WordPress und dem Aufkommen von JavaScript zu schließen. Ich glaube, dass dies aus zwei Gründen ein großer Schritt für WordPress ist:
- Bestehende WP-Websites können React/Vue oder eine andere Frontend-Bibliothek verwenden, um ein besseres UI-Erlebnis zu schaffen.
- Umgekehrt erhalten Webentwickler ein Headless-CMS nach Industriestandard, das sich problemlos in den Stack ihrer Wahl integrieren lässt.
Das ist eine Win-Win-Situation für alle. In diesem Artikel werden wir unsere Energie darauf konzentrieren, ein React-Frontend für das WordPress-Backend zu erstellen. Aber werfen wir zunächst einen Blick auf die WordPress REST API.
Grundlagen der WordPress-REST-API
Die Entwicklung der WP REST API begann vor einigen Jahren und war zunächst als eigenständiges Feature-Plugin konzipiert. WordPress v4.4 mit dem Codenamen 'Clifford' führte die eigentliche Infrastruktur der REST-API in den Kern von WordPress ein. Die eigentlichen Endpunkte tauchten in WordPress v4.7 mit dem Codenamen 'Vaughan' auf. Mit der WP-API können Sie WordPress als Headless-CMS verwenden, das einfach zu bedienen, stabil und JSON-freundlich ist.
JSON
JSON ist das bevorzugte Format, wenn Sie WordPress in einen JavaScript-Stack integrieren möchten. JSON ähnelt XML insofern, als es uns die Möglichkeit gibt, Daten mithilfe einer sehr gut lesbaren Syntax effizient zu übertragen.
JSON ist eigentlich eine Zeichenfolge, die eine textbasierte Darstellung eines JavaScript-Objekts umfasst. Es speichert Daten in einer Reihe von Schlüssel-Wert-Paaren. Ein einfaches JSON-Beispiel für einen WP-Post kann so aussehen –
{
id: 1,
"title": {
"rendered": "Hello World"
},
"content": {
"rendered": "Welcome to WordPress. This is your first
post. Edit or delete it, then start blogging!"
}
}
Eine vollständige JSON-Antwort, die die WP-REST-API verwendet, enthält normalerweise zusätzliche Informationen zum Beitrag, z. B. Metadaten. Sie haben alles, was Sie brauchen, um ein Front-End-Theme oder ein Plugin für Ihre Anwendung zu erstellen.
Die Endpunkte
WordPress-Endpunkte sind für die Öffentlichkeit sehr zugänglich. Wenn Sie die neueste Version von WordPress verwenden, müssen Sie einfach /wp-json/wp/v2 an das Ende der URL anhängen. Sie können beispielsweise unter 127.0.0.1/wp-json/wp/v2 auf die grundlegenden Endpunkte zugreifen, wenn Sie eine WordPress-Instanz in Ihrem localhost eingerichtet haben. Wenn Sie die Ausgabe verschönern möchten, können Sie eine JSON-Viewer-Erweiterung verwenden, die JSON in Ihrem Browser hübsch aussehen lässt.
Die auf Ihrem Bildschirm angezeigten Daten sind im Wesentlichen der Inhalt sowie Metainformationen im JSON-Format. Sie haben hier eine Route definiert und Ihren Browser gebeten, die Daten für Sie abzurufen.
Was verstehen wir unter Strecke? Eine Route ist eine URL, die einer bestimmten Methode zugeordnet ist. Der WordPress-Kern liest die Route durch und versteht, dass jedes '/' einen bestimmten Pfad oder Parameter darstellt, der befolgt werden muss.
Ein Endpunkt kann beispielsweise '/wp-json/wp/v2/posts/1' sein , wo Sie einen Beitrag mit einer ID anfordern, die 1 entspricht. WordPress-APIs sind nützlich, weil sie ziemlich umfangreich sind. Dies bedeutet die Möglichkeit, beliebige Daten von Ihrer Website zu übernehmen und sie in einen Endpunkt umzuwandeln. Fast alle Kernfunktionalitäten in WordPress werden unterstützt und alle kommenden Funktionen werden ebenfalls unterstützt. Hier ist eine Liste der WordPress-APIs, die zum Zeitpunkt des Schreibens dieses Tutorials unterstützt werden:
| Ressource | Basisroute |
|---|---|
| Beiträge | /wp/v2/posts |
| Post-Revisionen | /wp/v2/revisionen |
| Kategorien | /wp/v2/kategorien |
| Stichworte | /wp/v2/tags |
| Seiten | /wp/v2/seiten |
| Kommentare | /wp/v2/Kommentare |
| Taxonomien | /wp/v2/Taxonomien |
| Medien | /wp/v2/media |
| Benutzer | /wp/v2/users |
| Beitragstypen | /wp/v2/typen |
| Post-Status | /wp/v2/status |
| Einstellungen | /wp/v2/Einstellungen |
Theme-Entwickler sowie Plugin-Entwickler können benutzerdefinierte Endpunkte für ihre Anwendung erstellen. Wenn Sie alle verfügbaren Endpunkte ausprobieren möchten, können Sie eine Anwendung wie Postman herunterladen. Dadurch erhalten Sie eine GUI, die speziell zum Erkunden von APIs entwickelt wurde. Darüber hinaus können Sie API-Aufrufe direkt an Apps von Drittanbietern senden, ohne auf Plugins angewiesen zu sein.
Nehmen wir ein Beispiel. Das Hochladen von Dateien und die Pflege mehrerer Versionen davon ist eine wesentliche Voraussetzung für jede moderne Webanwendung. Dies gilt insbesondere für Mediendateien. In WordPress gibt es eine Fülle von Plugins, die dies für Sie tun können. Möglicherweise müssen Sie jedoch den WordPress-Server aufrufen, um sie zu verwenden.
Mit der WP API kann die Medienhandhabungslogik von WordPress abstrahiert werden. Sie können alle API-Aufrufe von Drittanbietern direkt vom Frontend aus durchführen, was in Bezug auf die Trennung von Bedenken großartig ist. Sie können eine Bibliothek wie Cloudinary verwenden, um die Bilder und andere Mediendateien im Handumdrehen zu bearbeiten und sie dann in die Cloud hochzuladen. Nach dem Hochladen kann die URL zum Bild im WP-Backend gespeichert werden. Die Möglichkeiten sind endlos und Sie können die Teile nach Belieben kombinieren.
Sehen wir uns nun an, wie Sie das WordPress-Backend mit React verbinden.
Erste Schritte mit React
React ist eine deklarative Frontend-Bibliothek zum Erstellen von Benutzeroberflächen und interaktiven Anwendungen im Web. Mit React können Sie kleinere unabhängige Teile von wiederverwendbarem Code erstellen, die als Komponenten bezeichnet werden. Lassen Sie uns unsere erste Komponente erstellen, indem wir ein React-Projekt erstellen.
Die beliebteste Methode zum Erstellen eines React-Projekts ist das Ausführen von create-react-app. CRA bietet eine komfortable Umgebung zum Erlernen von React und ist der beste Weg, um mit dem Erstellen einer neuen Single-Page-Anwendung zu beginnen, wenn Sie ein Anfänger sind. Es richtet Ihre Entwicklungsumgebung so ein, dass Sie die neuesten JavaScript-Funktionen wie ES6 und Webpack verwenden können. Darüber hinaus bietet create-react-app eine angenehme Entwicklererfahrung und optimiert Ihre App für die Produktion.

Sie müssen Node >= 8.x und npm >= 5.2 auf Ihrem Computer haben. Führen Sie die folgenden Befehle aus, um ein Projekt zu erstellen:
npx create-react-app wp-react-demo
Der obige Befehl erstellt eine Boilerplate-Vorlage für unsere React-Anwendung, die wir wp-react-demo genannt haben .
cd wp-react-demo
npm start
Wenn alles gut geht, sollte es die neu erstellte Anwendung auf einem Entwicklungsserver unter http://localhost:3000/ bereitstellen können.
Wenn Sie neugierig sind auf die von create-react-app generierte Verzeichnisstruktur, sieht sie so aus:
.
├── README.md
├── package.json
├── public
│ ├── favicon.ico
│ ├── index.html
│ └── manifest.json
├── src
│ ├── App.css
│ ├── App.js
│ ├── App.test.js
│ ├── index.css
│ ├── index.js
│ ├── logo.svg
│ └── registerServiceWorker.js
└── yarn.lock
Das öffentliche Verzeichnis enthält alle zum Starten der Anwendung erforderlichen Assets. Das src-Verzeichnis enthält alle JavaScript-Dateien, an denen wir arbeiten werden, und Sie werden dort viel Zeit verbringen.
Wenn Sie localhost:3000 besuchen, wird die Datei index.html geladen. Wenn Sie die Datei public/index.html öffnen, gibt es dort nicht viel. Aber Sie finden diese Zeile irgendwo in der Mitte:
<div id="root"></div>
Das ist der Ausgangspunkt, an dem React den Komponentenbaum in das Stammverzeichnis der Anwendung rendert.

Was bedeutet das? Gehen Sie zum src-Verzeichnis und öffnen Sie index.js .
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render(<App />, document.getElementById('root'));
React versucht ein Element mit der ID „root“ im Dokument zu finden und fügt dann das
import React, { Component } from 'react';
import logo from './logo.svg';
import './App.css';
class App extends Component {
render() {
return (
<div className="App">
<header className="App-header">
<img src={logo} className="App-logo" alt="logo" />
<h1 className="App-title">Welcome to React</h1>
</header>
<p className="App-intro">
To get started, edit <code>src/App.js</code> and save to reload.
</p>
</div>
);
}
}
export default App;
So sieht eine Komponente grundsätzlich aus. Jede Komponente rendert einen Teil Ihrer Benutzeroberfläche. Sie können eine Komponente in einer anderen zusammensetzen und erhalten so eine Komponentenbaumstruktur wie diese:

Wenn Sie sich fragen, warum wir HTML in render() verwenden können, das ist die Magie von JSX. JSX ist eine Syntaxerweiterung für JavaScript und ermöglicht die Verwendung von reinem HTML in einer JavaScript-Datei. Sie können mehr darüber in den offiziellen Dokumenten lesen.
Ich lösche den gesamten HTML-Inhalt und ersetze ihn dann durch a
<div> <h2> WordPress Blog </h2> </div>
Reagieren Sie Komponenten und Zustand
Komponenten sind die Bausteine in React. Jede Komponente kann
- eine Eingabe (oder mehrere Eingaben), die allgemein als Requisiten bekannt sind.
- ein Zustand, der für die Komponente lokal ist
- Methoden, die entweder etwas rendern (zum Beispiel: render()) oder eine Geschäftslogik behandeln
Wir bauen eine Komponente, die alle verfügbaren Beiträge abruft und sie dem Benutzer anzeigt. Dazu schreiben wir zunächst einen Konstruktor für die Klasse und initialisieren den Zustand im Konstruktor:
constructor (props){
super(props);
this.state = {
title: {},
date: "",
content: {}
};
}
Der Zustand ist ein JSON-Objekt. Wir haben die Eigenschaften title, date und content innerhalb des Konstruktors deklariert. Der Titel und der Inhalt sind Objekte, während das Datum ein Array ist.
Abrufen der Daten und Aktualisieren des Status
Wenn die Komponente nun bereitgestellt wird, muss sie die Beitragsdaten von der API abrufen und im Status speichern. Die Beitragsdaten sind unter der folgenden URL verfügbar:
http://localhost/wp-json/wp/v2/posts/
Also, wo setzen wir diese Logik ein? Der Konstruktor klingt vielleicht nach einer guten Wahl, da er beim Erstellen der Komponente aufgerufen wird, aber er ist nicht die beste Wahl. Stattdessen verwenden wir etwas, das als Lebenszyklusmethode bekannt ist. Die Lebenszyklusmethode componentDidMount() wird aufgerufen, nachdem die Komponente gemountet wurde.
componentDidMount() {
return fetch(`http://wordpress.com/wp-json/wp/v2/posts/`)
.then((response) => response.json())
.then((responseJson) => {
// Update state here
})
.catch((error) => {
console.error(error);
});
}
Wir verwenden fetch, den De-facto-Standard in JavaScript für API-Aufrufe. Der Parameter für fetch() ist die URL, die wir abrufen möchten. Fetch gibt ein Promise zurück, das wir durch eine Kette von .then()s auswerten können. Der erste then-Block konvertiert die Antwort in das Json-Format, damit wir sie in den Zustand versetzen können.
const { title, date, content } = responseJson;
this.setState({ title, date, content });
Also, was passiert hier? Zuerst extrahieren wir die Felder title, date und content aus dem responseJson-Objekt. Die seltsame Syntax, die Sie hier sehen, wird als destrukturierende Zuweisungssyntax bezeichnet. Wie Sie vielleicht bereits wissen, gibt die WP-API viele Informationen zurück, die wir nicht benötigen. Die destrukturierende Zuweisungssyntax ermöglicht es, Werte aus dem Objekt in eindeutige Variablen zu entpacken.
Als Nächstes verwenden wir this.setState(), um den Zustand der Komponente zu aktualisieren. Die Methode setState() akzeptiert ein Objekt als Parameter, das der aktualisierte Zustand sein wird.
Rendering unseres WordPress-Beitrags
Die render-Methode gibt JSX zurück, das wir zuvor besprochen haben. Im Gegensatz zu reinem HTML können Sie Ausdrücke in JSX einbetten. Wenn Sie beispielsweise den Titel des abgerufenen Beitrags rendern müssen und nichts anderes, können Sie Folgendes tun:
render() {
return (
<div>
{this.state.title.rendered}
</div>
);
}
}
Versuch es!
Ebenso können Sie das Datum rendern, indem Sie {this.state.date} einbetten . Der im Zustand gespeicherte Inhalt besteht jedoch aus echtem HTML. Da der HTML-Code vom Server zurückgegeben wird, kann davon ausgegangen werden, dass beim Rendern keine Gefahr besteht. Um den Inhalt zu rendern, müssen Sie also das Attribut gefährlichSetInnerHTML wie folgt setzen:
<div
className= "content"
dangerouslySetInnerHTML={{ __html: this.state.content.rendered }}>
</div>
Hier ist die Methode render() in Aktion.
render() {
return (
<div>
<div>
<div className="row">
<div className="leftcolumn">
<div className="card">
<div className= "title">
<h1>{this.state.title.rendered}</h1>
<p> {this.state.date} </p>
</div>
<div
className= "content"
dangerouslySetInnerHTML={{ __html: this.state.content.rendered }} />
</div>
</div>
</div>
</div>
</div>
);
}
}
Ich habe einige zusätzliche Tags und Klassen für das Styling hinzugefügt. Sie können alle Ihre Stile in eine Datei im src-Verzeichnis schreiben und in Ihre App.js importieren. Sie finden die Stile für dieses Projekt unter src/App.css . Vergessen Sie nicht, eine Importanweisung hinzuzufügen, sonst funktionieren die Stile nicht.
import './App.css';
Das ist es. Sie haben mit React ein grundlegendes Frontend für Ihr WordPress API-Backend erstellt. So sollte der standardmäßige Hello World-Beitrag in unserer Anwendung aussehen:

Zusammenfassung
Puh! Das ist eine Menge Boden an einem einzigen Tag. Wir haben mit der WordPress Rest API angefangen und uns dann mit den API-Endpunkten vertraut gemacht. Wir haben dann angefangen, eine React-Anwendung von Grund auf zu erstellen, die im Grunde einen WordPress-Beitrag anzeigt.
Die Verwendung von React mit WordPress ist genauso wie die Verwendung von React mit jeder anderen Backend-API. Mit WordPress ist es einfacher, Daten zu finden und Sie wissen genau, wo Sie suchen müssen. Wenn Sie gerade erst angefangen haben, React zu erkunden, würde ich React docs als guten Ausgangspunkt empfehlen. Wenn Sie Fragen haben, können Sie diese gerne in den Kommentaren stellen.
