React JS para usuários do WordPress: uma introdução básica
Publicados: 2018-10-19Por mais de 15 anos, o WordPress tem sido a solução CMS mais popular e completa que permite construir qualquer coisa, desde um portfólio de uma página até uma plataforma de comércio eletrônico completa. WordPress usa PHP para toda a sua infraestrutura de back-end, como atualizações, APIs, auth, camada de banco de dados e a maior parte do front-end. No entanto, como outras estruturas populares, o WordPress também foi forçado a evoluir nos últimos tempos.
Dado o potencial crescente e o poder dos aplicativos JavaScript para web, bem como aplicativos móveis nativos e de desktop, a API WP REST tenta preencher a lacuna entre o legado do núcleo do PHP do WordPress e a ascensão do JavaScript. Eu acredito que este é um grande passo para o WordPress por dois motivos:
- Os sites WP existentes podem usar React / Vue ou outra biblioteca de front-end para criar uma melhor experiência de IU.
- Por outro lado, os desenvolvedores da Web obtêm um CMS sem cabeça padrão da indústria que pode ser facilmente integrado com a pilha de sua escolha.
Essa é uma situação ganha-ganha para todos. Neste artigo, vamos concentrar nossa energia na construção de um front-end React para o back-end do WordPress. Mas primeiro, vamos dar uma olhada na API REST do WordPress.
Noções básicas da API REST do WordPress
O desenvolvimento da API WP REST começou há alguns anos e foi inicialmente projetado como um plugin de recurso autônomo. WordPress v4.4, codinome 'Clifford', introduziu a infraestrutura real da API REST no núcleo do WordPress. Os endpoints reais apareceram no WordPress v4.7, codinome 'Vaughan'. A API WP permite que você use o WordPress como um CMS sem cabeça que é fácil de usar, estável e compatível com JSON.
JSON
JSON é o formato preferido se você pretende integrar o WordPress com uma pilha de JavaScript. JSON é semelhante ao XML no sentido de que nos dá a capacidade de transferir dados com eficiência usando uma sintaxe muito legível.
JSON é na verdade uma string que compreende uma representação baseada em texto de um objeto JavaScript. Ele armazena dados em um conjunto de pares de valores-chave. Um exemplo simples de JSON de uma postagem WP pode ter a seguinte aparência -
{
id: 1,
"title": {
"rendered": "Hello World"
},
"content": {
"rendered": "Welcome to WordPress. This is your first
post. Edit or delete it, then start blogging!"
}
}
Uma resposta JSON completa usando a API WP REST geralmente inclui informações adicionais sobre a postagem, como metadados. Você tem tudo o que precisa para criar um tema de front-end ou um plug-in para seu aplicativo.
Os pontos finais
Os endpoints do WordPress são muito acessíveis ao público. Se você estiver executando a versão mais recente do WordPress, basta anexar / wp-json / wp / v2 ao final da URL. Por exemplo, você pode acessar os pontos de extremidade básicos em 127.0.0.1/wp-json/wp/v2 se tiver configurado uma instância do WordPress em seu host local. Se você quiser embelezar a saída, pode usar uma extensão do visualizador JSON que faz o JSON parecer bonito em seu navegador.
Os dados que estão sendo exibidos na tela são essencialmente o conteúdo, bem como as metainformações no formato JSON. O que você fez aqui foi definir uma rota e pediu ao seu navegador para buscar os dados para você.
O que queremos dizer com rota? Uma rota é um URL mapeado para um método específico. O núcleo do WordPress lê a rota e entende que cada '/' representa um caminho ou parâmetro específico que precisa ser seguido.
Por exemplo, um endpoint pode ser '/ wp-json / wp / v2 / posts / 1' , onde você está solicitando uma postagem com um id equivalente a 1. APIs do WordPress são úteis porque são muito extensas. Isso se traduz na capacidade de pegar qualquer dado do seu site e transformá-lo em um terminal. Quase todas as funcionalidades básicas do WordPress são suportadas e todos os recursos futuros também serão suportados. Aqui está uma lista de APIs do WordPress com suporte no momento em que este tutorial foi escrito:
| Recurso | Rota Base |
|---|---|
| Postagens | / wp / v2 / posts |
| Postar revisões | / wp / v2 / revisions |
| Categorias | / wp / v2 / categorias |
| Tag | / wp / v2 / tags |
| Páginas | / wp / v2 / pages |
| Comentários | / wp / v2 / comentários |
| Taxonomias | / wp / v2 / taxonomias |
| meios de comunicação | / wp / v2 / media |
| Comercial | / wp / v2 / users |
| Tipos de postagem | / wp / v2 / types |
| Post status | / wp / v2 / statuses |
| Definições | / wp / v2 / settings |
Os desenvolvedores de temas, bem como os desenvolvedores de plug-ins, podem criar terminais personalizados para seus aplicativos. Se você deseja verificar todos os terminais diferentes disponíveis, você pode baixar um aplicativo como o Postman. Isso fornecerá a você uma GUI feita especialmente para explorar APIs. Além disso, você pode fazer chamadas de API diretamente para aplicativos de terceiros sem ter que depender de plug-ins.
Vamos dar um exemplo. Carregar arquivos e manter várias versões deles é um requisito integral para qualquer aplicativo da web moderno. Isso é particularmente verdadeiro no caso de arquivos de mídia. No WordPress, há uma abundância de plug-ins disponíveis que podem fazer isso por você; no entanto, pode ser necessário fazer chamadas para o servidor WordPress para usá-los.
Com a API WP, a lógica de gerenciamento de mídia pode ser abstraída do WordPress. Você pode fazer todas as chamadas de API de terceiros diretamente do front-end, o que é ótimo em termos de separação de interesses. Você pode usar uma biblioteca como a Cloudinary para manipular as imagens e outros arquivos de mídia instantaneamente e, em seguida, enviá-los para a nuvem. Depois de carregado, o URL da imagem pode ser armazenado no backend do WP. As opções são infinitas e você pode combinar as peças da maneira que achar melhor.
Vamos agora ver como conectar o back-end do WordPress ao React.
Primeiros passos com React
React é uma biblioteca de front-end declarativa para construir interfaces de usuário e aplicativos interativos na web. Com o React, você pode compor pedaços menores independentes de código reutilizável, conhecidos como componentes. Vamos criar nosso primeiro componente criando um projeto React.
A maneira mais popular de criar um projeto React é executando create-react-app. CRA oferece um ambiente confortável para aprender React e é a melhor maneira de começar a construir um novo aplicativo de página única se você for um iniciante. Ele configura seu ambiente de desenvolvimento para que você possa usar os recursos JavaScript mais recentes, como ES6 e webpack. Além disso, o create-react-app fornece uma boa experiência de desenvolvedor e otimiza seu aplicativo para produção.

