Блог
Dalje od osnovnih blokova: Kreiranje prilagođenih Gutenberg blokova za poboljšanu funkcionalnost WordPressa
Otključajte pun potencijal WordPress uređivača blokova učenjem kako da kreirate sopstvene prilagođene Gutenberg blokove. Ovaj vodič pruža praktične korake, primere koda i najbolje prakse za proširenje funkcionalnosti i dizajna vaše veb lokacije.

Sažetak
WordPress uređivač blokova, Gutenberg, revolucionisao je kreiranje sadržaja svojim modularnim sistemom blokova. Dok osnovni blokovi nude svestranost, prilagođeni blokovi su neophodni za jedinstvene funkcionalnosti i brendiranje. Ovaj članak vas vodi kroz proces razvoja sopstvenih Gutenberg blokova, pokrivajući suštinske koncepte kao što su registracija blokova, atributi i prikazivanje. Istražićemo praktične primere, razgovarati o najboljim praksama za organizaciju koda i bezbednost, i naglasiti kako se prilagođeni blokovi integrišu sa WordPress arhitekturom i kukama. Ovladavanjem razvojem prilagođenih blokova, možete značajno poboljšati mogućnosti vaše WordPress veb lokacije i korisničko iskustvo.
Dalje od osnovnih blokova: Kreiranje prilagođenih Gutenberg blokova za poboljšanu funkcionalnost WordPressa
Pojava Gutenberg uređivača blokova u WordPressu 5.0 označila je značajan pomak u načinu na koji se sadržaj kreira i upravlja. Odstupajući od linearnog pristupa klasičnog uređivača, Gutenberg je uveo modularni sistem gde se sadržaj gradi korišćenjem diskretnih "blokova". Dok podrazumevani set blokova pokriva širok spektar uobičajenih potreba, mnoge veb lokacije zahtevaju jedinstvene funkcionalnosti, specifične dizajnerske elemente ili integracije koje prevazilaze ono što je lako dostupno. Tu na scenu stupa razvoj prilagođenih Gutenberg blokova, nudeći moćan način za proširenje WordPress mogućnosti i precizno prilagođavanje vašim projektnim zahtevima.
Razvoj prilagođenih blokova vam omogućava da kreirate komponente za višekratnu upotrebu koje pojednostavljuju kreiranje sadržaja za urednike, obezbeđuju doslednost brenda i implementiraju složene funkcije direktno u interfejs uređivača. Ovaj vodič će vas provesti kroz proces, od razumevanja osnova do implementacije najboljih praksi za robusne i održive prilagođene blokove.
Razumevanje arhitekture uređivača blokova
Pre nego što zaronite u razvoj, ključno je shvatiti kako Gutenberg i njegovi blokovi funkcionišu unutar WordPress ekosistema. Sam WordPress je izgrađen na modularnoj PHP i MySQL arhitekturi. Teme kontrolišu prezentaciju, a dodaci dodaju funkcionalnost. Gutenberg, kao osnovna WordPress funkcija, besprekorno se integriše u ovu strukturu. Koristi JavaScript (uglavnom React) za dinamičko iskustvo uređivanja u pregledaču, dok PHP obrađuje registraciju i prikazivanje na strani servera.
Prilagođeni blokovi su u suštini JavaScript komponente koje se registruju kod WordPressa. Kada korisnik doda prilagođeni blok u objavu ili stranicu, Gutenberg skladišti njegovu konfiguraciju (atribute) u bazu podataka. Prilikom prikazivanja objave na front-endu, WordPress koristi PHP za tumačenje ove konfiguracije i generisanje odgovarajućeg HTML-a, često koristeći istu JavaScript komponentu ili zaseban PHP šablon.
Ključne komponente prilagođenog bloka
Svaki prilagođeni Gutenberg blok, u svojoj suštini, sastoji se od nekoliko ključnih delova:
- Registracija: Ovo je proces obaveštavanja WordPressa o vašem novom bloku. Uključuje definisanje njegovog imena, naslova, ikone i drugih metapodataka. Ovo se primarno radi pomoću JavaScript funkcije
registerBlockType. - Atributi: Ovo su polja podataka povezana sa vašim blokom. Zamislite ih kao postavke ili svojstva koja korisnik može da izmeni za određenu instancu bloka (npr. tekstualni sadržaj, URL slike, izbor boje). Atributi se definišu u JavaScript registraciji bloka.
- Funkcija uređivanja (
Edit): Ova JavaScript funkcija definiše kako blok izgleda i ponaša se unutar Gutenberg uređivača. Tu gradite interaktivni korisnički interfejs koji će kreatori sadržaja koristiti za konfigurisanje bloka. - Funkcija čuvanja (
Save): Ova JavaScript funkcija definiše statički HTML kod koji će biti sačuvan u bazi podataka i prikazan na front-endu vaše veb lokacije. Trebalo bi da odražava trenutno stanje atributa bloka.
Korak po korak: Kreiranje vašeg prvog prilagođenog bloka
Napravimo jednostavan prilagođeni blok koji prikazuje "Poziv na akciju" (CTA) sa naslovom i dugmetom. Ovaj primer će se fokusirati na suštinske JavaScript aspekte za registraciju i uređivanje blokova, pretpostavljajući da je podešeno osnovno WordPress razvojno okruženje.
Preduslovi:
- Lokalno WordPress razvojno okruženje.
- Osnovno razumevanje JavaScript-a, React-a i PHP-a.
- Instaliran Node.js i npm (ili yarn) za kompajliranje resursa.
1. Podešavanje projekta:
Prilagođeni blokovi se obično razvijaju kao deo dodatka. Kreirajte novu datoteku dodatka (npr. my-custom-blocks/my-custom-blocks.php) i JavaScript datoteku za vaš blok (npr. src/index.js). Takođe će vam biti potreban proces izgradnje za kompajliranje vašeg JavaScript-a. Uobičajen pristup je korišćenje @wordpress/scripts koji pruža zgodan način za upravljanje kompajliranjem.
U korenskom direktorijumu vašeg dodatka, kreirajte package.json datoteku:
{
"name": "my-custom-blocks",
"version": "1.0.0",
"description": "A plugin for custom Gutenberg blocks.",
"main": "index.js",
"scripts": {
"build": "wp-scripts build",
"start": "wp-scripts start"
},
"keywords": ["wordpress", "gutenberg", "block"],
"author": "Your Name",
"license": "GPL-2.0-or-later",
"devDependencies": {
"@wordpress/scripts": "^26.0.0"
}
}
Instalirajte zavisnosti: npm install.
2. Registracija bloka (JavaScript):
U vašoj src/index.js datoteci, koristićete registerBlockType iz @wordpress/blocks paketa.
import { registerBlockType } from '@wordpress/blocks';
import { __ } from '@wordpress/i18n';
// Import components for the editor
import { Edit } from './edit';
import { Save } from './save';
registerBlockType( 'my-custom-blocks/cta', {
title: __( 'Call to Action', 'my-custom-blocks' ),
icon: 'megaphone',
category: 'widgets',
attributes: {
headline: {
type: 'string',
default: '',
},
buttonText: {
type: 'string',
default: 'Learn More',
},
buttonUrl: {
type: 'string',
default: '#',
},
},
edit: Edit,
save: Save,
} );
3. Definisanje interfejsa uređivača (src/edit.js):
Ova komponenta obrađuje kako blok izgleda i funkcioniše unutar uređivača.
import { __ } from '@wordpress/i18n';
import { useBlockProps, RichText, InspectorControls } from '@wordpress/block-editor';
import { PanelBody, TextControl } from '@wordpress/components';
export const Edit = ( { attributes, setAttributes } ) => {
const blockProps = useBlockProps();
const onChangeHeadline = ( newHeadline ) => {
setAttributes( { headline: newHeadline } );
};
const onChangeButtonText = ( newButtonText ) => {
setAttributes( { buttonText: newButtonText } );
};
const onChangeButtonUrl = ( newButtonUrl ) => {
setAttributes( { buttonUrl: newButtonUrl } );
};
return (
<>
<InspectorControls>
<PanelBody title={ __( 'Button Settings', 'my-custom-blocks' ) }>
<TextControl
label={ __( 'Button Text', 'my-custom-blocks' ) }
value={ attributes.buttonText }
onChange={ onChangeButtonText }
/>
<TextControl
label={ __( 'Button URL', 'my-custom-blocks' ) }
value={ attributes.buttonUrl }
onChange={ onChangeButtonUrl }
/>
</PanelBody>
</InspectorControls>
<div { ...blockProps }>
<RichText
tagName="h3"
placeholder={ __( 'Enter your headline here...', 'my-custom-blocks' ) }
value={ attributes.headline }
onChange={ onChangeHeadline }
allowedFormats={ [ 'core/bold', 'core/italic' ] }
/>
<a href={ attributes.buttonUrl } className="wp-element-button">
{ attributes.buttonText }
</a>
</div>
</>
);
};
4. Definisanje funkcije čuvanja (src/save.js):
Ova funkcija određuje HTML izlaz za front-end.
import { useBlockProps, RichText } from '@wordpress/block-editor';
export const Save = ( { attributes } ) => {
const blockProps = useBlockProps.save();
return (
<div { ...blockProps }>
<RichText.Content
tagName="h3"
value={ attributes.headline }
/>
<a href={ attributes.buttonUrl } className="wp-element-button">
{ attributes.buttonText }
</a>
</div>
);
};
5. Uključivanje skripta bloka (PHP):
U vašoj glavnoj datoteci dodatka (my-custom-blocks.php), morate registrovati i uključiti vaš kompajlirani JavaScript fajl.
<?php
/**
* Plugin Name: My Custom Blocks
* Description: Adds custom Gutenberg blocks.
* Version: 1.0
* Author: Your Name
*/
function my_custom_blocks_register_block() {
// Automatically loads the block.json file and enqueues the script.
register_block_type( __DIR__ . '/build' );
}
add_action( 'init', 'my_custom_blocks_register_block' );
?>
6. Izgradnja resursa:
Pokrenite npm run build u direktorijumu vašeg dodatka. Ovo će kompajlirati vaš JavaScript u build folder.
Sada aktivirajte dodatak u WordPressu. Trebalo bi da vidite vaš "Poziv na akciju" blok dostupan u uređivaču!
Najbolje prakse za razvoj prilagođenih blokova
Razvoj prilagođenih blokova prevazilazi samo njihovo funkcionalisanje. Pridržavanje najboljih praksi osigurava da su vaši blokovi bezbedni, efikasni, pristupačni i održivi.
- Imenovanje prostora (Namespacing): Uvek koristite jedinstveni prostor imena za vaš blok (npr.
my-custom-blocks/cta). Ovo sprečava sukobe sa drugim blokovima.registerBlockTypefunkcija upravlja ovim. - Organizacija koda: Neka vaš JavaScript i PHP kod budu čisti i dobro organizovani. Za složene blokove, razmotrite podelu vašeg JavaScript-a na manje, komponente za višekratnu upotrebu.
- Bezbednost:
- Sanitizacija: Prilikom čuvanja podataka u bazi podataka (posebno sadržaja generisanog od strane korisnika), uvek ih sanitizujte. WordPress pruža funkcije kao što su
sanitize_text_field,esc_url, itd. - Bekstvo (Escaping): Prilikom prikazivanja podataka u pregledaču, uvek ih bekujte kako biste sprečili napade unakrsnog skriptovanja (XSS). Koristite funkcije kao što su
esc_html,esc_attr,esc_url. - Nonces: Za sve AJAX zahteve ili podnošenja obrazaca povezane sa vašim blokom, koristite nonces da biste potvrdili da zahtev potiče iz legitimnog WordPress izvora.
- Sanitizacija: Prilikom čuvanja podataka u bazi podataka (posebno sadržaja generisanog od strane korisnika), uvek ih sanitizujte. WordPress pruža funkcije kao što su
- Internacionalizacija (i18n): Koristite
__()i_x()funkcije (iz@wordpress/i18n) za sve korisničke stringove u vašem JavaScript-u. Ovo čini vaš blok prevedivim. - Pristupačnost: Osigurajte da je vaš blok upotrebljiv za sve. Koristite semantički HTML, pružite ARIA atribute gde je potrebno i testirajte sa čitačima ekrana.
- Performanse:
- Odloženo učitavanje (Lazy Loading): Za blokove koji učitavaju teške resurse ili složene podatke, razmotrite implementaciju tehnika odloženog učitavanja.
- Efikasno prikazivanje: Optimizujte vašu
savefunkciju i bilo koje prikazivanje na strani servera da bude što efikasnije. - Uključivanje resursa: Uključite samo neophodne skripte i stilove za vaš blok. Koristite
enqueue_block_styleienqueue_block_script_handleza resurse specifične za blok.
- Modularnost i proširivost: Iskoristite WordPress kuke (akcije i filtere) unutar vašeg PHP-a kako biste omogućili drugim dodacima ili temama da izmene ponašanje ili izlaz vašeg bloka.
block.json: Za složenije blokove, koristiteblock.jsondatoteku da biste deklarisali metapodatke bloka, zavisnosti, stilove i rukovaoce skriptama. Ovo je moderan standard za razvoj blokova i pojednostavljuje upravljanje resursima.
Integracija sa WordPress arhitekturom
Prilagođeni blokovi nisu izolovani entiteti. Oni se duboko integrišu sa osnovnom arhitekturom WordPressa:
- Kuke (Hooks): Možete koristiti PHP akcije i filtere u vašem dodatku za modifikovanje registracije blokova, dodavanje prilagođenih stilova ili skripti uslovno, ili čak izmenu prikazanog izlaza osnovnih blokova. Na primer, možete koristiti filter
block_type_metadata_settingsza modifikovanje postavki registrovanog bloka. - Integracija sa temom: Teme zasnovane na blokovima i Full Site Editing (FSE) se u velikoj meri oslanjaju na blokove. Prilagođeni blokovi mogu biti dizajnirani da se besprekorno uklapaju u FSE šablone, omogućavajući korisnicima da grade cele veb lokacije koristeći dosledan radni tok zasnovan na blokovima.
- Interoperabilnost dodataka: Vaši prilagođeni blokovi mogu da komuniciraju sa drugim dodacima. Na primer, prilagođeni blok proizvoda može da povuče podatke iz dodatka za e-trgovinu, ili prilagođeni blok galerije može da se integriše sa specifičnim dodatkom za medijsku biblioteku.
Napredni koncepti i razmatranja
- Prikazivanje na strani servera (SSR): Za blokove koji zahtevaju dinamičke podatke ili složenu logiku koja se najbolje obrađuje na serveru, možete implementirati prikazivanje na strani servera. Ovo uključuje definisanje
render_callbackfunkcije u vašem PHP-u prilikom registracije bloka. - Dinamički blokovi: Blokovi koji koriste SSR se često nazivaju dinamičkim blokovima. Oni ne čuvaju statički HTML u bazu podataka; umesto toga, oni čuvaju samo svoje atribute, a
render_callbackgeneriše HTML pri svakom učitavanju stranice. - Stilovi blokova: Možete definisati prilagođene stilove za vaše blokove koje korisnici mogu da biraju iz uređivača.
- Varijacije blokova: Kreirajte varijacije osnovnog bloka da biste ponudili unapred konfigurisane verzije sa različitim podrazumevanim postavkama ili izgledom.
- Razlike između uređivača i front-enda: Imajte na umu da
editisavefunkcije možda moraju da obrađuju različite scenarije.editfunkcija je za interaktivno iskustvo uređivača, dok jesavefunkcija za statički HTML izlaz. Ponekad vam može biti potreban zasebanrender_callbackza dinamičko prikazivanje na front-endu.
Zaključak
Razvoj prilagođenih Gutenberg blokova je moćna veština koja otključava novi nivo prilagođavanja i funkcionalnosti za WordPress veb lokacije. Razumevanjem ključnih komponenti—registracija, atributi, funkcije uređivanja i čuvanja—i pridržavanjem najboljih praksi za bezbednost, performanse i pristupačnost, možete kreirati robusne, višekratne i korisnički prilagođene blokove. Bilo da gradite prilagođeni dodatak za klijenta ili poboljšavate sopstvenu veb lokaciju, ovladavanje prilagođenim blokovima značajno će unaprediti vaše WordPress razvojne sposobnosti, omogućavajući vam da pređete dalje od standardnih ponuda i kreirate zaista jedinstvena digitalna iskustva.