Como criar um plugin WordPress com React

Como criar um plugin WordPress com React

Mauricio Bruno. O WordPress é uma ótima plataforma que suporta várias páginas e componentes. E só por ser tão grande pode intimidar quem quer desenvolver ali, ainda mais quando abrimos a documentação! Mas não se preocupe. Este artigo mostra que criar seus primeiros plugins e blocos do WordPress é relativamente fácil. Mostrarei como criar um plug-in com o mínimo de código, bem como integrar um aplicativo React a ele. Descobrimos agora?

Motivação

Digamos que você já tenha um site WordPress, mas foi solicitado a adicionar um detalhe a ele, por exemplo, agendamento de consultas médicas em uma plataforma específica. Nesse caso, dificilmente você encontrará um plugin pronto com a funcionalidade desejada. Também não é viável reconstruir todo o Front-end para adicionar esta função. Portanto, uma boa alternativa é criar um plugin com React.

Criaremos apenas parte dessa função aqui porque meu objetivo é mantê-la o mais simples possível. No entanto, o que faremos aqui permitirá que você incorpore um aplicativo React em qualquer página e, a partir daí, crie o que quiser. Vamos lá!

Criar o plug-in

Supondo que você já tenha o ambiente de desenvolvimento do WordPress instalado, vá até a pasta wp-content/plugins/ e crie uma nova para o plugin:

mkdir react-plugin

cd react-plugin

O primeiro passo é criar o arquivo principal, que no nosso caso será react-plugin.php:

<?php

/**

* Plugin Name: React Plugin

*/

Vamos deixar essa configuração mínima para garantir que o plug-in funcione. Você pode ver todos os campos disponíveis para configurar o plugin aqui.

Agora, ao acessar o painel do WordPress, mesmo sem nenhuma função, você pode ver que o plug-in já está disponível para ativação, para que você possa iniciá-lo sem problemas.



Em seguida, vamos iniciar o projeto com o React! Para conseguir isso, vamos iniciar o npm e instalar a dependência @wordpress/scripts.

npm init -y

npm install --save-dev @wordpress/scripts

O pacote @wordpress/scripts adiciona vários detalhes como React, ReactDOM, Babel, Sass e Typescript, e até nos ajuda a construir nosso código. Só com ele, podemos fazer muito.

Agora precisamos configurar três scripts no arquivo package.json porque vamos precisar deles para desenvolver o plugin:

{

...

"scripts: {

"build": "wp-scripts build

"start": "wp-scripts start",

"plugin-zip": "wp-scripts plugin-zip"

},

}

É hora de criar o ponto de entrada para nosso aplicativo React. Vamos criar uma pasta src onde colocaremos nosso código. Dentro dele haverá um arquivo index.jsx:

import React from "react";

import ReactDOM from "react-dom";

import { App } from "./App";

const containers = document.querySelectorAll(".react-plugin");

containers.forEach((container) => {

ReactDOM.render(<App />, container);

});

O snippet document.querySelectorAll(".react-plugin") retorna uma lista de todos os elementos na página que possuem a classe react-plugin. Para cada elemento retornado, renderizamos nosso app. Desta forma, nosso plugin pode ser inserido mais de uma vez na mesma página.

Agora vamos criar o componente src/App.jsx:

import React, { useState } from "react";

import "./App.scss";

export function App() {

const [counter, setCounter] = useState(0);

const increment = () => setCounter(counter + 1);

return <button onClick={increment}>Cliked me {counter} times!</button>;

}

E vamos aplicar alguns estilos com src/App.scss:

.react-plugin {

display: flex;

justify-content: center;

padding: 1.5rem;

background-color: black;

button {

border: 0;

border-radius: 0.5rem;

padding: 1rem 0.75rem;

cursor: pointer;

&:hover {

background-color: lightgray

}

}

}

OK, criamos um componente contador simples e usamos alguns estilos para testar se você pode usá-los, mas agora precisamos exibi-los em algum lugar. Como fazemos?

Registre os scripts

Em um aplicativo React normal, criaríamos uma página HTML e incluiríamos o link do nosso script lá. O WordPress é semelhante no fato de que ele lida com as páginas e precisamos dizer a ele para incluir nossos scripts e estilos. Para isso, utilizamos algumas funções que ele disponibiliza.

Agora vamos terminar o arquivo react-plugin.php:

<?php

/**

* Plugin Name: React Plugin

*/

function react_plugin_shortcode()

{

wp_enqueue_script(

"react_plugin_js",

plugin_dir_url(__FILE__) . "/build/index.js",

[ "wp-element"],

"0.1.0",

true

);

wp_enqueue_style(

"react_plugin_css",

plugin_dir_url(__FILE__) . "/build/index.css"

);

return "<div class='react-plugin'></div>"

}

add_shortcode("react-plugin", "react_plugin_shortcode");

Aqui definimos a função react_plugin_shortcode. Dentro desta função inserimos os scripts na página usando a função wp_enqueue_script e o CSS com wp_enqueue_style.O segundo argumento para essas funções é o caminho para os arquivos a serem inseridos. Vou colocá-lo onde os arquivos estarão depois de construirmos o código.

Observe que, como o terceiro argumento é wp_enqueue_script, passamos wp-element package como uma dependência do nosso script porque é deste pacote que o React virá quando o código da página for executado. Mas sim @wordpress/scripts já instalado já fornece React, então por que devemos colocar essa dependência aqui?