Você precisará ter Node> = 8.xe npm> = 5.2 em sua máquina. Para criar um projeto, execute os seguintes comandos:
npx create-react-app wp-react-demo
O comando acima cria um modelo padrão para nosso aplicativo react, que chamamos de wp-react-demo .
cd wp-react-demo
npm start
Se tudo correr bem, ele deve ser capaz de servir o aplicativo recém-criado em um servidor de desenvolvimento em http: // localhost: 3000 /.
Se você está curioso para ver a estrutura de diretórios gerada por create-react-app, esta é a aparência:
.
├── README.md
├── package.json
├── public
│ ├── favicon.ico
│ ├── index.html
│ └── manifest.json
├── src
│ ├── App.css
│ ├── App.js
│ ├── App.test.js
│ ├── index.css
│ ├── index.js
│ ├── logo.svg
│ └── registerServiceWorker.js
└── yarn.lock
O diretório público contém todos os ativos necessários para iniciar o aplicativo. O diretório src compreende todos os arquivos JavaScript nos quais estaremos trabalhando e você gastará muito do seu tempo lá.
Quando você visita localhost: 3000, o arquivo index.html é carregado. Se você abrir o arquivo public / index.html, não há muito lá. Mas você encontrará esta linha em algum lugar no meio:

<div id="root"></div>
Esse é o ponto de partida onde o React renderiza a árvore de componentes na raiz do aplicativo.
O que isso significa? Vá para o diretório src e abra index.js .
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render(<App />, document.getElementById('root'));
O React tenta encontrar um elemento com id "root" no documento e então injeta o
import React, { Component } from 'react';
import logo from './logo.svg';
import './App.css';
class App extends Component {
render() {
return (
<div className="App">
<header className="App-header">
<img src={logo} className="App-logo" alt="logo" />
<h1 className="App-title">Welcome to React</h1>
</header>
<p className="App-intro">
To get started, edit <code>src/App.js</code> and save to reload.
</p>
</div>
);
}
}
export default App;
Esta é basicamente a aparência de um componente. Cada componente renderiza uma parte de sua IU. Você pode compor um componente dentro de outro e é assim que obtém uma estrutura de árvore de componentes como esta:

