Como usar a API do WordPress e LearnDash em Node.js

Node.js

Como usar a API do WordPress e LearnDash em Node.js

Luiz Duarte
Escrito por Luiz Duarte em 16/10/2021
Junte-se a mais de 22 mil profissionais de TI

Entre para minha lista e receba conteúdos exclusivos e com prioridade

Todo mundo que trabalha com web já ouviu falar em WordPress alguma vez na vida, uma vez que ele é o maior, melhor e mais utilizado CMS que existe, quer você goste dele ou não. A própria popularidade do PHP se deve em muito a CMSs como o WP e muitos dos números que trazem a supremacia do PHP (e também do MySQL) no mundo web geralmente acabam desconsiderando este fato que muitos “sites em PHP” na verdade são instalações WordPress. Eu uso WordPress neste blog, mas não sei programar nada em PHP, mas entro para a contagem de sites em PHP, entende?

Mas não é disso que eu vim falar hoje, mas sim sobre como você pode usar a API REST do WordPress para automatizar tarefas ou realizar integrações, tudo isso usando Node.js.

Recentemente tive de fazer uma migração de centenas de alunos da minha antiga plataforma de cursos, Google Classroom, para a nova, LearnDash. A LD na verdade é um plugin para WordPress e é simplesmente o melhor que há quando o assunto é LMS (Learning Management System). Uma das coisas legais de se trabalhar com ele é que ele se beneficia muito do ecossistema do WordPress (aka plugins) e também da sua arquitetura, que inclui a API REST que é muito útil mas que eu nunca tinha usado até então.

No meu caso, eu precisava criar usuários para cada aluno no WordPress/LearnDash e depois associá-los ao curso que eles fazem. Cheguei a procurar plugins na Internet que fizessem isso em massa (eram centenas que eu precisava cadastrar) mas só encontrei soluções pagas (e caras). Então resolvi escrever meu próprio script e em menos de 1h tinha resolvido meu problema.

#1 – Chave de API

A primeira coisa que tem de ter em mente é que precisa de um usuário com as permissões para fazer as tarefas que deseja na API (no meu caso eu precisava cadastrar usuários). Se você for na tela de edição desse usuário, vai ver que tem uma opção Senhas da Aplicação e é aí que você dá um nome e gera uma chave de API.

Guarde bem esta chave de API pois, além de precisar dela para este tutorial, ela não pode ser recuperada depois (no máximo excluída/revogada). Também tome cuidado pois alguém com esta chave tem os mesmos poderes do que se tivesse a senha dessa conta de usuário.

Vale salientar também que o que vou ensinar aqui só funciona se você tiver com HTTP/SSL no seu site WordPress. Isso porque como vamos passar a chave de API em cada requisição, se essa comunicação não fosse feita usando esse protocolo sua chave poderia ser facilmente capturada na rede.

Livro Node.js

#2 – Setup do Projeto

A API do WordPress é REST, ou seja, qualquer linguagem/tecnologia que fale HTTP vai conseguir fazer chamadas, incluindo Node.js. Então crie uma pasta para o seu projeto e rode o comando abaixo para inicializá-lo como um projeto Node.js (imagino que já tenha o Node.js instalado na sua máquina).

Agora, vamos instalar algumas dependências que serão necessárias.

O Axios é de longe o HTTP client mais popular em JavaScript (mais até que a API nativa Fetch eu acho) e o DotEnv é o pacote mais popular também quando o assunto são variáveis de ambiente. Usaremos ambos no projeto.

Agora crie um arquivo .env na raiz da sua aplicação e dentro dele coloque as seguintes variáveis.

Repare que deixei algumas lacunas para você informar seu usuário, a chave de API dele (que você criou no passo 1, lembra?) e a URL da raiz do seu site WordPress, começando obrigatoriamente com HTTPS e terminando com wp-json, que é a pasta onde ficam as APIs do WordPress (e plugins) em PHP.

Quando a gente for subir nosso projeto, temos que garantir que ele carregue estas variáveis de ambiente, então vamos modificar nosso package.json para que tenha alguns scripts úteis para inicialização em prod (script start) e dev (script dev).

