Blog

Iznad osnovnih blokova: Izrada prilagođenih Gutenberg blokova za poboljšanu funkcionalnost WordPressa

Otključajte puni potencijal WordPress uređivača blokova učenjem kako izraditi vlastite prilagođene Gutenberg blokove. Ovaj vodič pruža praktične korake, primjere koda i najbolje prakse za proširenje funkcionalnosti i dizajna vaše web-lokacije.

Sažetak

WordPress uređivač blokova, Gutenberg, revolucionirao je stvaranje sadržaja svojim modularnim sustavom blokova. Iako osnovni blokovi nude svestranost, prilagođeni blokovi su ključni za jedinstvene funkcionalnosti i brendiranje. Ovaj članak vodi vas kroz proces razvoja vlastitih Gutenberg blokova, pokrivajući bitne koncepte poput registracije blokova, atributa i renderiranja. Istražit ćemo praktične primjere, raspraviti najbolje prakse za organizaciju koda i sigurnost te istaknuti kako se prilagođeni blokovi integriraju s WordPress arhitekturom i kvačicama. Ovladavanjem razvojem prilagođenih blokova, možete značajno poboljšati mogućnosti i korisničko iskustvo vaše WordPress web-lokacije.

Iznad osnovnih blokova: Izrada 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 stvara i upravlja. Odmičući se od linearnog pristupa klasičnog uređivača, Gutenberg je uveo modularni sustav gdje se sadržaj gradi pomoću diskretnih "blokova". Iako zadani skup blokova pokriva širok raspon uobičajenih potreba, mnoge web-lokacije zahtijevaju jedinstvene funkcionalnosti, specifične dizajnerske elemente ili integracije koje nadilaze ono što je lako dostupno. Tu dolazi razvoj prilagođenih Gutenberg blokova, nudeći moćan način proširenja WordPress mogućnosti i preciznog prilagođavanja zahtjevima vašeg projekta.

Razvoj prilagođenih blokova omogućuje vam stvaranje ponovno upotrebljivih komponenti koje pojednostavljuju stvaranje sadržaja za urednike, osiguravaju dosljednost brenda i implementiraju složene značajke izravno unutar sučelja uređivača. Ovaj vodič provest će vas kroz proces, od razumijevanja osnova do implementacije najboljih praksi za robusne i održive prilagođene blokove.

Razumijevanje arhitekture uređivača blokova

Prije nego što zaronite u razvoj, ključno je shvatiti kako Gutenberg i njegovi blokovi funkcioniraju unutar WordPress ekosustava. Sam WordPress izgrađen je na modularnoj PHP i MySQL arhitekturi. Teme kontroliraju prezentaciju, a dodaci dodaju funkcionalnost. Gutenberg, kao osnovna značajka WordPressa, besprijekorno se integrira u ovu strukturu. Koristi JavaScript (uglavnom React) za dinamično iskustvo uređivanja u pregledniku, dok PHP obrađuje registraciju i renderiranje na strani poslužitelja.

Prilagođeni blokovi su u suštini JavaScript komponente koje se registriraju kod WordPressa. Kada korisnik doda prilagođeni blok u objavu ili stranicu, Gutenberg pohranjuje njegovu konfiguraciju (atribute) u bazu podataka. Prilikom renderiranja objave na front-endu, WordPress koristi PHP za tumačenje ove konfiguracije i izlaz odgovarajućeg HTML-a, često koristeći istu JavaScript komponentu ili zasebnu PHP predložak.

Ključne komponente prilagođenog bloka

Svaki prilagođeni Gutenberg blok, u svojoj srži, sastoji se od nekoliko ključnih dijelova:

  1. Registracija: Ovo je proces obavještavanja WordPressa o vašem novom bloku. Uključuje definiranje njegovog imena, naslova, ikone i drugih metapodataka. Ovo se uglavnom radi pomoću JavaScript funkcije registerBlockType.
  2. Atributi: Ovo su polja podataka povezana s vašim blokom. Zamislite ih kao postavke ili svojstva koja korisnik može mijenjati za određenu instancu bloka (npr. tekstualni sadržaj, URL slike, odabir boje). Atributi se definiraju u JavaScript registraciji bloka.
  3. Funkcija uređivanja (edit): Ova JavaScript funkcija definira kako blok izgleda i ponaša se unutar Gutenberg uređivača. Ovdje gradite interaktivno korisničko sučelje koje će kreatori sadržaja koristiti za konfiguraciju bloka.
  4. Funkcija spremanja (save): Ova JavaScript funkcija definira statički HTML označni kod koji će se spremiti u bazu podataka i renderirati na front-endu vaše web-lokacije. Trebao bi odražavati trenutno stanje atributa bloka.

Korak po korak: Izrada vašeg prvog prilagođenog bloka

Stvorit ćemo jednostavan prilagođeni blok koji prikazuje "Poziv na akciju" (CTA) s naslovom i gumbom. Ovaj primjer će se usredotočiti na bitne JavaScript aspekte za registraciju i uređivanje blokova, pretpostavljajući da je postavljen osnovni WordPress razvojni okoliš.

