Als webontwikkelaar ben je waarschijnlijk bekend met Node.js en WordPress. Node.js is een krachtige runtime-omgeving die JavaScript buiten de browser uitvoert en WordPress is het toonaangevende contentmanagementsysteem (CMS).

Deze platformen lijken misschien werelden van verschil – Node.js, met zijn JavaScript backbone, en WordPress, een door PHP aangedreven CMS. Toch kunnen ze samenwerken, dankzij de WordPress REST API. Met deze API kunnen Node.js applicaties communiceren met WordPress via HTTP verzoeken. Het biedt toegang tot verschillende gegevens, waaronder gebruikers, reacties, pagina’s, berichten en andere site-elementen.

Maar wat is het voordeel van het combineren van Node.js en WordPress?

Stel je voor dat je een WordPress site hebt en een aangepast dashboard wilt bouwen. Dit dashboard zou realtime gegevens van je site kunnen weergeven, zoals recente berichten, het aantal reacties en gebruikersactiviteiten.

Hier speelt Node.js een centrale rol. Deze handleiding helpt je bij het opzetten van Node.js endpoints. Deze endpoints maken gebruik van de WordPress REST API voor verschillende taken: het bijwerken van berichten, het modereren van reacties, het aanpassen van de site en custom WordPress sitebeheer.

Vereisten

Om deze handleiding te kunnen volgen, gaan we ervan uit dat je beschikt over:

WordPress berichten beheren met Node.js

In WordPress bestaan de basistaken uit het maken, bijwerken en verwijderen van berichten. Dit gedeelte legt uit hoe je specifieke endpoints aanmaakt voor deze acties, samen met hoe je verzoeken indient bij het /posts endpoint voor elke bewerking.

Een nieuw bericht maken in WordPress

Om een nieuw bericht aan te maken in WordPress met de REST API, doe je een POST verzoek naar het /posts endpoint. In de inhoud van het verzoek moet je de inhoud van je WordPress bericht in JSON format opgeven.

Open eerst je Node.js server bestand, meestal App.js genaamd. Zorg ervoor dat Express correct is ingesteld in je serverbestand. Dit wordt meestal gedaan met de regel const app = express(), die Express initialiseert.

Implementeer vervolgens een route in je serverbestand om een nieuw bericht toe te voegen. De code voor deze route ziet er als volgt uit:

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)        
  }
})

Deze code maakt een endpoint /add-post in je applicatie. Wanneer er een verzoek naar dit endpoint wordt gestuurd, wordt de bericht-ID uit de verzoektekst gehaald en wordt er een POST verzoek naar je WordPress site gestuurd. Vergeet niet om https://yourdomain.com te vervangen door je WordPress domein.

Je kunt dit testen met tools zoals Thunder Client in Visual Studio Code. Zorg ervoor dat de JSON body van je verzoek geldig is om fouten te voorkomen.

JSON body van een POST verzoek naar /add-post endpoint
JSON body van een POST verzoek naar /add-post endpoint.

Met deze aanpak kun je efficiënt en automatisch berichten plaatsen op je WordPress site vanuit je applicatie.

Een bestaand bericht bijwerken in WordPress

Om een bericht bij te werken met de WordPress API, doe je een PUT verzoek naar het /posts endpoint in je WordPress API. Je moet ook de bijgewerkte inhoud van je WordPress bericht in JSON format aanleveren.

De route voor het bijwerken van een bestaand bericht in WordPress is als volgt:

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)        
  }
})

Je kunt bijvoorbeeld een bericht met een ID van 3 in WordPress bijwerken met het volgende verzoek in Thunder Client:

JSON body van een PUT request naar /update-post endpoint
JSON body van een PUT request naar /update-post endpoint.

Een bericht verwijderen in WordPress

Om een bericht te verwijderen in WordPress, doe je een DELETE verzoek naar het /posts endpoint met de unieke ID van het bericht dat je wilt verwijderen.

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)        
    }
})

Het resultaat zou er als volgt uit moeten zien:

JSON body van een DELETE request naar /delete-post endpoint
JSON body van een DELETE request naar /delete-post endpoint.

