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:
- Conocimientos básicos de Node.js.
- Node.js y npm instalados en tu ordenador.
- WordPress y la extensión Thunder Client VS Code instalados.
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.
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:
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
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:
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.
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
Deja una respuesta