Preduvjeti:

  • Lokalno WordPress razvojno okruženje.
  • Osnovno razumijevanje JavaScripta, Reacta i PHP-a.
  • Instalirani Node.js i npm (ili yarn) za kompilaciju resursa.

1. Postavljanje projekta:

Prilagođeni blokovi se obično razvijaju kao dio dodatka. Stvorite novu datoteku dodatka (npr. my-custom-blocks/my-custom-blocks.php) i JavaScript datoteku za vaš blok (npr. src/index.js). Također će vam trebati proces izgradnje za kompilaciju vašeg JavaScripta. Uobičajeni pristup je korištenje @wordpress/scripts koji pruža prikladan način za rukovanje kompilacijom.

U korijenskom direktoriju vašeg dodatka, stvorite package.json datoteku:

{
  "name": "my-custom-blocks",
  "version": "1.0.0",
  "description": "Dodatak za prilagođene Gutenberg blokove.",
  "main": "index.js",
  "scripts": {
    "build": "wp-scripts build",
    "start": "wp-scripts start"
  },
  "keywords": ["wordpress", "gutenberg", "block"],
  "author": "Vaše Ime",
  "license": "GPL-2.0-or-later",
  "devDependencies": {
    "@wordpress/scripts": "^26.0.0" 
  }
}

Instalirajte ovisnosti: npm install.

2. Registracija bloka (JavaScript):

U vašoj src/index.js datoteci, koristit ćete registerBlockType iz @wordpress/blocks paketa.

import { registerBlockType } from '@wordpress/blocks';
import { __ } from '@wordpress/i18n';

// Uvoz komponenti za uređivač
import { Edit } from './edit';
import { Save } from './save';

registerBlockType( 'my-custom-blocks/cta', {
    title: __( 'Poziv na akciju', 'my-custom-blocks' ),
    icon: 'megaphone',
    category: 'widgets',
    attributes: {
        headline: {
            type: 'string',
            default: '',
        },
        buttonText: {
            type: 'string',
            default: 'Saznajte više',
        },
        buttonUrl: {
            type: 'string',
            default: '#',
        },
    },
    edit: Edit,
    save: Save,
} );

3. Definiranje sučelja uređivača (src/edit.js):

