✅ WEB- och WordPress -nyheter, teman, plugins. Här delar vi tips och bästa webbplatslösningar.

Så här kontrollerar du Gutenberg-block för inlägg i WordPress: Inaktivera block och blockmallar

10

WordPress nya redaktör Gutenberg ger författaren stor flexibilitet att skapa rikt innehåll. Men i vissa fall kan du behöva begränsa detta lite, antingen som webbansvarig för webbplatsen eller som temautvecklare. I det här inlägget ska vi titta på hur vi kan tillhandahålla blockbegränsningar i Gutenberg med PHP.

Det finns inbyggd funktionalitet för att sätta vissa begränsningar i block som många inte är bekanta med ännu. Detta kan vara användbart när du behöver vissa inlägg för att följa samma design eller innehåll, eller om du vill hjälpa icke-tekniska författare att inte bli överväldigade av antalet block i Gutenberg. Ett annat exempel inkluderar att automatiskt lägga till nödvändiga annonsblock (om du har ett annonsplugin) mellan texter i inlägg. Du kan antingen tvinga fram detta eller använda dessa tekniker för att hjälpa författarna att komma ihåg att lägga till dem.

I det här inlägget ska vi titta på två sätt du kan styra block i WordPress Gutenberg. Ett sätt är att begränsa vilken typ av block som kan läggas till. Ta med andra ord bort vissa blocktyper som du inte vill ha tillgängliga. Vi kan göra detta specifikt per posttyp eller globalt. Det andra sättet är att använda blockmallar. WordPress erbjuder dig att bestämma en uppsättning fördefinierade block när du skapar ett nytt inlägg. Detta görs per posttyp. Med blockmallar kan du erbjuda författaren de inledande blocken för att hjälpa dem på vägen att skriva inlägget, eller så kan du låsa blocken på plats så att författaren inte kan ändra sin position eller lägga till nya.

Du kan göra båda dessa med antingen PHP eller Javascript. Den här guiden kommer att täcka PHP-sättet.

Ta bort blocktyper

Svartlista

Det finns ett PHP-filter i WordPress som heter allowed_block_types. Detta filter ger dig två parametrar; en uppsättning av alla block och postobjektet. Allt vi behöver göra är att hantera arrayen innan vi returnerar den. Och eftersom vi även får postobjektet i filtret kan vi även lägga till regler efter inläggstyp eller annan postmetainformation.

Arrayen av block består av strängar av blockets namnavgränsade namn. Alla block i WordPress kräver ett namnområde med prefix före blocknamnet. För WordPress-kärnblock är namnutrymmet " core/" och för WordPress-inbäddningsblock är namnutrymmet " core-embed/". Till exempel har rubrikblocket namnet " core/heading" i den här arrayen. Jag skapade en fullständig översikt över alla blocktypers namn i mitt inlägg om Hur för att komma åt och analysera ett inläggs block.

Här är ett snabbt exempel på hur du använder filtret för att ta bort alla block utom stycket. Detta kommer att gälla för alla inläggstyper.

add_filter('allowed_block_types', function($block_types, $post) { return ['core/paragraph']; }, 10, 2);

Om du lägger till den här koden i ditt tema- functions.phpeller plugin-fil, blir resultatet att Gutenberg helt förbjuder andra block än stycke. Du kommer inte ens att kunna se några andra block, inte heller kan du försöka locka ut dem genom att skriva " /" i inlägget (blockgenväg) eller söka efter dem.

Vi kan definiera de block vi vill behålla eller ta bort per posttyp. Vi kontrollerar helt enkelt egenskapen post_typepå postobjektet. I kodexemplet nedan definierar vi en ny array av blocken vi vill tillåta och lägger till denna regel endast för den anpassade posttypen ‘ book‘.

Med ovanstående kod får du alla block när du redigerar inlägg och sidor, men när du redigerar den anpassade inläggstypen ‘ book‘ kan du bara lägga till stycken, rubriker och enstaka bilder.

Använd din fantasi för att lägga till dina egna regler. Eftersom vi har postobjektet kan vi komma åt det mesta av informationen vi skulle behöva. Du kanske behöver begränsa blockvalen med ett postmetavärde? Till exempel efter vald sidmall, vald inläggskategori eller något annat.

