Como desarrollador web, es probable que estés familiarizado con Node.js y WordPress. Node.js es un potente entorno de ejecución que ejecuta JavaScript fuera del navegador, y WordPress es el principal sistema de gestión de contenidos (CMS, content management system).

Estas plataformas pueden parecer mundos aparte — Node.js, con su columna vertebral de JavaScript, y WordPress, un CMS basado en PHP. Sin embargo, pueden trabajar en tándem, gracias a la API REST de WordPress. Esta API permite a las aplicaciones Node.js interactuar con WordPress mediante peticiones HTTP. Proporciona acceso a diversos datos, como usuarios, comentarios, páginas, entradas y otros elementos del sitio.

Pero, ¿cuál es la ventaja de combinar Node.js y WordPress?

Imagina que tienes un sitio de WordPress y quieres crear un panel de control personalizado. Este panel podría mostrar datos en tiempo real de tu sitio, como entradas recientes, recuento de comentarios y actividad de los usuarios.

Aquí es donde Node.js desempeña un papel fundamental. Esta guía te lleva a través del proceso de configuración de los endpoints de Node.js. Estos endpoints aprovechan la API REST de WordPress para diversas tareas: actualización de entradas, moderación de comentarios, personalización del sitio y administración personalizada del sitio de WordPress.

Requisitos Previos

Para seguir esta guía, asumimos que tienes:

Gestionar Entradas de WordPress con Node.js

En WordPress, las tareas fundamentales incluyen la creación, actualización y eliminación de entradas. Esta sección explica cómo crear endpoints específicos para estas acciones, además de cómo realizar peticiones al endpoint /posts para cada operación.

Crear una Nueva Entrada en WordPress

Para crear una nueva entrada en WordPress con la API REST, realiza una solicitud POST al endpoint /posts. En el cuerpo de la solicitud, tienes que proporcionar el contenido de tu entrada de WordPress en formato JSON.

Primero, abre el archivo de tu servidor Node.js, normalmente llamado App.js. Asegúrate de que Express está correctamente configurado en este archivo del servidor. Esto se hace normalmente con la línea const app = express(), que inicializa Express.

A continuación, implementa una ruta en tu archivo de servidor para añadir una nueva entrada. El código de esta ruta es el siguiente

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

Este código crea un endpoint /add-post en tu aplicación. Cuando se envía una solicitud a este endpoint, extrae el ID de la entrada del cuerpo de la solicitud y envía una solicitud POST a tu sitio de WordPress. Recuerda sustituir https://yourdomain.com por tu dominio de WordPress.

Puedes probar esto utilizando herramientas como Thunder Client en Visual Studio Code. Asegúrate de que el cuerpo JSON de tu solicitud es válido para evitar errores.

Cuerpo JSON de una solicitud POST al endpoint /add-post.
Cuerpo JSON de una solicitud POST al endpoint /add-post.

Este enfoque permite una publicación eficiente y automatizada en tu sitio de WordPress desde tu aplicación.

Actualizar una Entrada Existente en WordPress

Para actualizar una entrada con la API de WordPress, realiza una solicitud PUT al endpoint /posts de tu API de WordPress. También tienes que proporcionar el contenido actualizado de tu entrada de WordPress en formato JSON.

La ruta para actualizar una entrada existente en WordPress es la siguiente:

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

Por ejemplo, puedes actualizar un post con un ID de 3 en WordPress con la siguiente petición en Thunder Client:

Cuerpo JSON de una petición PUT al endpoint /update-post.
Cuerpo JSON de una petición PUT al endpoint /update-post.

Borrar una Entrada en WordPress

Para eliminar una entrada en WordPress, realiza una petición DELETE al endpoint /posts utilizando el ID único de la entrada que quieres eliminar.

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

El resultado debería ser el siguiente

Cuerpo JSON de una solicitud DELETE al endpoint /delete-post.
Cuerpo JSON de una solicitud DELETE al endpoint /delete-post.

