In qualità di sviluppatori web, probabilmente conoscete Node.js e WordPress. Node.js è un potente ambiente di runtime che esegue JavaScript al di fuori del browser e WordPress è il principale sistema di gestione dei contenuti (CMS).

Queste piattaforme potrebbero sembrare distanti tra loro: Node.js, con la sua struttura portante in JavaScript, e WordPress, un CMS alimentato da PHP. Tuttavia, possono lavorare in tandem grazie alla REST API di WordPress. Questa API consente alle applicazioni Node.js di interagire con WordPress tramite richieste HTTP. Fornisce l’accesso a vari dati, tra cui utenti, commenti, pagine, post e altri elementi del sito.

Ma qual è il vantaggio di combinare Node.js e WordPress?

Immaginate di avere un sito WordPress e di voler creare una dashboard personalizzata. Questa dashboard potrebbe visualizzare i dati del sito in tempo reale, come i post recenti, il numero di commenti e l’attività degli utenti.

È qui che Node.js gioca un ruolo fondamentale. Questa guida vi spiega come configurare gli endpoint Node.js. Questi endpoint sfruttano l’API REST di WordPress per varie attività: aggiornamento dei post, moderazione dei commenti, personalizzazione del sito e amministrazione personalizzata del sito WordPress.

Prerequisiti

Per seguire questa guida, è necessario avere:

Gestire i post di WordPress con Node.js

In WordPress, le attività fondamentali sono la creazione, l’aggiornamento e la cancellazione dei post. Questa sezione spiega come creare endpoint specifici per queste azioni e come effettuare richieste all’endpoint /posts per ogni operazione.

Creare un nuovo post in WordPress

Per creare un nuovo post in WordPress con l’API REST, effettuate una richiesta POST all’endpoint /posts. Nel corpo della richiesta, dovrete fornire il contenuto del post di WordPress in formato JSON.

Per prima cosa, aprite il file del server Node.js, solitamente chiamato App.js. Assicuratevi che Express sia impostato correttamente nel file del server. In genere questo avviene con la riga const app = express(), che inizializza Express.

Successivamente, implementate una route nel file server per aggiungere un nuovo post. Il codice di questa route sarà qualcosa di simile:

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

Questo codice crea un endpoint /add-post nell’applicazione. Quando una richiesta viene inviata a questo endpoint, estrae l’ID del post dal corpo della richiesta e invia una richiesta POST al sito WordPress. Ricordate di sostituire https://yourdomain.com con il vostro dominio WordPress.

Potete testare questo metodo utilizzando strumenti come Thunder Client in Visual Studio Code. Assicuratevi che il corpo JSON della richiesta sia valido per evitare errori.

Corpo JSON di una richiesta POST all'endpoint /add-post
Corpo JSON di una richiesta POST all’endpoint /add-post.

Questo approccio consente di pubblicare in modo efficiente e automatico i post sul sito WordPress dall’applicazione.

Aggiornare un post esistente in WordPress

Per aggiornare un post con l’API di WordPress, fate una richiesta PUT all’endpoint /posts dell’API di WordPress. Dovete anche fornire il contenuto aggiornato del post di WordPress in formato JSON.

Il percorso per aggiornare un post esistente in WordPress è il seguente:

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

Ad esempio, potete aggiornare un post con un ID di 3 in WordPress con la seguente richiesta in Thunder Client:

JSON body of a PUT request to /update-post endpoint
Corpo JSON di una richiesta PUT all’endpoint /update-post.

Eliminare un post in WordPress

Per eliminare un post in WordPress, effettuate una richiesta DELETE all’endpoint /posts utilizzando l’ID univoco del post che volete eliminare.

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

Il risultato dovrebbe essere simile a questo:

Corpo JSON di una richiesta DELETE all'endpoint /delete-post
Corpo JSON di una richiesta DELETE all’endpoint /delete-post.

Moderare i commenti di WordPress con Node.js

