Gutenberg is een gloednieuwe bewerkingsinterface die de manier waarop mensen WordPress gebruiken zal veranderen. Ben je klaar voor die verandering? Als u een plugin-ontwikkelaar bent, moet u uw eigen plug-ins voor Gutenberg voorbereiden.
In het geval dat je nog niet van Gutenberg hebt gehoord, is het een nieuwe WordPress-editor die de manier waarop je inhoud schrijft, zal veranderen. Onder Gutenberg, ingesteld om onderdeel te worden van WordPress core in versie 5, zal elk element in je inhoud een blok zijn (van type alinea, afbeelding, blockquote, kop, enzovoort).
Zelfs metaboxen zullen niet hetzelfde zijn.
Eenvoudige metaboxen zouden uit de doos met Gutenberg moeten werken, hoewel ze anders worden weergegeven. Als u echter complexe metaboxen heeft zoals die in de Yoast SEO-plug-in, moet u deze testen tegen Gutenberg en misschien een nieuwe maken voor Gutenberg..
Dus welke plug-ins moeten worden bijgewerkt voor Gutenberg? Plug-ins met:
Er zijn twee benaderingen die we als plugin-ontwikkelaars kunnen gebruiken: ondersteuning Gutenberg of onbruikbaar maken Gutenberg. Ondersteunen van Gutenberg zou betekenen dat we extra inspanningen zullen leveren om onze code te refactoren (misschien zelfs een paar te dupliceren), zodat onze plugin-gebruikers er geen moeite mee zullen hebben om het te gebruiken.
Als we besluiten Gutenberg niet te steunen, moeten we Gutenberg uitschakelen. We kunnen Gutenberg volledig uitschakelen of alleen waar onze plug-in wordt gebruikt. In deze sectie neem ik mijn eigen plugin "Simple Giveaways" die een aangepast berichttype en ook metaboxen heeft.
Dit is iets dat ik niet zou aanraden om te doen vanuit je plug-in. In plaats daarvan wilt u uw plug-in-gebruikers op de hoogte brengen met een beheerdersverklaring dat uw plug-in niet met Gutenberg werkt, zodat deze terug kunnen gaan naar de Classic Editor.
Terugzetten kan gedaan worden door de plug-in Classic Editor te installeren. Of u kunt een nieuwe instelling voor uw plug-in maken en dit doen om het uit te schakelen:
Dit filter is te vinden in de functie
gutenberg_can_edit_post_type
die wordt gebruikt om te controleren of Gutenberg op dat specifieke berichttype kan worden geladen. Als we altijd terugkerenvals
, dan betekent het dat we Gutenberg helemaal niet zullen steunen.Gutenberg per berichttype uitschakelen
Als uw plug-in een aangepast berichttype heeft, wilt u Gutenberg mogelijk uitschakelen voor dat specifieke berichttype. Om Gutenberg uit te schakelen voor uw aangepaste berichttype, kunt u gewoon uw configuratie van het posttype wijzigen.
Redacteur Ondersteuning
Gutenberg wordt niet geladen als je berichttype de editor niet ondersteunt. Dit is geschikt als je aangepaste berichttype de editor niet nodig heeft.
__ ('Simple Giveaways', 'giveasap'), 'labels' => $ labels, 'supports' => array ('title', // 'editor', Gutenberg 'thumbnail' uitschakelen,), 'hierarchical' => false, // ...); register_post_type ('giveasap', $ args);REST API-ondersteuning
Misschien hebt u de editor nodig, maar hebt u deze niet nodig in de REST-API? Gutenberg wordt niet geladen als u de REST API niet ondersteunt. Net als bij het bovenstaande voorbeeld doen we dat in de configuratie van het posttype.
__ ('Simple Giveaways', 'giveasap'), // ... 'show_in_rest' => false, // Gutenberg uitschakelen // ...); register_post_type ('giveasap', $ args);Door de parameter in te stellen
show_in_rest
naarvals
, we zullen Gutenberg voor dat berichttype uitschakelen.Ondersteuning bij berichttype
We kunnen het eerder genoemde filter gebruiken om Gutenberg alleen uit te schakelen voor ons aangepaste berichttype.
Met deze code controleren we of we ons aangepaste berichttype gebruiken. Als we dat zijn, retourneer dan gewoon false. Dit heeft geen invloed op andere berichttypen.
Gutenberg uitschakelen met Metaboxen
Als u complexe metaboxen heeft, zou het misschien te lang duren voordat u een versie van uw plug-in zou maken die Gutenberg zou kunnen ondersteunen. Als dat het geval is, kun je Gutenberg uitschakelen totdat je iets hebt dat werkt met Gutenberg.
Om Gutenberg uit te schakelen met uw metaboxen, moet u ze definiëren als niet compatibel.
false,));Als u wilt leren hoe u Gutenberg kunt ondersteunen met complexe metaboxen, moet u leren hoe u ze kunt converteren naar een blok en hoe u ze kunt opslaan. Zorg ervoor dat u daarvoor het WordPress Gutenberg-handboek raadpleegt.
Hoe Gutenberg te ondersteunen
Een betere optie dan Gutenberg uit te schakelen is om het te ondersteunen!
Aangezien metaboxen waarschijnlijk uit de doos zullen werken, zult u hier niet veel te doen hebben (tenzij ze geavanceerd zijn, zoals we eerder hebben geleerd). Als je Gutenberg steunt, werk je vooral aan het maken van nieuwe blokken voor je shortcodes en zelfs widgets.
Shortcodes zullen ook uit de doos werken. Maar om een betere gebruikerservaring te bieden, moet u waarschijnlijk blokken voor hen maken.
U kunt statische en dynamische blokken maken. Statische blokken worden volledig in JavaScript geschreven en de uitgevoerde HTML wordt in de inhoud opgeslagen.
Dynamische blokken zijn een beetje anders. Je zult ook het JavaScript-gedeelte moeten maken, zodat het werkt met de Gutenberg-editor. Maar u definieert ook een PHP-functie die wordt aangeroepen om deze weer te geven bij het weergeven van die inhoud op de voorkant van uw site.
Laten we, om statische en dynamische blokken te begrijpen, een eenvoudig voorbeeld bekijken - een eenvoudig waarschuwingsblok - en het op beide manieren implementeren.
Een blok registreren
Om een blok te registreren, moeten we eerst het definiëren in PHP en vervolgens in JavaScript.
'guten-tuts',)); // Ons dynamische blok. register_block_type ('guten-tuts / alertdynamic', array ('render_callback' => 'guten_tuts_dynamic_alert')); add_action ('init', 'guten_tuts_block');Wanneer u een script registreert, moeten we hier de afhankelijkheden definiëren. De
wp-block
enwp-element
afhankelijkheden zijn degenen die we nodig hebben bij het maken van blokken.Ik zal niet ingaan op een gedetailleerd overzicht van blokken of de API als geheel. Om dit meer te begrijpen, zou u het handboek van Gutenberg moeten lezen.
JavaScript-blokbestand
Het begin van ons JavaScript-bestand block.js zal dit hebben:
var el = wp.element.createElement, __ = wp.i18n .__, registerBlockType = wp.blocks.registerBlockType, RichText = wp.blocks.RichText, blockStyle = backgroundColor: '# 900', color: '#fff', opvulling: '20px';Statisch blok
Laten we nu ons statische blok definiëren. Aangezien onze melding alleen uit tekst bestaat, hebben we één kenmerk nodig:
tekst
. In onzeBewerk
functie (gebruikt in de Editor), zullen we eenRijke text
blok. Met dit blok kunnen we de tekst invoegen, stijlen toevoegen, enzovoort.De definitie van ons kenmerk
tekst
zal de Gutenberg vertellen om de tekst in dediv
. We vertellen Gutenberg ook dat dit een reeks van alle onderliggende elementen zal zijn. Gewoon bijvoorbeeld ditzou omzetten in een array van drie elementen: "em-tekst", "andere tekst", en "vetgedrukte tekst" samen met hun structuur zoals
em-tekst andere tekst vetgedrukte tekstem
enstoutmoedig
.De conversie van deze attributen gebeurt in de uitvoer van de
opslaan
methode.registerBlockType ('guten-tuts / alert', title: __ ('Guten Tuts - Alert'), pictogram: 'megaphone', categorie: 'layout', attributen: text: type: 'array', bron: ' children ', selector:' div ',, edit: function (props) var content = props.attributes.text; function onChangeText (newText) props.setAttributes (text: newText); return el (RichText , tagName: 'div', className: props.className, onChange: onChangeText, value: content, isSelected: props.isSelected, style: blockStyle);, save: function (props) var text = props.attributes. text; return el ('div', style: blockStyle, className: props.className, text);,);Dynamisch blok
Het dynamische blok heeft de
Bewerk
methode, maar deopslaan
methode zal terugkerennul
. We hebben het niet nodigopslaan
methode hier omdat we een PHP-callback-functie definiëren om het dynamische blok aan de voorzijde weer te geven.We hebben een terugroepactie geregistreerd
guten_tuts_dynamic_alert
voor:'guten_tuts_dynamic_alert')); // ...Deze callback zal ook een parameter ontvangen
$ attributen
. Dit is een array van alle geregistreerde kenmerken. Het gedrag lijkt sterk op het registreren van een shortcode.De functie
guten_tuts_dynamic_alert
ziet er zo uit:De uitvoer is slechts een
div
element met wat tekst.Voor zover ik kan nagaan, kunnen we de RichText niet gebruiken voor dynamische blokken omdat de kenmerken niet worden bijgewerkt. Als ik het mis heb, laat het me dan weten in de comments!
We zullen een regulier gebruiken
invoer
om de tekst van de waarschuwing in te voeren. Omdat we geen a hebbenopslaan
methode hier, ik heb het attribuut gedefinieerdtekst
als een eenvoudige string.registerBlockType ('guten-tuts / alertdynamic', title: __ ('Guten Tuts - Dynamic Alert'), pictogram: 'megaphone', categorie: 'layout', attributen: text: type: 'string', selector: 'div',,, bewerken: function (props) var content = props.attributes.text; blockStyle ['width'] = '100%'; function onChangeText (e) var newText = e.target.value ; props.setAttributes (text: newText); return el ('input', className: props.className + 'widefat', onChange: onChangeText, value: content, isSelected: props.isSelected, style: blockStyle) ;, opslaan: functie (rekwisieten) return null;,);Je zult een gewone zien
invoer
die een achtergrondkleur en een andere stijl heeft dan deRijke text
blok. Natuurlijk kun je dat veranderen en dezelfde stijlen nabootsen.Omdat onze PHP-gegenereerde waarschuwing een andere achtergrondkleur heeft dan de kleur die is gedefinieerd in onze JavaScript-code, zien we ook het verschil aan de voorzijde.
Conclusie
De voorbereiding van uw plug-in voor Gutenberg kan veel werk zijn. Maar aangezien Gutenberg net zo uitbreidbaar is als de rest van WordPress, heb je veel flexibiliteit om de functies van je plug-in in Gutenberg te ondersteunen.
Ga vandaag nog aan de slag door Gutenberg te installeren en te testen met uw plug-in.