Moderar Comentarios de WordPress con Node.js

La API de Comentarios te permite acceder y manipular los comentarios de tu sitio de WordPress desde una aplicación. Dentro de esa API hay un endpoint para crear, listar, leer, actualizar y eliminar comentarios en un sitio de WordPress.

Supongamos que no quieres que tu sitio de WordPress publique comentarios con la frase «Sígueme» En este ejemplo, puedes utilizar una expresión regex para comprobar cada comentario en busca de esa frase antes de publicarlo.

Para ello, utiliza el siguiente código:

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 esta ruta, sólo se publican en el sitio web los comentarios que no incluyen la frase «Sígueme», mientras que los comentarios como el siguiente no se publican:

Cuerpo JSON de una petición POST al endpoint /add-comment
Cuerpo JSON de una petición POST al endpoint /add-comment excluyendo los comentarios con «Sígueme».

Personalización de los Sitios para los Usuarios

Al almacenar las preferencias de los usuarios y determinar su país, puedes personalizar tus páginas de WordPress para cada usuario.

En Node.js, puedes almacenar los datos del usuario en cookies de la ruta de inicio de sesión o registro de tu aplicación backend y colocar la cookie en su navegador web, de esta forma:

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 registrarse, obtienes el idioma preferido del usuario y lo envías al navegador en forma de cookies junto con la dirección cookie_id.

Ahora, con el idioma almacenado en el navegador, puedes utilizarlo para obtener las entradas de WordPress en el idioma del usuario. Esto requiere que primero traduzcas tus entradas en WordPress. Una forma fácil de hacerlo es integrando WPML y Yoast SEO en tu sitio de WordPress.

Una vez integrados, se crean diferentes subcarpetas para otros idiomas:

  • midominio.com/en/
  • midominio.com/es/
  • midominio.com/fr/

Al obtener las entradas de WordPress, puedes obtener la lista de entradas en el idioma preferido del usuario, ya que se almacena en las 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)        
    }
})

De este modo, obtienes la lista de entradas en función del idioma que el usuario especificó al registrarse.

Utilizar la Administración Personalizada

Ampliando el endpoint del usuario, puedes crear un panel de administración personalizado para controlar los usuarios, roles y permisos de WordPress. La API de Usuarios te permite acceder y manipular la información de los usuarios de tu sitio de WordPress desde una aplicación que funciona como la API de comentarios.

Por ejemplo, si quieres actualizar el rol de un usuario a «Administrador», ésta es la ruta que puedes utilizar:

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

En la solicitud, pasa un objeto que contenga el ID del usuario cuyo registro quieres actualizar, así como los nuevos datos.

Cuerpo JSON de una solicitud PUT al endpoint /update-user
Cuerpo JSON de una solicitud PUT al endpoint /update-user

Cuando hayas terminado de desarrollar tu servidor Node.js. Siempre puedes alojarlo fácilmente en el Alojamiento de Aplicaciones de Kinsta.

Resumen

Integrar Node.js con tu sitio de WordPress abre el potencial para una mayor funcionalidad. Puedes actualizar entradas, moderar comentarios, establecer roles de usuario y añadir personalización basada en el país de tu usuario.

Aparte de las funciones que ya hemos cubierto, puedes añadir búsquedas avanzadas, manipulación de temas y revisiones de entradas. No dudes en consultar el Handbook de la API REST y empezar a explorar.

¿Qué opinas de la API REST de WordPress? ¿La has utilizado en alguno de tus proyectos? Cuéntanoslo en la sección de comentarios más abajo

Jeremy Holcombe Kinsta

Editor de Contenidos y Marketing en Kinsta, Desarrollador Web de WordPress y Redactor de Contenidos. Aparte de todo lo relacionado con WordPress, me gusta la playa, el golf y el cine. También tengo problemas con la gente alta ;).