Gutenberg Alt du trenger å vite om WordPress 'nyeste redaktør
Gutenberg er en ny redaktør for WordPress som vil helt erstatt gjeldende TinyMCE-drevet editor. Det er et ambisiøst prosjekt som sikkert vil endre WordPress på mange måter, og vil påvirke både vanlige sluttbrukere og utviklere, spesielt de som er avhengige av redigeringsskjermbildet for å jobbe på WordPress. Slik ser det ut.
Gutenberg introduserer også et nytt paradigme i WordPress kalt “Blokkere”.
“Blokkere” er det abstrakte begrepet som brukes til å beskrive enheter av oppslag som er sammensatt av innholdet eller utformingen av en nettside. Ideen kombinerer begreper som i WordPress i dag vi oppnår med kortkoder, egendefinert HTML og integrere funn i en enkelt konsistent API og brukeropplevelse.
Sette opp prosjektet
Å vite at Gutenberg er bygget på toppen av React, er noen utviklere bekymret for at barriere er for høy for utviklere på grunnnivå for å utvikle Gutenberg.
Sette opp React.js kan være ganske tidkrevende og forvirrende hvis du nettopp har begynt med det. Du trenger minst, JSX-transformator, Babel, avhengig av koden din, kan du trenge noen Babel-plugins, og en Bundler som Webpack, Rollup eller Parcel.
Heldigvis, Noen mennesker i WordPress-fellesskapet gikk opp og prøver å gjøre utviklingen av Gutenberg så enkelt som mulig for alle å følge. I dag har vi et verktøy som vil generere en Gutenberg boilerplate slik vi kan begynne å skrive kode med en gang i stedet for å forske med verktøyene og konfigurasjonene.
Opprett Guten Block
De lag-guten-blokk
er et initiert prosjekt av Ahmad Awais. Det er en nullkonfigurasjonsverktøy (# 0CJS
) som gjør at du kan utvikle Gutenberg-blokken med noen moderne stabler forhåndsinnstilt, inkludert React, Webpack, ESNext, Babel, ESLint og Sass. Følg instruksjonene for å komme i gang med Create Guten Block.
Bruke ES5 (ECMAScript 5)
Bruk alle disse verktøyene til å lage en enkel “Hei Verden” blokk kan virke bare for mye. Hvis du liker å holde stablene lene, kan du faktisk utvikle en Gutenberg-blokk ved hjelp av en vanlig god ol 'ECMAScript 5 som du kanskje allerede har kjent med. Hvis du har WP-CLI 1.5.0 installert på datamaskinen, du kan bare kjøre ...
wp stillas blokk[--Title = ] [--dashicon = ] [- kategori = ] [--theme] [- plugin = ] [--force]
… til generer Gutenberg-blokkens boilerplate til plugin eller tema. Denne tilnærmingen er mer fornuftig, spesielt for eksisterende plugins og temaer som du har utviklet før Gutenberg-epoken.
I stedet for å lage et nytt plugin for å imøtekomme Gutenberg-blokkene, vil du kanskje integrere blokkene til pluginene dine eller temaene. Og for å gjøre denne opplæringen enkel å følge for alle, Vi bruker ECMAScript 5 med WP-CLI.
Registrering av en ny blokk
Gutenberg er for tiden utviklet som et plugin og vil bli slått sammen til WordPress 5.0 når laget føler at det er klart. Så, for øyeblikket, må du installere den fra Plugins-siden i wp-admin
. Når du har installert og aktivert det, kjør følgende kommando i Terminal eller Kommandoprompt hvis du er på en Windows-maskin.
wp stillasblokkserie --title = "HTML5 Series" - tema
Denne kommandoen vil generere en blokk til det aktive temaet. Vår Blokk består av følgende filer:
. EN¢Â ??  ?? â ??  ?? â ??  ?? serie â    à  â ??  ?? â ??  ?? â ??  ?? block.js â    à  â ??  ?? â ??  ?? â ??  ?? editor.css â    à  â ??  ?? â ??  ?? â ??  ?? style.css â ??  ?? â ??  ?? â ??  ?? series.php
La oss laste inn hovedfilen til blokkene våre i functions.php
av vårt tema:
hvis (function_exists ('register_block_type')) krever get_template_directory (). '/Blocks/series.php';
Legg merke til at vi vedlegger filen lastes med en betinget. Dette sikrer kompatibilitet med tidligere WordPress versjon at vår blokk bare er lastet når Gutenberg er til stede. Vår blokk skal nå være tilgjengelig i Gutenberg-grensesnittet.
Slik ser det ut når vi legger inn blokken.
Gutenberg APIer
Gutenberg introduserer to sett med APIer for å registrere en ny blokk. Hvis vi ser på series.php
, Vi finner følgende kode som registrerer vår nye blokk. Det også laster stilarket og JavaScripts på forsiden og redigeringsprogrammet.
register_block_type ('twentyseventeen / series', array ('editor_script' => 'series-block-editor', 'editor_style' => 'serie-blokk-editor', 'style' => 'serieblokk'
Som vi kan se over, er vår blokk navngitt twentyseventeen / serie
, Blokknavnet må være unikt og navngitt for å unngå kollisjon med de andre blokkene brakt av de andre pluginene.
Dessuten, Gutenberg gir et sett med nye JavaScript-APIer for å samhandle med “Blokkere” grensesnitt i redaktøren. Siden API er ganske rikelig, vil vi fokusere på noen detaljer som jeg tror du burde vite for å få en enkel, men likevel fungerende Gutenberg Block.
wp.blocks.registerBlockType
Først vil vi se på wp.blocks.registerBlockType
. Denne funksjonen er vant til registrer en ny “Blokkere” til Gutenberg-redaktøren. Det krever to argumenter. Det første argumentet er blokknavnet som skal følge navnet som er registrert i register_block_type
fungere i PHP-siden. Det andre argumentet er en Objekt som definerer blokkegenskapene som tittel, kategori og et par funksjoner for å gjengi Block-grensesnittet.
var registerBlockType = wp.blocks.registerBlockType; registerBlockType ('twentyseventeen / series', title: __ ('HTML5 Series'), kategori: 'widgets', nøkkelord: ['html'], rediger: funksjon (rekvisitter) , lagre: funksjon (rekvisitter) );
wp.element.createElement
Denne funksjonen lar deg lage elementet i “Blokkere” i innleggeditoren. De wp.element.createElement
funksjon er i utgangspunktet en abstraksjon av React createElement ()
funksjonen slik at den aksepterer det samme settet av argumenter. Det første argumentet tar elementets type for eksempel et avsnitt, a span
, eller a div
som vist under:
wp.element.createElement ( 'div');
Vi kan alias funksjonen til en variabel så det er kortere å skrive. For eksempel:
var el = wp.element.createElement; el ( 'div');
Hvis du foretrekker å bruke den nye ES6-syntaksen, du kan også gjøre det på denne måten:
const createElement: el = wp.element; el ( 'div');
Vi kan også legg til elementattributtene slik som klasse
navn eller id
på den andre parameteren som følger:
var el = wp.element.createElement; el ('div', 'class': 'series-html5', 'id': 'serie-html-post-id-001');
De div
som vi opprettet ville ikke gi mening uten innholdet. Vi kan legg til innholdet på argumentet til den tredje parameteren:
var el = wp.element.createElement; el ('p', 'class': 'series-html5', 'id': 'series-html-post-id-001', 'Denne artikkelen er en del av vår "HTML5 / CSS3 opplæringsserie" for å gjøre deg til en bedre designer og / eller utvikler. Klikk her for å se flere artikler fra samme serie ');
wp.components
De wp.components
inneholder en samling av Gutenberg-komponentene, som navnet antyder. Disse komponentene er teknisk sett React tilpassede komponenter som inkluderer knappen, Popover, Spinner, Tooltip og en haug med andre. Vi kan Gjenbruk disse komponentene i vår egen blokk. I følgende eksempel legger vi til en knappkomponent.
Var Button = wp.components.Button; el (Button, 'class': 'download-button',, 'Download');
Egenskaper
Attributtene er måten å lagre dataene i Blokken på. Disse dataene kan være som innholdet, farger, justeringer, nettadressen etc. Vi kan få attributter fra egenskapene passert på redigere()
funksjon, som følger:
rediger: funksjon (rekvisitter) var content = props.attributes.seriesContent; returnere el ('div', 'class': 'series-html5', 'id': 'serie-html-post-id-001', innhold);
For å oppdatere egenskapene bruker vi setAttributes ()
funksjon. Vanligvis vil vi endre innholdet på bestemte handlinger, for eksempel når en knapp klikkes, et innspill fylles, et alternativ er valgt, etc. I det følgende eksempel bruker vi det til å legge til en falle tilbake innholdet i blokken vår i tilfelle noe uventet skjedde med vår seriesContent
Egenskap.
edit function ) var content = props.attributes.seriesContent; returnere [el ('div', 'class': 'series-html5', 'id': 'serie-html-post-id-001', innhold),];
Lagre blokken
De lagre()
funksjon fungerer på samme måte som redigere()
, bortsett fra det definerer innholdet i blokken vår for å lagre i postdatabasen. Lagring av blokkinnholdet er ganske enkelt, som vi kan se nedenfor:
lagre: funksjon (rekvisitter) hvis (! rekvisitter ||! props.attributes.seriesContent) return; var content = props.attributes.seriesContent; returnere [el ('div', 'class': 'series-html5', 'id': 'serie-html-post-id-001', innhold),];
Hva blir det neste?
Gutenberg vil forandre WordPress økosystem til det bedre (eller muligens det verre). Det gjør det mulig for utviklere å vedta en ny måte å utvikle WordPress plugins og temaer på. Gutenberg er bare en start. Snart “Blokkere” paradigmet vil bli utvidet til andre områder av WordPress som Innstillinger APIer og Widgets.
Lær JavaScript dypt; det er den eneste måten å komme inn på Gutenberg og være relevant for fremtiden i WordPress-bransjen. Hvis du allerede er kjent med JavaScript-grunnleggende, quirks, funksjonene, verktøyene, varene og bads, er jeg veldig sikker på at du vil komme opp til fart med Gutenberg.
Som nevnt avslører Gutenberg en overflod av APIer, nok til å gjøre nesten alt til Blokken din. Du kan velge om du vil kode din Blokker med et vanlig gammelt JavaScript, JavaScript med ES6 syntaks, React, eller til og med Vue.
Ideer og inspirasjon
Jeg har opprettet en veldig (veldig) enkel Gutenberg-blokk som du finner i Github-kontoens arkiv. Videre har jeg også satt sammen en rekke lagre der du kan drive inspirasjon på å bygge en mer kompleks blokk.
- Gutenblocks - En samling av blokker av Mathieu Viet skrevet i JavaScript med ES5 syntaks
- Jetpack Gutenblocks Project - en samling av blokker pakket i Jetpack
- En liste over eksempler på Gutenberg Implementering inkludert med Vue.js
Ytterligere referanse
- Gutenberg Offisiell Repository
- Gutenberg-håndboken