Ova komponenta obrađuje kako blok izgleda i funkcionira 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={ __( 'Postavke gumba', 'my-custom-blocks' ) }>
                    <TextControl
                        label={ __( 'Tekst gumba', 'my-custom-blocks' ) }
                        value={ attributes.buttonText }
                        onChange={ onChangeButtonText }
                    />
                    <TextControl
                        label={ __( 'URL gumba', 'my-custom-blocks' ) }
                        value={ attributes.buttonUrl }
                        onChange={ onChangeButtonUrl }
                    />
                </PanelBody>
            </InspectorControls>
            <div { ...blockProps }>
                <RichText
                    tagName="h3"
                    placeholder={ __( 'Unesite svoj naslov ovdje...', '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. Definiranje funkcije spremanja (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 skripte bloka (PHP):

U vašoj glavnoj datoteci dodatka (my-custom-blocks.php), morate registrirati i uključiti vašu kompiliranu JavaScript datoteku.

<?php
/**
 * Naziv dodatka: Moji prilagođeni blokovi
 * Opis: Dodaje prilagođene Gutenberg blokove.
 * Verzija: 1.0
 * Autor: Vaše Ime
 */

function my_custom_blocks_register_block() {
    // Automatski učitava block.json datoteku i uključuje skriptu.
    register_block_type( __DIR__ . '/build' );
}
add_action( 'init', 'my_custom_blocks_register_block' );
?>

6. Izrada resursa:

Pokrenite npm run build u direktoriju vašeg dodatka. Ovo će kompilirati vaš JavaScript u build mapu.

Sada aktivirajte dodatak u WordPressu. Trebali biste vidjeti svoj "Poziv na akciju" blok dostupan u uređivaču!

Najbolje prakse za razvoj prilagođenih blokova

Razvoj prilagođenih blokova nadilazi samo njihovo funkcionalno djelovanje. Pridržavanje najboljih praksi osigurava da su vaši blokovi sigurni, učinkoviti, pristupačni i održivi.

  • Imenovanje (Namespacing): Uvijek koristite jedinstveni imenski prostor za svoj blok (npr. my-custom-blocks/cta). Ovo sprječava sukobe s drugim blokovima. registerBlockType funkcija to obrađuje.
  • Organizacija koda: Neka vaš JavaScript i PHP kod budu čisti i dobro organizirani. Za složene blokove, razmislite o razbijanju vašeg JavaScripta na manje, ponovno upotrebljive komponente.
  • Sigurnost:
    • Sanitizacija: Prilikom spremanja podataka u bazu podataka (posebno sadržaja generiranog od korisnika), uvijek ih sanitizirajte. WordPress pruža funkcije poput sanitize_text_field, esc_url, itd.
    • Bijeg (Escaping): Prilikom izlaza podataka u preglednik, uvijek ih bijegnite kako biste spriječili napade unakrsnog skriptiranja (XSS). Koristite funkcije poput esc_html, esc_attr, esc_url.
    • Nonces: Za sve AJAX zahtjeve ili slanje obrazaca povezane s vašim blokom, koristite nonces za provjeru potječe li zahtjev iz legitimnog WordPress izvora.
  • Internacionalizacija (i18n): Koristite __() i _x() funkcije (iz @wordpress/i18n) za sve korisničke nizove u vašem JavaScriptu. Ovo čini vaš blok prevedivim.
  • Pristupačnost: Osigurajte da je vaš blok upotrebljiv za sve. Koristite semantički HTML, pružite ARIA atribute gdje je potrebno i testirajte sa čitačima zaslona.
  • Performanse:
    • Odgođeno učitavanje (Lazy Loading): Za blokove koji učitavaju teške resurse ili složene podatke, razmislite o implementaciji tehnika odgođenog učitavanja.
    • Učinkovito renderiranje: Optimizirajte svoju save funkciju i bilo koje renderiranje na strani poslužitelja kako bi bilo što učinkovitije.
    • Uključivanje resursa: Uključite samo potrebne 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 kvačice (akcije i filtere) unutar vašeg PHP-a kako biste omogućili drugim dodacima ili temama da izmijene ponašanje ili izlaz vašeg bloka.
  • block.json: Za složenije blokove, koristite block.json datoteku za deklariranje metapodataka bloka, ovisnosti, stilova i rukovatelja skripti. Ovo je moderan standard za razvoj blokova i pojednostavljuje upravljanje resursima.

Integracija s WordPress arhitekturom

Prilagođeni blokovi nisu izolirani entiteti. Duboko se integriraju s osnovnom arhitekturom WordPressa:

  • Kvačice (Hooks): Možete koristiti PHP akcije i filtere u svom dodatku za izmjenu registracije blokova, dodavanje prilagođenih stilova ili skripti uvjetno, ili čak izmjenu renderiranog izlaza osnovnih blokova. Na primjer, možete koristiti block_type_metadata_settings filter za izmjenu postavki registriranog bloka.
  • Integracija s temom: Teme temeljene na blokovima i Potpuno uređivanje web-mjesta (FSE) uvelike se oslanjaju na blokove. Prilagođeni blokovi mogu biti dizajnirani da se besprijekorno uklapaju u FSE predloške, omogućujući korisnicima da grade cijele web-lokacije koristeći dosljedan tijek rada temeljen na blokovima.
  • Interoperabilnost dodataka: Vaši prilagođeni blokovi mogu komunicirati s drugim dodacima. Na primjer, prilagođeni blok proizvoda mogao bi povući podatke iz dodatka za e-trgovinu, ili prilagođeni blok galerije mogao bi se integrirati sa specifičnim dodatkom za medijsku biblioteku.

Napredni koncepti i razmatranja

  • Renderiranje na strani poslužitelja (SSR): Za blokove koji zahtijevaju dinamičke podatke ili složenu logiku koja se najbolje obrađuje na poslužitelju, možete implementirati renderiranje na strani poslužitelja. Ovo uključuje definiranje render_callback funkcije u vašem PHP-u prilikom registracije bloka.
  • Dinamički blokovi: Blokovi koji koriste SSR često se nazivaju dinamičkim blokovima. Oni ne spremaju statički HTML u bazu podataka; umjesto toga, spremaju samo svoje atribute, a render_callback generira HTML pri svakom učitavanju stranice.
  • Stilovi blokova: Možete definirati prilagođene stilove za svoje blokove koje korisnici mogu odabrati unutar uređivača.
  • Varijacije blokova: Stvorite varijacije osnovnog bloka kako biste ponudili unaprijed konfigurirane verzije s različitim zadanim postavkama ili izgledom.
  • Razlike između uređivača i front-enda: Imajte na umu da edit i save funkcije možda trebaju obrađivati 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 zatrebati zasebni render_callback za dinamičko renderiranje na front-endu.

Zaključak

Razvoj prilagođenih Gutenberg blokova moćna je vještina koja otključava novu razinu prilagodbe i funkcionalnosti za WordPress web-lokacije. Razumijevanjem ključnih komponenti—registracije, atributa, funkcija uređivanja i spremanja—te pridržavanjem najboljih praksi za sigurnost, performanse i pristupačnost, možete stvoriti robusne, ponovno upotrebljive i korisniku ugodne blokove. Bilo da gradite prilagođeni dodatak za klijenta ili poboljšavate vlastitu web-lokaciju, ovladavanje prilagođenim blokovima značajno će podići vaše WordPress razvojne sposobnosti, omogućujući vam da nadiđete standardne ponude i izradite uistinu jedinstvena digitalna iskustva.

Sources (5)