WordPress reacties modereren met Node.js

Met de Comments API kun je reacties op je WordPress site openen en manipuleren vanuit een applicatie. Binnen die API is een endpoint voor het maken, weergeven, lezen, bijwerken en verwijderen van reacties op een WordPress site.

Laten we aannemen dat je niet wilt dat je WordPress site reacties publiceert met de zin “Follow me”. In dit voorbeeld kun je een regex expressie gebruiken om elk commentaar op die zin te controleren voordat je het plaatst.

Gebruik hiervoor de volgende 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)
        
    }
})

Met deze route worden alleen opmerkingen die niet de zin “Volg mij” bevatten gepubliceerd op de website, terwijl opmerkingen zoals de onderstaande niet worden geplaatst:

JSON body van een POST request naar /add-comment endpoint met uitsluiting van comments met
JSON body van een POST request naar /add-comment endpoint met uitsluiting van comments met “Follow me”.

Sites aanpassen voor gebruikers

Door gebruikersvoorkeuren op te slaan en hun land te bepalen, kun je je WordPress pagina’s aanpassen voor elke gebruiker.

In Node.js kun je gebruikersgegevens opslaan in cookies van de aanmeld- of aanmeldroute van je backend applicatie en de cookie in hun webbrowser plaatsen, zoals dit:

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.")
})

Bij het aanmelden krijg je de voorkeurstaal van de gebruiker en stuur je die samen met de cookie_id als cookie naar de browser.

Nu de taal is opgeslagen in de browser, kun je deze gebruiken om WordPress berichten op te halen in de taal van de gebruiker. Hiervoor moet je eerst je berichten in WordPress vertalen. Een eenvoudige manier om dit te doen is door WPML en Yoast SEO te integreren in je WordPress site.

Eenmaal geïntegreerd worden er verschillende submappen aangemaakt voor andere talen:

  • mydomain.com/nl/
  • mydomain.nl/es/
  • mydomain.com/fr/

Wanneer je WordPress berichten ophaalt, kun je de lijst met berichten krijgen in de voorkeurstaal van de gebruiker, omdat deze is opgeslagen in de cookies.

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)        
    }
})

Door dit te doen, krijg je de lijst met berichten gebaseerd op de taal die de gebruiker heeft opgegeven tijdens het aanmelden.

Custom beheer gebruiken

Door het endpoint user uit te breiden, kun je een custom administratiepaneel bouwen om WordPress gebruikers, rollen en rechten te beheren. Met de Users API kun je gebruikersinformatie op je WordPress site benaderen en manipuleren vanuit een toepassing die functioneert als de Comment API.

Als je bijvoorbeeld de rol van een gebruiker wilt bijwerken naar “Administrator”, dan is dit de route die je kunt gebruiken:

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)        
   }
})

Geef in het verzoek een object door dat de ID bevat van de gebruiker wiens record je wilt bijwerken, evenals de nieuwe gegevens.

JSON lichaam van een PUT verzoek naar /update-user endpoint
JSON lichaam van een PUT verzoek naar /update-user endpoint.

Als je klaar bent met het ontwikkelen van je Node.js server. Je kunt hem altijd gemakkelijk hosten op Kinsta’s Applicatie Hosting.

Samenvatting

Het integreren van Node.js met je WordPress site opent het potentieel voor meer functionaliteit. Je kunt berichten bijwerken, reacties modereren, gebruikersrollen instellen en aanpassingen maken op basis van het land van je gebruiker.

Naast de functies die we al hebben behandeld, kun je geavanceerd zoeken, themamanipulatie en berichtrevisies toevoegen. Aarzel niet om de REST API Reference te bekijken en op onderzoek uit te gaan.

Wat vind jij van de WordPress REST API? Heb je het gebruikt voor sommige van je projecten? Vertel het ons in de commentsectie hieronder!

Jeremy Holcombe Kinsta

Content & Marketing Editor bij Kinsta, WordPress Web Developer en Content Writer. Buiten alles wat met WordPress te maken heeft, geniet ik van het strand, golf en films. En verder heb ik last van alle problemen waar andere lange mensen ook tegenaan lopen ;).