Als Webentwickler/in bist du wahrscheinlich mit Node.js und WordPress vertraut. Node.js ist eine leistungsstarke Laufzeitumgebung, die JavaScript außerhalb des Browsers ausführt, und WordPress ist das führende Content Management System (CMS).

Auf den ersten Blick scheinen Welten zwischen diesen beiden Plattformen zu liegen – Node.js mit seinem JavaScript-Backbone und WordPress, ein PHP-gestütztes CMS. Dank der WordPress REST API können sie jedoch zusammenarbeiten. Diese API ermöglicht es Node.js-Anwendungen, über HTTP-Anfragen mit WordPress zu interagieren. Sie ermöglicht den Zugriff auf verschiedene Daten wie Benutzer, Kommentare, Seiten, Beiträge und andere Elemente der Website.

Aber welche Vorteile hat die Kombination von Node.js und WordPress?

Stell dir vor, du hast eine WordPress-Website und möchtest ein eigenes Dashboard erstellen. Dieses Dashboard könnte Echtzeitdaten von deiner Website anzeigen, z. B. die letzten Beiträge, die Anzahl der Kommentare und die Nutzeraktivitäten.

Hier spielt Node.js eine entscheidende Rolle. Dieser Leitfaden zeigt dir, wie du Node.js-Endpunkte einrichtest. Diese Endpunkte nutzen die WordPress REST API für verschiedene Aufgaben: Aktualisieren von Beiträgen, Moderieren von Kommentaren, Anpassen der Seite und maßgeschneiderte WordPress-Seitenverwaltung.

Voraussetzungen

Um diesem Leitfaden folgen zu können, setzen wir voraus, dass du Folgendes hast

WordPress-Beiträge mit Node.js verwalten

Zu den grundlegenden Aufgaben in WordPress gehören das Erstellen, Aktualisieren und Löschen von Beiträgen. In diesem Abschnitt wird erklärt, wie du spezielle Endpunkte für diese Aktionen erstellst und wie du für jeden Vorgang Anfragen an den Endpunkt /posts stellst.

Einen neuen Beitrag in WordPress erstellen

Um einen neuen Beitrag in WordPress mit der REST-API zu erstellen, stellst du eine POST-Anfrage an den Endpunkt /posts. Im Text der Anfrage musst du den Inhalt deines WordPress-Beitrags im JSON-Format angeben.

Öffne zunächst deine Node.js-Serverdatei, die normalerweise App.js heißt. Vergewissere dich, dass Express in deiner Serverdatei richtig eingerichtet ist. Dies geschieht normalerweise mit der Zeile const app = express(), die Express initialisiert.

Als nächstes implementierst du eine Route in deiner Serverdatei, um einen neuen Beitrag hinzuzufügen. Der Code für diese Route sieht wie folgt aus:

app.post("/add-post", async (req, res) => {
   try {
    const postID = req.body.id
    const resp = await axios.post(`https://yourdomain.com/wp-json/wp/v2/posts/${postID}`, req.body)
	
    if(resp.status !== 200) throw "Something went wrong"
       
  } catch (err) {        
    console.log(err)        
  }
})

Dieser Code erstellt einen Endpunkt /add-post in deiner Anwendung. Wenn eine Anfrage an diesen Endpunkt gesendet wird, extrahiert er die Post-ID aus dem Anfragetext und sendet eine POST-Anfrage an deine WordPress-Website. Vergiss nicht, https://yourdomain.com durch deine WordPress-Domain zu ersetzen.

Du kannst dies mit Tools wie Thunder Client in Visual Studio Code testen. Achte darauf, dass der JSON-Body deiner Anfrage gültig ist, um Fehler zu vermeiden.

JSON-Body einer POST-Anfrage an den /add-post Endpunkt
JSON-Body einer POST-Anfrage an den /add-post Endpunkt

Dieser Ansatz ermöglicht ein effizientes und automatisiertes Einstellen von Beiträgen auf deiner WordPress-Seite aus deiner Anwendung heraus.

