Блог

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:

  1. 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.
  2. 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.
  3. 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.
  4. 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. registerBlockType funkcija 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.
  • 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 save funkciju 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_style i enqueue_block_script_handle za 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, koristite block.json datoteku 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_settings za 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_callback funkcije 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_callback generiš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 edit i save funkcije možda moraju da obrađuju različite scenarije. edit funkcija je za interaktivno iskustvo uređivača, dok je save funkcija za statički HTML izlaz. Ponekad vam može biti potreban zaseban render_callback za 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.

Sources (5)