Vitlista

Såvitt jag kan se kan du bara vitlista (bestämma vilka som ska tas bort, i motsats till att bestämma vilka som ska behållas) block genom att avregistrera blocken vid en viss tidpunkt. Och du måste göra med det med Javascript och inte PHP.

Jag kommer inte att gå in på detaljer om detta, men du måste ställa en Javascript-fil i kö som laddas in initeller enqueue_block_editor_assetshaka, med wp-dom-readyoch wp-blockssom beroende. Inuti skriptet kan du ställa in en variabel för den eller de du vill ta bort, enligt samma regler för namnrymder och blocknamn ovan. Och för varje blocknamn anropar du funktionen unregisterBlockType()från wp.blockspaketet. Vanligtvis skulle du behöva göra detta i en funktion på wp.domReady()för att säkerställa att skriptets laddningsordning är korrekt.

Något som det här:

var removeBlocks = [ 'core/paragraph', 'core/heading', 'core/image' ];   wp.domReady(function() { removeBlocks.forEach(function(blockName) { wp.blocks.unregisterBlockType(blockName); }); });

Att ta bort blocktyper är ett sätt att kontrollera block i Gutenberg. Låt oss titta på det andra, kanske roligare sättet att styra block: blockmallar.

Blockera mallar

Ett annat sätt att kontrollera Gutenberg-block i WordPress är att använda blockmallar. WordPress har funktionalitet som låter dig fylla i nya inlägg med en uppsättning fördefinierade block. Detta kan vara användbart för att hjälpa författare genom att visa dem ett förslag på blockstruktur. Du kan också välja att låsa dessa förifyllda block, så att författarna inte kan ordna om eller lägga till andra block. Detta är användbart när du vill att inlägg ska ha en specifik struktur och design – till exempel se till att alla inlägg av den inläggstypen har sin information strukturerad på exakt samma sätt.