Einen bestehenden Beitrag in WordPress aktualisieren

Um einen Beitrag mit der WordPress-API zu aktualisieren, stellst du eine PUT-Anfrage an den Endpunkt /posts in deiner WordPress-API. Du musst auch den aktualisierten Inhalt deines WordPress-Beitrags im JSON-Format bereitstellen.

Der Weg zum Aktualisieren eines bestehenden Beitrags in WordPress ist wie folgt:

app.put("/update-post", async (req, res) => {
  try {
    const postID = req.body.id                    
      
    const resp = await axios.put(`https://yourdomain.com/wp-json/wp/v2/posts/${postID}`, req.body)
	
    if(resp.status !== 200) throw "Something went wrong"
       
  } catch (err) {        
    console.log(err)        
  }
})

Zum Beispiel kannst du einen Beitrag mit der ID 3 in WordPress mit der folgenden Anfrage im Thunder Client aktualisieren:

JSON-Body einer PUT-Anfrage an den Endpunkt /update-post
JSON-Body einer PUT-Anfrage an den Endpunkt /update-post

Löschen eines Beitrags in WordPress

Um einen Beitrag in WordPress zu löschen, stellst du eine DELETE-Anfrage an den Endpunkt /posts mit der eindeutigen ID des Beitrags, den du löschen möchtest.

app.delete("/delete-post", async (req, res) => {
  try {
    const postID = req.body.id                
        
    const resp = await axios.delete(`https://yourdomain.com/wp-json/wp/v2/posts/${postID}`)
	
    if(resp.status !== 200) throw "Something went wrong"
       
  } catch (err) {        
    console.log(err)        
    }
})

Das Ergebnis sollte wie folgt aussehen:

JSON-Body einer DELETE-Anfrage an den Endpunkt /delete-post
JSON-Body einer DELETE-Anfrage an den Endpunkt /delete-post

WordPress-Kommentare mit Node.js moderieren

Die Comments API ermöglicht es dir, von einer Anwendung aus auf die Kommentare auf deiner WordPress-Website zuzugreifen und sie zu bearbeiten. Innerhalb dieser API gibt es einen Endpunkt zum Erstellen, Auflisten, Lesen, Aktualisieren und Löschen von Kommentaren auf einer WordPress-Website.

Nehmen wir an, du möchtest nicht, dass deine WordPress-Seite Kommentare mit dem Satz „Folge mir“ veröffentlicht. In diesem Beispiel kannst du einen regex Ausdruck verwenden, um jeden Kommentar auf diese Phrase zu überprüfen, bevor du ihn veröffentlichst.

Verwende dazu den folgenden Code:

app.post("/add-comment", async (req, res) => {
  try {
    let regex = /follow me/i;    
    let comment = req.body.comment                
      
    if(regex.test(comment)) throw "Oops! Contains the forbidden word"  		

    const resp = await axios.post(`https://yourdomain/wp-json/wp/v2/comments`, req.body)
	
  if(resp.status !== 200) throw "Something went wrong"  		
	
  } catch (err) {      
  
  console.log(err)
        
    }
})

Auf diese Weise werden nur die Kommentare auf der Website veröffentlicht, die nicht die Phrase „Folge mir“ enthalten, während Kommentare wie der untenstehende nicht veröffentlicht werden:

JSON-Body einer POST-Anfrage an den Endpunkt /add-comment, der Kommentare mit "Follow me" ausschließt
JSON-Body einer POST-Anfrage an den Endpunkt /add-comment, der Kommentare mit „Follow me“ ausschließt

Seiten für Nutzer anpassen

Indem du die Präferenzen der Nutzer/innen speicherst und ihr Land bestimmst, kannst du deine WordPress-Seiten für jede/n Nutzer/in individuell anpassen.

In Node.js kannst du Nutzerdaten in Cookies von der Anmelde- oder Registrierungsroute deiner Backend-Anwendung speichern und das Cookie in ihrem Webbrowser ablegen, etwa so:

app.post("/sign-up", async (req, res) => {
  // Sign up user
    res.cookie("cookie_id", 123456)
    res.cookie("lang", req.body.language)
	
    res.status(200).json("Logged in.")
})

Bei der Anmeldung ermittelst du die bevorzugte Sprache des Nutzers und sendest sie als Cookie zusammen mit der cookie_id an den Browser.

Mit der im Browser gespeicherten Sprache kannst du nun die WordPress-Beiträge in der Sprache des Nutzers abrufen. Dazu musst du deine Beiträge zunächst in WordPress übersetzen. Das kannst du ganz einfach tun, indem du WPML und Yoast SEO in deine WordPress-Seite integrierst.

Sobald sie integriert sind, werden verschiedene Unterordner für andere Sprachen erstellt:

  • mydomain.com/de/
  • mydomain.com/es/
  • mydomain.com/fr/

Wenn du WordPress-Beiträge abrufst, kannst du die Liste der Beiträge in der bevorzugten Sprache des Nutzers abrufen, da diese in den Cookies gespeichert ist.

app.get("/get-posts", async (req, res) => {
  try { 
    const lang = req.cookies.lang
       
    const resp = await axios.get(`https://mydomain.com/${lang}/wp-json/wp/v1/posts`)
	
  if(resp.status !== 200) throw "Something went wrong"
       
  } catch (err) {        
    console.log(err)        
    }
})

Auf diese Weise erhältst du die Liste der Beiträge in der Sprache, die der Nutzer bei der Anmeldung angegeben hat.

Benutzerdefinierte Verwaltung verwenden

Durch die Erweiterung des Benutzerendpunkts kannst du ein benutzerdefiniertes Administrationspanel erstellen, um WordPress-Benutzer, -Rollen und -Berechtigungen zu steuern. Mit der Benutzer-API kannst du von einer Anwendung aus, die wie die Kommentar-API funktioniert, auf Benutzerinformationen auf deiner WordPress-Website zugreifen und diese bearbeiten.

Wenn du zum Beispiel die Rolle eines Benutzers auf „Administrator“ ändern möchtest, kannst du folgenden Weg gehen:

app.put("/update-user", async (req, res) => {
  try {
    const userID = req.body.id                
	
    const resp = await axios.put(`https://yourdomain/wp-json/wp/v2/users/${userID}`, req.body)
	
    if(resp.status !== 200) throw "Something went wrong"
       
  } catch (err) {        
    console.log(err)        
   }
})

In der Anfrage übergibst du ein Objekt mit der ID des Benutzers, dessen Datensatz du aktualisieren möchtest, sowie die neuen Details.

JSON-Body einer PUT-Anfrage an den Endpunkt /update-user
JSON-Body einer PUT-Anfrage an den Endpunkt /update-user

Wenn du mit der Entwicklung deines Node.js-Servers fertig bist. Du kannst ihn ganz einfach auf Kinstas Anwendungs-Hosting hosten.

Zusammenfassung

Die Integration von Node.js in deine WordPress-Website eröffnet dir das Potenzial für mehr Funktionalität. Du kannst Beiträge aktualisieren, Kommentare moderieren, Benutzerrollen festlegen und Anpassungen je nach Land deiner Benutzer vornehmen.

Neben den bereits erwähnten Funktionen kannst du auch eine erweiterte Suche, die Bearbeitung von Themen und die Überarbeitung von Beiträgen einrichten. Zögere nicht, dir das REST-API-Handbuch anzusehen und mit der Erkundung zu beginnen.

Was hältst du von der WordPress REST API? Hast du sie schon für einige deiner Projekte genutzt? Sag es uns im Kommentarbereich unten!

Jeremy Holcombe Kinsta

Content & Marketing Editor bei Kinsta, WordPress Web Developer und Content Writer. Außerhalb von WordPress genieße ich den Strand, Golf und Filme. Außerdem habe ich Probleme mit großen Menschen ;).