L’API dei commenti permette di accedere e manipolare i commenti sul sito WordPress da un’applicazione. All’interno di questa API c’è un endpoint per creare, elencare, leggere, aggiornare e cancellare i commenti su un sito WordPress.

Supponiamo che non vogliate che il sito WordPress pubblichi commenti con la frase “Follow me”. In questo esempio, potete utilizzare un’espressione di regex per verificare la presenza di questa frase in ogni commento prima di pubblicarlo.

Per farlo, utilizzate il seguente codice:

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

Con questo percorso, solo i commenti che non includono la frase “Follow me” vengono pubblicati sul sito web, mentre i commenti come quello qui sotto non vengono pubblicati:

JSON body of a POST request to /add-comment endpoint
Corpo JSON di una richiesta POST all’endpoint /add-comment che esclude i commenti che contengono “Follow me”.

Personalizzazione dei siti per gli utenti

Memorizzando le preferenze degli utenti e determinando il loro paese, potete personalizzare le pagine di WordPress per ogni utente.

In Node.js, potete memorizzare i dati dell’utente nei cookie del percorso di login o di iscrizione dell’applicazione backend e inserire il cookie nel suo browser web, in questo modo:

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

Al momento dell’iscrizione, ottienete la lingua preferita dall’utente e la inviate al browser sotto forma di cookie insieme al sito cookie_id.

Ora, con la lingua memorizzata nel browser, potete usarla per recuperare i post di WordPress nella lingua dell’utente. Per fare ciò, dovrete prima tradurre i post in WordPress. Un modo semplice per farlo è integrare WPML e Yoast SEO nel vostro sito WordPress.

Una volta integrati, vengono create diverse sottocartelle per le altre lingue:

  • mydomain.com/en/
  • mydomain.com/es/
  • mydomain.com/fr/

Quando si recuperano i post di WordPress, è possibile ottenere l’elenco dei post nella lingua preferita dall’utente, poiché è memorizzata nei cookie.

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

In questo modo otterrete l’elenco dei post in base alla lingua specificata dall’utente durante la registrazione.

Usare l’amministrazione personalizzata

Estendendo l’endpoint dell’utente, potete creare un pannello di amministrazione personalizzato per controllare gli utenti, i ruoli e i permessi di WordPress. L’API Utenti permette di accedere e manipolare le informazioni sugli utenti del sito WordPress da un’applicazione che funziona come l’API Commenti.

Ad esempio, se volete aggiornare il ruolo di un utente a “Amministratore”, ecco il percorso che potete utilizzare:

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

Nella richiesta, passate un oggetto contenente l’ID dell’utente di cui volete aggiornare il record e i nuovi dettagli.

Corpo JSON di una richiesta PUT all'endpoint /update-user
Corpo JSON di una richiesta PUT all’endpoint /update-user.

Una volta finito di sviluppare il server Node.js. potete sempre ospitarlo con facilità sull’Hosting di Applicazioni di Kinsta.

Riepilogo

L’integrazione di Node.js con un sito WordPress apre le porte a una maggiore funzionalità. Potete aggiornare i post, moderare i commenti, impostare i ruoli degli utenti e aggiungere personalizzazioni in base al paese dell’utente.

Oltre alle funzioni già descritte, potete aggiungere la ricerca avanzata, la manipolazione dei temi e la revisione dei post. Non esitate a consultare il Manuale delle API REST e iniziare a fare le vostre prove.

Cosa ne pensate dell’API REST di WordPress? L’avete utilizzata per alcuni dei vostri progetti? Raccontatecelo nella sezione commenti qui sotto!

Jeremy Holcombe Kinsta

Content & Marketing Editor presso Kinsta, web developer di WordPress e content writer. Al di fuori di tutto ciò che riguarda WordPress, mi piacciono la spiaggia, il golf e il cinema. Ho anche i problemi di tutte le persone più alte della media ;).