O que acontece é que o WordPress já tem o React como núcleo, então quando construímos o código, @wordpress/scripts não incluirá o código React em nosso plugin. Portanto, informamos ao WordPress nosso script para usá-lo por meio dessa dependência. Isso é bom porque ajuda a reduzir, no final, o tamanho do código gerado. Em poucas palavras, @wordpress/scripts nos ajuda na fase de desenvolvimento.

Ainda dentro da função, retornamos o código que irá substituir o shortcode, que é o elemento container do nosso app.

Por fim, vinculamos a função ao shortcode do plugin react, de modo que sempre que o WordPress encontrar o texto [react-plugin] em uma página, ele chamará nosso processo.

Agora vamos construir o código:

npm run build

Voilà!

Tudo pronto? A única coisa que resta é editar qualquer página ou post e colocar o shortcode que criamos, [react-plugin]:



Por fim, veremos o componente React já presente:



Viu como era simples? Podemos até ir mais longe e criar um bloco em vez de usar um shortcode. Isso torna ainda mais fácil usar nosso componente.

Criar um block

Vamos fazer algumas pequenas alterações em nosso código. A primeira coisa será adicionar o pacote @wordpress/blocks e use o script de início para construí-lo automaticamente:

npm install @wordpress/blocks

npm run start

Precisamos editar o arquivo principal do plugin (react-plugin.php). Observe que o código ficará semelhante ao que tínhamos antes:

<?php

/**

* Plugin Name: React Plugin

*/

function react_plugin_block_init()

{

register_block_type(

__DIR__ . '/build',

['render_callback' => 'react_plugin_render_block']

);

}

function react_plugin_render_block()

{

wp_enqueue_script(

"react_plugin_frontend_js",

plugin_dir_url(__FILE__) . "/build/frontend.js",

["wp-element"],

"0.1.0",

true

);

return "<div class='react-plugin'></div>"

}

add_action('init', 'react_plugin_block_init');

Criamos aqui a função react_plugin_block_init, que registrará nosso bloco usando a função que o WordPress fornece: register_block_type.Como primeiro argumento, passamos o caminho para uma pasta, para que o WordPress procure um arquivo block.json nesta pasta, onde colocaremos a configuração do bloco.

No segundo argumento, passamos outra função que criamos para executar quando o bloco for renderizado na página. Nesta função, assim como antes, inserimos um script na página e retornamos o elemento container, mas desta vez, vamos dividir o código em dois arquivos: o que usamos, index.js; e o segundo, frontend.js.

Finalmente, chamamos add_action para conectar nossas funções ao gancho init, o que fará com que nosso código seja executado assim que o WordPress for carregado.

Block.json

O WordPress recomenda colocar nossa configuração de bloco em um arquivo block.json (veja a documentação completa aquí). Vamos criá-lo agora dentro da pasta src.

{

"$schema": "<https://schemas.wp.org/trunk/block.json>"

"apiVersion": 2,

"name": "react-plugin/counter",

"title": "React Plugin Counter",

"category": "layout",

"icon": "button",

"editorScript": "file:./index.js",

"viewScript": "file:./frontend.js",

"style": "file:./index.css"

}

Observe as três últimas configurações: editorScript, viewScript, y style. Nele definimos qual código será utilizado quando estivermos na tela de edição da página, o código utilizado no "front-end" e o CSS utilizado por eles, respectivamente.

Agora vamos para o código JavaScript. Como eu disse antes, vamos dividi-lo em duas partes. Primeiro, src/index.js:

import { registerBlockType } from "@wordpress/blocks";

import { App } from "./App";

import metadata from "./block.json";

registerBlockType(metadata.name, {

edit: App,

});

Nesse arquivo, registramos nosso bloco em JavaScript, que é necessário para que funcione. Passamos nosso componente app para a opção de edição, pois devemos passar o que será exibido na seção admin da tela de edição da página. Finalmente, o arquivo src/frontend.jsx:

import React from "react";

import ReactDOM from "react-dom";

import { App } from "./App";

const containers = document.querySelectorAll(".react-plugin");

containers.forEach((container) => {

ReactDOM.render(<App />, container);

});

Aqui mantemos o que estava em nosso arquivo anterior, então este código será executado somente quando a página for renderizada, fazendo com que o bloco seja renderizado.

Com tudo pronto, só falta adicionar o bloco à página.




Isso é tudo! Ao visualizar a página, o componente React deve ser exibido sem problemas.

Parabéns!

Viu como é fácil criar um plugin WordPress com React? Claro que o que fizemos foi algo simples, com configuração mínima, mas o objetivo era mostrar como fazer.

Para finalizar, vamos construir nosso código e gerar um arquivo zip. Vamos executar os seguintes comandos no terminal:

npm run build

npm run plugin-zip.

Pronto! Agora você tem seu plugin pronto para distribuição! Suponha que você queira saber mais sobre o assunto. Nesse caso, recomendo que você verifique a documentação oficial do WordPress, principalmente o pacote [@wordpress/create-block] através deste link, o que o ajudará muito a criar blocos e outros elementos. Espero ter ajudado.


💡
As opiniões e comentários expressos neste artigo são de propriedade exclusiva de seu autor e não representam necessariamente o ponto de vista da Revelo.

A Revelo Content Network acolhe todas as raças, etnias, nacionalidades, credos, gêneros, orientações, pontos de vista e ideologias, desde que promovam diversidade, equidade, inclusão e crescimento na carreira dos profissionais de tecnologia.