Criei um canal no YouTube para compartilhar algumas coisas por vídeo e o primeiro deles é sobre como criar um bloco no Gutenberg, o novo editor do WordPress. Ele será o padrão a partir da versão 5.0, que será lançada em breve, então é bom ir se preparando.
Se você curte meus textos, assine o canal, assista ao vídeo e, se gostou, deixe um like lá e comenta sobre ele com seus amiguinhos 🙂
Códigos
Aqui estão os códigos dos arquivos que eu usei no vídeo.
meu-primeiro -bloco.php
<?php /** * Plugin Name: Meu Primeiro Bloco */ defined( 'ABSPATH' ) || exit; function init_meu_primeiro_bloco() { // JavaScript para o editor. wp_register_script( 'meu-primeiro-bloco', plugins_url( 'meu-primeiro-bloco.js', __FILE__ ), array( 'wp-blocks', 'wp-element', 'wp-editor' ), filemtime( plugin_dir_path( __FILE__ ) . 'meu-primeiro-bloco.js' ) ); // CSS para o frontend e editor. wp_register_style( 'meu-primeiro-bloco', plugins_url( 'frontend.css', __FILE__ ), array(), filemtime( plugin_dir_path( __FILE__ ) . 'frontend.css' ) ); // CSS para o editor. wp_register_style( 'meu-primeiro-bloco-editor', plugins_url( 'editor.css', __FILE__ ), array( 'wp-edit-blocks' ), filemtime( plugin_dir_path( __FILE__ ) . 'editor.css' ) ); // Registra o bloco. register_block_type( 'blocos-de-exemplo/meu-primeiro-bloco', array( 'style' => 'meu-primeiro-bloco', 'editor_style' => 'meu-primeiro-bloco-editor', 'editor_script' => 'meu-primeiro-bloco', ) ); } add_action( 'init', 'init_meu_primeiro_bloco' );
meu-primeiro -bloco.js
( function() { var el = wp.element.createElement, RichText = wp.editor.RichText; wp.blocks.registerBlockType( 'blocos-de-exemplo/meu-primeiro-bloco', { title: 'Bloco de Exemplo', icon: 'heart', category: 'common', attributes: { conteudo: { type: 'string', source: 'html', selector: 'p', }, }, edit: function( props ) { var conteudo = props.attributes.conteudo; function onChangeConteudo( novoConteudo ) { props.setAttributes( { conteudo: novoConteudo } ); } return el( RichText, { tagName: 'p', className: props.className, onChange: onChangeConteudo, value: conteudo, } ); }, save: function( props ) { return el( RichText.Content, { tagName: 'p', value: props.attributes.conteudo, } ); }, } ); }() );
frontend.css
.wp-block-blocos-de-exemplo-meu-primeiro-bloco { color: darkred; background: #fcc; border: 2px solid #c99; padding: 20px; }
editor.css
.wp-block-blocos-de-exemplo-meu-primeiro-bloco { color: green; background: #cfc; border: 2px solid #9c9; padding: 20px; }
Vou deixar aqui um zip com tudo junto também. Espero que ajude!