Gutenberg Alt du behøver at vide om WordPress 'nyeste editor
Gutenberg er en ny editor til WordPress, der vil helt Udskift den nuværende TinyMCE-drevne editor. Det er et ambitiøst projekt, der sandsynligvis ændrer WordPress på mange måder og vil påvirke både almindelige slutbrugere og udviklere, specifikt dem, der er afhængige af redigeringsskærmen for at arbejde på WordPress. Sådan ser det ud.
Gutenberg introducerer også et nyt paradigme i WordPress kaldet “Blok”.
“Blok” Er det abstrakte udtryk, der bruges til at beskrive enheder af markering som er sammensat af indholdet eller layoutet på en webside. Ideen kombinerer begreber til hvad i WordPress i dag vi opnår med kortkoder, brugerdefineret HTML og integrere opdagelse i en enkelt sammenhængende API og brugeroplevelse.
Opsætning af projektet
At vide, at Gutenberg er bygget oven på React, er nogle udviklere bekymrede over, at barriere er for høj til entry-level udviklere til udvikling af Gutenberg.
Opsætning React.js kan være ret tidskrævende og forvirrende, hvis du lige er begyndt med det. Du skal mindst bruge JSX-transformeren, Babel, afhængigt af din kode, kan du have brug for nogle Babel-plugins og en Bundler som Webpack, Rollup eller Parcel.
Heldigvis, nogle mennesker inden for WordPress-fællesskabet steg op og forsøger at gøre udviklingen af Gutenberg så let som muligt for alle at følge. I dag har vi et værktøj, der vil generere en Gutenberg boilerplate vi kan begynde at skrive kode med det samme i stedet for at befrugte med værktøjerne og konfigurationerne.
Opret Guten Block
Det skabe-guten-blok
er et initiativt projekt af Ahmad Awais. Det er en nulkonfigurationsværktøjssæt (# 0CJS
), der giver dig mulighed for at udvikle Gutenberg-blokken med nogle moderne stabler forudindstillet, herunder React, Webpack, ESNext, Babel, ESLint og Sass. Følg vejledningen for at komme i gang med Create Guten Block.
Brug af ES5 (ECMAScript 5)
Brug alle disse værktøjer til at skabe en enkel “Hej Verden” blokke kan virke bare for meget. Hvis du kan lide at holde dine stabler lænket, kan du faktisk udvikle en Gutenberg-blok ved hjælp af en almindelig god ol 'ECMAScript 5, som du måske allerede har kendskab til. Hvis du har WP-CLI 1.5.0 installeret på din computer, du kan bare køre ...
wp stillads blok[--Title = ] [--dashicon = ] [- kategori = ] [--theme] [- plugin = ] [--force]
… til generer Gutenberg-kogepladen til dit plugin eller tema. Denne tilgang er mere fornuftig, især for eksisterende plugins og temaer, som du har udviklet før Gutenberg æra.
I stedet for at oprette et nyt plugin for at imødekomme Gutenberg-blokke, kan du måske integrere blokkerne i dine plugins eller temaerne. Og for at gøre denne vejledning nem at følge for alle, vi bruger ECMAScript 5 med WP-CLI.
Registrering af en ny blok
Gutenberg er i øjeblikket udviklet som et plugin og vil blive slået sammen til WordPress 5.0, når holdet føler, at det er klar. Så i øjeblikket skal du installere det fra Plugins side i wp-admin
. Når du har installeret og aktiveret det, skal du køre følgende kommando i Terminal eller Command Prompt, hvis du er på en Windows-maskine.
wp stilladsblokserie --title = "HTML5 Series" --theme
Denne kommando vil generere en blok til det aktuelt aktive tema. Vores Blok består af følgende filer:
. EN¢Â ?? â ?? â ?? â ?? â ?? â ?? serie â     à â ?? â ?? â ?? â ?? â ?? â ?? block.js â     à â ?? â ?? â ?? â ?? â ?? â ?? editor.css â     à â ?? â ?? â ?? â ?? â ?? â ?? style.css â ?? â ?? â ?? â ?? â ?? â ?? series.php
Lad os indlæse hovedfilen af vores blokke i functions.php
af vores tema:
hvis (function_exists ('register_block_type')) kræver get_template_directory (). '/Blocks/series.php';
Bemærk, at vi vedlægger filindlæsningen med en betinget. Dette sikrer kompatibilitet med tidligere WordPress-version, at vores blok kun er indlæst, når Gutenberg er til stede. Vores blok skal nu være tilgængelig inden for Gutenberg-grænsefladen.
Sådan ser det ud, når vi indsætter blokken.
Gutenberg API'er
Gutenberg introducerer to sæt API'er til registrering af en ny blok. Hvis vi ser på series.php
, Vi finder følgende kode, der registrerer vores nye blok. Det også Indlæser stilarket og JavaScripts i front-end og editoren.
register_block_type ('twentyseventeen / series', array ('editor_script' => 'serieblok-editor', 'editor_style' => 'serieblok-editor', 'style' => 'serieblok'));
Som vi kan se ovenfor, er vores blok navngivet twentyseventeen / serie
, Bloknavnet skal være unikt og navnefelt for at undgå kollision med de andre blokke, der er bragt af de andre plugins.
desuden, Gutenberg giver et sæt nye JavaScript API'er til at interagere med “Blok” grænseflade i redaktøren. Da API'en er rigelig, vil vi fokusere på nogle detaljer, som jeg synes du burde vide for at få en enkel, men alligevel fungerende Gutenberg Block.
wp.blocks.registerBlockType
Først skal vi se nærmere på wp.blocks.registerBlockType
. Denne funktion er vant til registrer en ny “Blok” til Gutenberg editoren. Det kræver to argumenter. Det første argument er bloknavnet, som skal følge navnet registreret i register_block_type
funktion i PHP side. Det andet argument er en Objekt definerer blokegenskaberne lignende titel, kategori og et par funktioner til at gøre Block-grænsefladen.
var registerBlockType = wp.blocks.registerBlockType; registerBlockType ('twentyseventeen / series', title: __ ('HTML5 Series'), kategori: 'widgets', nøgleord: ['html'], rediger: funktion (rekvisitter) , gem: funktion );
wp.element.createElement
Denne funktion giver dig mulighed for at oprette elementet i “Blok” i postredaktøren. Det wp.element.createElement
funktion er i grunden en abstraktion af reaktionen createElement ()
funktionen accepterer således det samme sæt argumenter. Det første argument tager elementets type for eksempel et afsnit, a span
, eller a div
som vist nedenfor:
wp.element.createElement ( 'div');
Vi kan alias funktionen i en variabel så det er kortere at skrive. For eksempel:
var el = wp.element.createElement; el ( 'div');
hvis du foretrækker at bruge den nye ES6 syntaks, du kan også gøre det på denne måde:
const createElement: el = wp.element; el ( 'div');
Vi kan også Tilføj elementattributterne som f.eks klasse
navn eller id
på den anden parameter som følger:
var el = wp.element.createElement; el ('div', 'class': 'series-html5', 'id': 'serie-html-post-id-001');
Det div
at vi skabte ville ikke give mening uden indholdet. Vi kan Tilføj indholdet på argumentet for den tredje parameter:
var el = wp.element.createElement; el ('p', 'class': 'series-html5', 'id': 'series-html-post-id-001', 'Denne artikel er en del af vores "HTML5 / CSS3 Tutorials Series" for at gøre dig til en bedre designer og / eller udvikler. Klik her for at se flere artikler fra samme serie ');
wp.components
Det wp.components
indeholder en samling af Gutenberg-komponenterne, som navnet antyder. Disse komponenter teknisk er React custom komponenter, som omfatter knappen, popover, spinner, tooltip og en masse andre. Vi kan genbrug disse komponenter i vores egen blok. I det følgende eksempel tilføjer vi en knap komponent.
Var Button = wp.components.Button; el (Button, 'class': 'download-button',, 'Download');
Egenskaber
Attributterne er vejen til at gemme dataene i vores blok, disse data kan være som indholdet, farverne, justeringer, webadressen osv. Vi kan få attributterne fra egenskaberne passeret på redigere()
funktion som følger:
rediger: funktion (rekvisitter) var content = props.attributes.seriesContent; return el ('div', 'class': 'series-html5', 'id': 'serie-html-post-id-001', indhold);
For at opdatere attributterne bruger vi setAttributes ()
fungere. Typisk vil vi ændre indholdet på bestemte handlinger, f.eks. Når en knap er klikket, en indtastning er udfyldt, en valgmulighed er valgt, osv. I det følgende eksempel bruger vi det til at tilføje en Falde tilbage indholdet af vores blok, hvis der er sket noget uventet med vores seriesContent
Egenskab.
rediger: funktion (rekvisitter) if (type af props.attributes.seriesContent === 'undefined' ||! props.attributes.seriesContent) props.setAttribute (seriesContent: 'Hej World! Her er backback indholdet.' ) var indhold = rekvisitter.attributes.seriesContent; returnere [el ('div', 'class': 'series-html5', 'id': 'serie-html-post-id-001', indhold)
Gemmer blokken
Det Gemme()
funktion fungerer på samme måde som redigere()
, bortset fra det definerer indholdet af vores blok for at gemme til postdatabasen. At gemme blokindholdet er ret ligetil, som vi kan se nedenfor:
gem: funktion (rekvisitter) hvis (! rekvisitter ||! props.attributes.seriesContent) return; var content = props.attributes.seriesContent; returnere [el ('div', 'class': 'series-html5', 'id': 'serie-html-post-id-001', indhold)
Hvad er næste?
Gutenberg vil ændre WordPress økosystem til det bedre (eller muligvis det værre). Det gør det muligt for udviklere at vedtage en ny måde at udvikle WordPress plugins og temaer på. Gutenberg er bare en start. Snart den “Blok” paradigmet vil blive udvidet til andre områder af WordPress som indstillinger API og Widgets.
Lær JavaScript Deeply; det er den eneste vej til at komme ind i Gutenberg og holde sig relevant for fremtiden i WordPress-branchen. Hvis du allerede er bekendt med JavaScript-basics, quirks, funktionerne, værktøjerne, varerne og bads, er jeg virkelig sikker på at du vil komme hurtigt med Gutenberg.
Som nævnt udsætter Gutenberg en overflod af API'er, nok til at gøre næsten alt til din blok. Du kan vælge, om du vil kode din blok med et almindeligt gammelt JavaScript, JavaScript med ES6 syntaks, React eller endda Vue.
Idéer og inspiration
Jeg har oprettet en meget (meget) enkel Gutenberg-blok, som du kan finde i vores Github-konto. Desuden har jeg også sammensat en række lagre, hvorfra du kan drive inspiration til at opbygge en mere kompleks blok.
- Gutenblocks - En samling af Blocks af Mathieu Viet skrevet i JavaScript med ES5 Syntax
- Jetpack Gutenblocks Project - en samling af blokke bundtet i Jetpack
- En liste med eksempler på Gutenberg implementering herunder med Vue.js
Yderligere Reference
- Gutenberg Official Repository
- Gutenberg Håndbog