Gutenberg Alles wat u moet weten over de laatste editor van WordPress
Gutenberg is een nieuwe editor voor WordPress die dat helemaal zal doen vervang de huidige door TinyMCE gevoede editor. Het is een ambitieus project dat waarschijnlijk op veel manieren WordPress zal veranderen en dat zowel reguliere eindgebruikers als ontwikkelaars zou treffen, met name degenen die afhankelijk zijn van het bewerkerscherm voor het werken aan WordPress. Hier is hoe het eruit ziet.
Gutenberg introduceert ook een nieuw paradigma in WordPress genaamd “Blok”.
“Blok” is de abstracte term die wordt gebruikt om te beschrijven eenheden markup die zijn samengesteld uit de inhoud of lay-out van een webpagina. Het idee combineert concepten van wat we vandaag bereiken in WordPress shortcodes, aangepaste HTML en insluiten van ontdekkingen in een enkele consistente API en gebruikerservaring.
Het project opzetten
Wetende dat Gutenberg bovenop React is gebouwd, zijn sommige ontwikkelaars bezorgd dat het barrière is te hoog voor beginnende ontwikkelaars voor het ontwikkelen van Gutenberg.
Het instellen van React.js kan behoorlijk tijdrovend en verwarrend zijn als u er net mee bent begonnen. Je hebt op zijn minst JSX-transformator, Babel nodig, afhankelijk van je code heb je misschien een aantal Babel-plug-ins nodig, en een Bundler zoals Webpack, Rollup of Parcel.
gelukkig, sommige mensen binnen de WordPress-gemeenschap hebben een stapje verder gebracht en proberen de ontwikkeling van Gutenberg zo gemakkelijk mogelijk te maken voor iedereen om te volgen. Vandaag hebben we een tool die een Gutenberg-boilerplate zal genereren we kunnen meteen beginnen met het schrijven van code in plaats van zich te vervelen met de gereedschappen en de configuraties.
Maak een Guten Block
De create-Guten-block
is een initiatief van Ahmad Awais. Het is een zero-configuration toolkit (# 0CJS
) waarmee je het Gutenberg-blok kunt ontwikkelen met een aantal voorinstellingen voor moderne stacks, waaronder React, Webpack, ESNext, Babel, ESLint en Sass. Volg de instructies om aan de slag te gaan met Create Guten Block.
ES5 gebruiken (ECMAScript 5)
Gebruik al deze hulpmiddelen om een eenvoudig te maken “Hallo Wereld” blok lijkt misschien gewoon te veel. Als je je stapels graag wilt houden, kun je eigenlijk een Gutenberg-blok ontwikkelen met een gewoon goed 'ECMAScript 5 waar je misschien al bekend mee bent. Als je hebt WP-CLI 1.5.0 geïnstalleerd op uw computer, je kunt gewoon rennen ...
wp steigerblok[--Title = ] [--dashicon = ] [--category = ] [--theme] [--plugin = ] [--force]
… naar genereer de Gutenberg block boilerplate naar jouw plug-in of thema. Deze benadering is vooral zinvol voor bestaande plug-ins en thema's die u vóór het Gutenberg-tijdperk hebt ontwikkeld.
In plaats van een nieuwe plug-in te maken die geschikt is voor de Gutenberg-blokken, wil je misschien de blokken integreren met je plug-ins of met de thema's. En om deze tutorial gemakkelijk te volgen voor iedereen, we zullen ECMAScript 5 gebruiken met WP-CLI.
Een nieuw blok registreren
Gutenberg is momenteel ontwikkeld als een plug-in en zal worden samengevoegd met WordPress 5.0 wanneer het team voelt dat het klaar is. Dus, voor het moment, moet je het installeren vanuit de Plugins-pagina in wp-admin
. Nadat u het hebt geïnstalleerd en geactiveerd, voert u de volgende opdracht uit in de terminal of de opdrachtprompt als u op een Windows-computer werkt.
wp steigerblokserie --title = "HTML5 Series" --thema
Deze opdracht genereert een blok naar het momenteel actieve thema. Ons blok zal bestaan uit de volgende bestanden:
. EEN¢Â ?? â ?? â ?? â ?? â ??  ?? serie â ?? Â'Ã' Ã' â ?? â ?? â ?? â ?? â ??  ?? block.js â ?? Â'Ã' Ã' â ?? â ?? â ?? â ?? â ??  ?? editor.css â ?? Â'Ã' Ã' â ?? â ?? â ?? â ?? â ??  ?? style.css â ?? â ?? â ?? â ?? â ??  ?? series.php
Laten we het hoofdbestand van onze blokken laden in de functions.php
van ons thema:
if (function_exists ('register_block_type')) vereist get_template_directory (). '/Blocks/series.php';
Merk op dat we het laden van bestanden insluiten met een voorwaardelijke. Dit zorgt ervoor compatibiliteit met vorige WordPress-versie die ons blok alleen wordt geladen wanneer Gutenberg aanwezig is. Ons blok zou nu beschikbaar moeten zijn binnen de Gutenberg-interface.
Zo ziet het eruit als we het blok invoegen.
Gutenberg API's
Gutenberg introduceert twee sets API's om een nieuw blok te registreren. Als we naar de series.php
, we zullen de volgende code vinden die ons nieuwe blok registreert. Het ook laadt de stylesheet en JavaScripts op de front-end en de editor.
register_block_type ('twentyseventeen / series', array ('editor_script' => 'series-block-editor', 'editor_style' => 'series-block-editor', 'style' => 'series-block',));
Zoals we hierboven kunnen zien, is ons blok genoemd twentyseventeen / series
, de Block-naam moet uniek zijn en namespaced om een botsing met de andere Blocks veroorzaakt door de andere plug-ins te voorkomen.
voorts, Gutenberg biedt een reeks nieuwe JavaScript API's om te communiceren met de “Blok” interface in de editor. Omdat de API vrij veel voorkomt, zullen we ons concentreren op een aantal details waarvan ik denk dat je die moet kennen om een eenvoudig maar functionerend Gutenberg-blok te krijgen.
wp.blocks.registerBlockType
Eerst zullen we kijken naar wp.blocks.registerBlockType
. Deze functie is gewend aan registreer een nieuw “Blok” naar de Gutenberg-redacteur. Het vereist twee argumenten. Het eerste argument is de Block-naam die de naam moet volgen die is geregistreerd in de register_block_type
functie aan de PHP-kant. Het tweede argument is een Object dat de Block-eigenschappen definieert zoals titel, categorie en een aantal functies om de Block-interface weer te geven.
var registerBlockType = wp.blocks.registerBlockType; registerBlockType ('twentyseventeen / series', title: __ ('HTML5 Series'), categorie: 'widgets', keywords: ['html'], edit: function (props) , save: function (props) );
wp.element.createElement
Met deze functie kunt u het element binnen de “Blok” in de berichteditor. De wp.element.createElement
functie is in feite een abstractie van de React createElement ()
functie accepteert dus dezelfde reeks argumenten. Het eerste argument neemt het type van het element, bijvoorbeeld een alinea, een span
, of a div
zoals hieronder getoond:
wp.element.createElement ( 'div');
We kunnen alias de functie in een variabele dus het is korter om te schrijven. Bijvoorbeeld:
var el = wp.element.createElement; el ( 'div');
als jij geef de voorkeur aan het gebruik van de nieuwe ES6-syntaxis, je kunt het ook op deze manier doen:
const createElement: el = wp.element; el ( 'div');
We kunnen ook voeg de elementattributen toe zoals de klasse
naam of ID kaart
op de tweede parameter als volgt:
var el = wp.element.createElement; el ('div', 'class': 'series-html5', 'id': 'series-html-post-id-001');
De div
die we hebben gemaakt, zou zonder de inhoud niet logisch zijn. We kunnen voeg de inhoud toe aan het argument van de derde parameter:
var el = wp.element.createElement; el ('p', 'class': 'series-html5', 'id': 'series-html-post-id-001', 'Dit artikel is onderdeel van onze' HTML5 / CSS3 Tutorials-serie '- gewijd om u te helpen een betere ontwerper en / of ontwikkelaar te maken Klik hier om meer artikelen uit dezelfde serie te zien ');
wp.components
De wp.components
bevatten een verzameling van, zoals de naam al aangeeft, de Gutenberg-componenten. Deze componenten zijn technisch gezien aangepaste React-componenten, waaronder de Button, Popover, Spinner, Tooltip en een aantal anderen. We kunnen hergebruik deze componenten in ons eigen blok. In het volgende voorbeeld voegen we een knopcomponent toe.
var Button = wp.components.Button; el (Knop, 'klasse': 'downloadknop',, 'Download');
attributen
De attributen zijn de manier om de gegevens op te slaan in ons blok, deze gegevens kunnen zijn zoals de inhoud, de kleuren, de uitlijningen, de URL, enz. We kunnen de kenmerken van de eigenschappen doorgeven aan de Bewerk()
functie, als volgt:
edit: function (props) var content = props.attributes.seriesContent; return el ('div', 'class': 'series-html5', 'id': 'series-html-post-id-001', inhoud);
Om de Attributen bij te werken, gebruiken we de setAttributes ()
functie. Meestal zouden we de inhoud van bepaalde acties wijzigen, bijvoorbeeld wanneer op een knop wordt geklikt, een invoer is gevuld, een optie is geselecteerd, enzovoort. In het volgende voorbeeld gebruiken we deze om een terugvallen inhoud van ons blok voor het geval er iets onverwachts met ons is gebeurd seriesContent
Attribuut.
edit: functie (rekwisieten) if (typeof props.attributes.seriesContent === 'undefined' ||! props.attributes.seriesContent) props.setAttribute (seriesContent: 'Hallo wereld! Hier is de terugval-inhoud.' ) var content = props.attributes.seriesContent; return [el ('div', 'class': 'series-html5', 'id': 'series-html-post-id-001', content),];
Het blok opslaan
De opslaan()
function werkt op dezelfde manier als de Bewerk()
, behalve dat het de inhoud van ons blok definieert om op te slaan in de postdatabase. Het opslaan van de Block-inhoud is vrij eenvoudig, zoals we hieronder kunnen zien:
save: function (props) if (! props ||! props.attributes.seriesContent) return; var content = props.attributes.seriesContent; return [el ('div', 'class': 'series-html5', 'id': 'series-html-post-id-001', content),];
Wat is het volgende?
Gutenberg zal het WordPress-ecosysteem ten goede veranderen (of mogelijk slechter). Het stelt ontwikkelaars in staat om een nieuwe manier aannemen om WordPress-plug-ins en -thema's te ontwikkelen. Gutenberg is slechts een begin. Binnenkort de “Blok” paradigma zal worden uitgebreid naar andere gebieden van WordPress, zoals de Settings API's en de Widgets.
JavaScript diep leren; het is de enige manier om in Gutenberg te komen en relevant te blijven voor de toekomst in de WordPress-industrie. Als je al bekend bent met de basisbeginselen van JavaScript, de eigenaardigheden, de functies, de hulpmiddelen, de goederen en de slechte dingen, weet ik zeker dat je op de hoogte bent van Gutenberg.
Zoals gezegd, biedt Gutenberg een overvloed aan API's, genoeg om bijna alles voor uw Block te doen. U kunt kiezen of codeer je Block met een gewoon oud JavaScript, JavaScript met ES6-syntaxis, React of zelfs Vue.
Ideeën en inspiraties
Ik heb een heel (heel) eenvoudig Gutenberg-blok gemaakt dat je kunt vinden in de repository van ons Github-account. Verder heb ik ook een aantal repositories samengesteld van waaruit je inspiratie kunt opdoen voor het bouwen van een complexer Block.
- Gutenblocks - Een verzameling blokken van Mathieu Viet geschreven in JavaScript met ES5 Syntax
- Jetpack Gutenblocks Project - een verzameling blokken gebundeld in Jetpack
- Een lijst met voorbeelden van implementatie van Gutenberg, inclusief met Vue.js
Verdere referentie
- Gutenberg Official Repository
- Gutenberg Handbook