Se você está se perguntando por que podemos usar HTML dentro de render (), essa é a mágica do JSX. JSX é uma extensão de sintaxe para JavaScript e permite usar HTML simples em um arquivo JavaScript. Você pode ler mais sobre isso nos documentos oficiais.
Vou excluir todo o conteúdo HTML e, em seguida, substituí-lo por um
<div> <h2> WordPress Blog </h2> </div>
Componentes e estado de reação
Os componentes são os blocos de construção do React. Cada componente pode ter
- uma entrada (ou múltiplas entradas) comumente conhecida como adereços.
- um estado que é local para o componente
- métodos que renderizam algo (por exemplo: render ()) ou manipulam alguma lógica de negócios
Vamos construir um componente que irá recuperar todas as postagens disponíveis e exibi-las de volta para o usuário. Para fazer isso, primeiro escreveremos um construtor para a classe e inicializaremos o estado no construtor:
constructor (props){
super(props);
this.state = {
title: {},
date: "",
content: {}
};
}
O estado é um objeto JSON. Declaramos um título, uma data e propriedades de conteúdo dentro do construtor. O título e o conteúdo são objetos, enquanto a data é uma matriz.
Buscando os dados e atualizando o estado
Agora, quando o componente é montado, ele precisa buscar os dados das postagens da API e armazená-los no estado. Os dados das postagens estão disponíveis no seguinte URL:
http://localhost/wp-json/wp/v2/posts/
Então, onde colocamos essa lógica? O construtor pode parecer uma boa escolha porque ele é chamado quando o componente é criado, mas não é a melhor escolha. Em vez disso, usaremos algo conhecido como método de ciclo de vida. O método de ciclo de vida componentDidMount () é chamado depois que o componente é montado.
componentDidMount() {
return fetch(`http://wordpress.com/wp-json/wp/v2/posts/`)
.then((response) => response.json())
.then((responseJson) => {
// Update state here
})
.catch((error) => {
console.error(error);
});
}
Estamos usando fetch, que é o padrão de fato em JavaScript para fazer chamadas de API. O parâmetro para fetch () é a URL que queremos buscar. Fetch retorna uma promessa que podemos avaliar por uma cadeia de .then () s. O primeiro bloco converte a resposta para o formato json para que possamos colocá-la no estado.
const { title, date, content } = responseJson;
this.setState({ title, date, content });
Então, o que acontece aqui? Primeiro, extraímos os campos de título, data e conteúdo do objeto responseJson. A sintaxe estranha que você vê aqui é conhecida como sintaxe de atribuição de desestruturação. Como você já deve saber, a API WP retorna muitas informações que não solicitamos. A sintaxe de atribuição de desestruturação torna possível descompactar valores do objeto em variáveis distintas.
Em seguida, usamos this.setState () para atualizar o estado do componente. O método setState () aceita um objeto como parâmetro que será o estado atualizado.
Rendering Our WordPress post
O método render retorna JSX que discutimos anteriormente. Ao contrário do HTML puro, você pode realmente incorporar expressões em JSX. Por exemplo, se precisar renderizar o título da postagem buscada e nada mais, você pode fazer o seguinte:
render() {
return (
<div>
{this.state.title.rendered}
</div>
);
}
}
Tente!
Da mesma forma, você pode renderizar a data incorporando {this.state.date} . No entanto, o conteúdo armazenado no estado compreende o HTML real. Como o HTML é retornado do servidor, é seguro assumir que não há perigo em renderizá-lo. Portanto, para renderizar o conteúdo, você precisará atribuir o atributo dangerouslySetInnerHTML da seguinte maneira:
<div
className= "content"
dangerouslySetInnerHTML={{ __html: this.state.content.rendered }}>
</div>
Aqui está o método render () em ação.
render() {
return (
<div>
<div>
<div className="row">
<div className="leftcolumn">
<div className="card">
<div className= "title">
<h1>{this.state.title.rendered}</h1>
<p> {this.state.date} </p>
</div>
<div
className= "content"
dangerouslySetInnerHTML={{ __html: this.state.content.rendered }} />
</div>
</div>
</div>
</div>
</div>
);
}
}
Eu adicionei algumas tags e classes extras para estilização. Você pode escrever todos os seus estilos em um arquivo no diretório src e importá-lo para o seu App.js. Você pode encontrar os estilos para este projeto em src / App.css . Não se esqueça de adicionar uma instrução de importação, caso contrário, os estilos não funcionarão.
import './App.css';
É isso. Você criou um front-end básico para o back-end da API do WordPress usando React. Esta é a aparência da postagem padrão do Hello World em nosso aplicativo:

Resumo
Ufa! É muito terreno coberto em um único dia. Começamos com a API Rest do WordPress e depois nos familiarizamos com os endpoints da API. Em seguida, começamos a construir um aplicativo React do zero que basicamente exibe uma postagem do WordPress.
Usar o React com o WordPress é o mesmo que usar o React com qualquer outra API de back-end. Com o WordPress, é mais fácil encontrar dados e você sabe exatamente onde procurar. Se você acabou de começar a explorar o React, recomendo os documentos do React como um bom lugar para começar. Se você tiver alguma dúvida, fique à vontade para perguntar nos comentários.