O arquivo index referenciado nos scripts de inicialização ainda não existe, então crie ele como index.js e coloque o código abaixo dentro só pra testar nosso setup rodando o comando npm start ou npm run dev, como preferir.

Se tudo deu certo, verá impresso suas variáveis de ambiente no console.

#3 – Usando a API do WordPress

Comece criando um novo arquivo no seu projeto chamado wordpress.js, onde vamos programar a integração com o dito cujo. Comece carregando o Axios, a URL base e criando o objeto de autenticação que usaremos no cabeçalho de todas requisições. A propósito, WordPress usa autenticação Basic (a que estou usando abaixo) ou via cookies, mas é possível através de plugins usar outros tipos de autenticação como OAuth ou JWT.

Com estas configurações iniciais, vamos criar nossa função que chamará a API do WordPress. Aqui vou usar como exemplo a API de usuários, cuja documentação completa você encontra aqui.

Nesta função, recebemos o objeto de usuário por parâmetro e mandamos ele no body da request POST para o endpoint /wp/v2/users, sem esquecer do objeto com os cabeçalhos HTTP.

Agora no index.js, vamos usar este módulo para criar um novo usuário, como abaixo.

É importante que, em cada tarefa que você for automatizar ou chamada que for fazer, que seja verificado o payload esperado, campos obrigatórios, etc. Neste meu exemplo, eu consultei a documentação oficial da API de usuários do WordPress. O retorno à esta chamada é um objeto JSON contendo todos os dados do usuário criado, incluindo seu ID, informação muito útil para outras atividades envolvendo usuários.

Como a chamada à API é assíncrona, repare que usei Promises ali no código, mas pode usar Async Await se preferir.

Altere os campos do usuário conforme a sua realidade (especialmente roles, que deve ter um perfil existente no seu WordPress) e execute o projeto. Verá que o usuário será cadastrado com sucesso no seu WordPress.

Curso Node.js e MongoDB

#4 – Usando a API do LearnDash

Como eu mencionei no início do post, eu fui atrás destas APIs do WordPress pois queria justamente automatizar uma migração de alunos para a nova plataforma que adquiri: LearnDash. O LearnDash é um plugin LMS para WordPress, muito bom aliás, mas que não vem com uma ferramenta de bulk import e as que encontrei na Internet eram muito caras, ainda mais considerando que eu usaria por pouco tempo.

Uma das coisas legais do LearnDash é que ele vem com uma API REST que segue os mesmos padrões do WordPress, facilitando bastante esse tipo de integração/customização. Os alunos no LearnDash são usuários no WordPress, então o passo que fiz antes já serve para criar alunos, só faltando então adicionar no curso correto.

Para isso, vou usar a API de cursos do LearnDash, cuja documentação completa você encontra neste link. Para a implementação, vamos criar uma nova função no módulo wordpress.js, como abaixo.

Essa função é bem parecida com a outra, até porque estamos usando Axios novamente. Nela, esperamos um array de ids de usuários e o id do curso para fazer a associação. Repare como a construção da URL leva em conta um endpoint específico do LearnDash, já que o WordPress padrão não possui funcionalidade de cursos.

Para testar, você tem duas opções: ou criar o usuário, pega o id e depois escreve a chamada para a adição do mesmo no curso, ou faz como eu: encadeia uma promise na outra e faz a chamada para adicionar no curso logo na sequência.

Assim, eu pego o id do último usuário inserido e uso ele na função de adicionar ao curso. Repare que deixei o curso fixo ali em 1. Você deve verificar obviamente o id do curso na sua instalação do LearnDash (é só ver o id do post/página quando for editar o curso).

Se você executar, verá que agora não apenas um novo usuário é criado como ele já é adicionado automaticamente no curso que definiu.

Então por hoje é isso, ao final do post você encontra um formulário para baixar os fontes e qualquer dúvida que ficou, deixe nos comentários.

Curso FullStack

Olá, tudo bem?

O que você achou deste conteúdo? Conte nos comentários.