Vi kan lägga till blockmallar med en ny parameter till [register_post_type](https://developer.wordpress.org/reference/functions/register_post_type/)()funktionen som används för att registrera anpassade inläggstyper (obs: den nya parametern har ännu inte lagts till i dokumentationen). Du kan också lägga till eller justera parametrarna på befintliga inläggstyper som inlägg och sidor – se nedan om hur.

Den nya parametern till register_post_type()är ‘ template‘. Som värde för ‘ template‘ måste du tillhandahålla en rad block. Varje block måste också vara en array. Som ett minimum måste du tillhandahålla det första arrayelementet; blocknamnet (t.ex. core/paragraph). Du kan valfritt lägga till ett andra arrayelement för attribut och ett tredje arrayelement för kapslade block (t.ex. Cover, Columns-block). Det blir tydligare när du ser koden.

Låt oss börja enkelt. Anta att vi har ett register_post_type()funktionsanrop för att registrera en anpassad posttyp ‘ book‘. Vi vill förfylla alla nya inlägg av denna typ av inlägg med ett styckeblock med en platshållare som talar om för författaren vad han eller hon ska skriva.

Observera att attributmatrisen (med ‘platshållare’ i den) är valfri. Nu, med denna "mall"-parameter när vi skapar nya inlägg, kommer den att skapas med ett styckeblock som har platshållaren "Skriv ditt intro här…".

Låt oss titta på ett mer komplicerat exempel: kapslade block. Säg att vi vill lägga till ett omslagsblock som har ett rubrikblock, stycke och en knapp inuti, mittjusterat. Titeln och stycket kommer att ha en platshållare:

Bilden nedan visar vad vi kommer att få när vi skapar nya bokinlägg. Det ser mindre skrämmande ut än en tom duk, eller hur?

Så här kontrollerar du Gutenberg-block för inlägg i WordPress: Inaktivera block och blockmallar

Tänk på att attributen är olika för varje blocktyp och kan också skilja sig åt i din inställning. I kodexemplet ovan lägger jag till två attribut till Cover-blocket; blockjustering till "Full Width" och överläggsfärg till en fördefinierad färg från en anpassad färgpalett.

Blockjusteringarna "Wide Width" och "Full Width" måste stödjas specifikt i ditt tema. Jag har ett inlägg som förklarar hur du lägger till stöd i ditt tema för ytterligare blockjusteringar om du inte är bekant med detta. För det andra är mitt tema att tillhandahålla en anpassad Gutenberg-färgpalett där en av palettfärgerna heter "blå-profil". Detta kommer förmodligen inte att finnas i din kod. Ovanstående länk förklarar också detta om du inte är bekant med anpassad Gutenberg-palett också.

Anledningen till att jag väljer att tillhandahålla en överlagringsfärg som attribut är på grund av hur Cover-blocket beter sig. När du skapar ett omslagsblock börjar det med att du uppmanas att välja mellan att ställa in en bakgrundsbild eller välja en bakgrundsfärg. Tills författaren aktivt väljer en av dessa, döljer omslagsblocket allt innehåll det har (rubriken, stycket och knappen vi lade till)! De kommer bara plötsligt att dyka upp efter att ha valt en bild eller färg. Därför, för att undvika förvirring, har jag förvalt en bakgrundsfärg så att författaren kan se alla block inuti direkt. Färgen kan alltid ändras i Inspektören (sidofältet) ändå.

Låsning av blockmallen

Med den medföljande blockmallen kan författaren ordna om och ta bort alla förifyllda block, samt lägga till nya block var som helst. Om du vill undvika detta finns en annan parameter till register_post_type(): ‘ template_lock‘.

Parametern ‘ template_lock‘ accepterar två värden; ‘ all‘ eller ‘ insert‘.

Om du ställer in ‘ template_lock‘ till ‘ all‘ blockeras författarna helt från att ordna om, ta bort eller lägga till nya block i din blockmall. De kan bara redigera innehållet och inställningarna för de block som definieras som blockmall. Detta är användbart i fall där du vill att alla inläggstyper ska bestå av samma block i samma ordning – varken mer eller mindre.

Genom att använda ‘ insert‘ för ‘ template_lock‘ kan författarna ordna om blocken i blockmallen. Men författarna kan fortfarande inte lägga till nya block eller ta bort något av blocken.

Så här skulle du helt låsa blockmallen för den anpassade inläggstypen ‘ book‘:

Att använda en låst blockmall i Gutenberg kommer att se ut som nedan. Lägg märke till att åtgärdsikonerna för att ordna om block saknas och att ta bort blocklänkar i menyn saknas. Det finns heller inga åtgärdsikoner för att lägga till nya block (det lilla "+") någonstans.

Så här kontrollerar du Gutenberg-block för inlägg i WordPress: Inaktivera block och blockmallar

Justera blockmallar för befintliga inläggstyper

Om du vill använda blockmallar på inlägg eller sidor kan du göra detta också. Koppla in en funktion initoch använd [get_post_type_object](https://developer.wordpress.org/reference/functions/get_post_type_object/)(). Ange den inläggstyp du vill ha som parameter (antingen ‘ post‘ eller ‘ page‘). Detta returnerar ett objekt som du kan tilldela egenskapen ‘ template‘ och ‘ template_lock‘ till.

Det här är ett exempel på att lägga till samma blockmall och låsegenskap som ovan på sidor:

Slutsats

I det här inlägget har vi lärt oss hur man uppnår större kontroll över block i WordPress Gutenberg editor. Det finns många fördelar med att göra detta, särskilt i kombination med anpassade inläggstyper som måste följa en specifik struktur. Att använda teknikerna ovan hjälper dig att effektivisera din process mer, både som webbansvarig (hjälper människor att skriva bättre inlägg) och som temautvecklare (säkerställer gemensam design). Låsta blockmallar kan vara en annan lösning än anpassade inläggsmallar och inläggsmeta.

Att anpassa blockmallar är fortfarande en ganska dold funktion i Gutenberg för tillfället. Men jag förväntar mig att det kommer att förändras när Gutenberg utvecklas och får en mer bekant plats inom WordPress.

Inspelningskälla: awhitepixel.com

Denna webbplats använder cookies för att förbättra din upplevelse. Vi antar att du är ok med detta, men du kan välja bort det om du vill. Jag accepterar Fler detaljer