Blog
Ovládnutie dynamických blokov WordPress: Prepojenie PHP a JavaScriptu pre interaktívny obsah
Naučte sa vytvárať dynamické bloky WordPress, ktoré využívajú PHP aj JavaScript na poskytovanie interaktívnych a dátovo orientovaných obsahových zážitkov pre vašich používateľov.

Zhrnutie
Dynamické bloky WordPress ponúkajú výkonný spôsob vytvárania obsahu, ktorý presahuje statické HTML, čo umožňuje integráciu dát v reálnom čase a interaktívne prvky. Na rozdiel od statických blokov, dynamické bloky vykresľujú svoj výstup na strane servera pomocou PHP, čo im umožňuje načítavať a zobrazovať aktuálne informácie. Tento článok poskytuje praktického sprievodcu vývojom vlastných dynamických blokov, pokrýva základné koncepty registrácie blokov, spätných volaní na vykresľovanie na strane servera a spracovania atribútov na strane klienta. Prejdeme si príklad krok za krokom, ktorý ukáže, ako vytvoriť dynamický blok zobrazujúci najnovšie príspevky, čím získate základ pre zložitejšie interaktívne komponenty.
Ovládnutie dynamických blokov WordPress: Prepojenie PHP a JavaScriptu pre interaktívny obsah
WordPress je vo svojej podstate robustný systém správy obsahu (CMS) postavený na modulárnej PHP architektúre a databáze MySQL. Jeho rozšíriteľnosť je kľúčovou silou, primárne dosahovanou prostredníctvom tém a doplnkov. Príchod Gutenberg editora blokov revolucionalizoval tvorbu obsahu zavedením modulárneho rozhrania riadeného JavaScriptom. Zatiaľ čo statické bloky Gutenberg sú vynikajúce pre štruktúrovaný, nemenný obsah, mnohé reálne scenáre vyžadujú obsah, ktorý je dynamický, interaktívny a dátovo orientovaný. Tu prichádzajú na rad dynamické bloky, ktoré ponúkajú výkonné prepojenie medzi logikou PHP na strane servera a interaktivitou JavaScriptu na strane klienta.
Pochopenie sily dynamických blokov
Statické bloky, predvolené v Gugenbergu, generujú HTML na strane klienta pri uložení. Tento HTML sa potom ukladá priamo do obsahu príspevku. Hoci je to efektívne pre statický obsah, tento prístup má obmedzenia pri práci s dátami, ktoré sa často menia alebo vyžadujú spracovanie na strane servera. Dynamické bloky na druhej strane riešia tento problém vykresľovaním svojho výstupu na strane servera pomocou PHP. Keď používateľ zobrazí stránku obsahujúcu dynamický blok, WordPress spustí funkciu PHP (spätné volanie render_callback), aby na požiadanie vygeneroval HTML bloku. To umožňuje bloku načítavať dáta v reálnom čase z databázy, interagovať s inými funkciami WordPressu a prezentovať informácie, ktoré sú vždy aktuálne.
Toto vykresľovanie na strane servera je kľúčové z niekoľkých dôvodov:
- Dáta v reálnom čase: Zobrazovanie najnovších príspevkov, nadchádzajúcich udalostí, cien akcií alebo akýchkoľvek iných dát, ktoré sa často menia.
- Zložitá logika: Vykonávanie výpočtov, dopytovanie vlastných typov príspevkov alebo integrácia s externými API pred vykreslením výstupu.
- Bezpečnosť: Čistenie a overovanie dát pred ich zobrazením, najmä pri práci s obsahom generovaným používateľmi alebo externými zdrojmi.
- Výkon: Odľahčenie zložitých úloh vykresľovania na server môže niekedy zlepšiť výkon na strane klienta.
Anatómia dynamického bloku
Dynamický blok, rovnako ako akýkoľvek iný blok Gutenberg, je definovaný svojimi metadátami a registráciou v JavaScript. Jeho jedinečnou charakteristikou je však atribút render_callback špecifikovaný počas registrácie. Táto funkcia spätného volania je zodpovedná za generovanie výstupu HTML bloku na strane servera.
Tu je rozpis kľúčových komponentov:
- Registrácia bloku (JavaScript): Stále musíte zaregistrovať svoj blok pomocou
registerBlockType()vo svojom súbore JavaScript. Týmto informujete Gutenberg, že váš blok existuje a ako spracovať jeho atribúty a rozhranie editora. - Atribúty: Toto sú dátové polia spojené s vaším blokom, uložené v obsahu príspevku. Pre dynamické bloky sa atribúty primárne používajú na konfiguráciu správania a nastavení bloku v editore. Skutočný zobrazovaný obsah je generovaný pomocou
render_callback. render_callback(PHP): Toto je srdce dynamického bloku. Je to funkcia PHP, ktorá prijíma atribúty bloku ako argument a vracia reťazec HTML, ktorý sa má vykresliť na front-ende.- Rozhranie editora (JavaScript): Rozhranie bloku budete stále budovať v editore Gutenberg pomocou komponentov React. Toto rozhranie umožňuje používateľom konfigurovať atribúty bloku a vidieť náhľad (často zjednodušenú reprezentáciu) toho, ako bude dynamický obsah vyzerať.
Krok za krokom: Vytvorenie dynamického bloku „Najnovšie príspevky“
Vytvorme praktický príklad: dynamický blok, ktorý zobrazuje zoznam najnovších príspevkov z vašej lokality WordPress.
Predpoklady:
- Lokálne vývojové prostredie WordPress.
- Základné znalosti PHP a JavaScript.
- Doplnok alebo téma, kam pridáte kód svojho bloku.
Krok 1: Nastavenie doplnku/témy bloku
Ak nemáte vlastný doplnok alebo tému, vytvorte si jednoduchý. V tomto príklade predpokladáme, že to pridávate do doplnku.
Krok 2: Registrácia bloku (JavaScript)
Vo svojom súbore JavaScript doplnku (napr. src/index.js) zaregistrujete blok. Na internacionalizáciu použijeme @wordpress/blocks a @wordpress/i18n.
// src/index.js
import { registerBlockType } from '@wordpress/blocks';
import { __ } from '@wordpress/i18n';
// Importujte komponentu editora vášho bloku
import Edit from './edit';
registerBlockType( 'my-dynamic-blocks/recent-posts', {
title: __( 'Najnovšie príspevky', 'my-dynamic-blocks' ),
icon: 'list-view',
category: 'widgets',
attributes: {
numberOfPosts: {
type: 'number',
default: 5,
},
showExcerpt: {
type: 'boolean',
default: true,
},
},
edit: Edit,
// Funkcia save() NIE JE potrebná pre dynamické bloky
// Spätné volanie render_callback na strane servera sa postará o výstup
} );
Krok 3: Vytvorenie komponenty editora (JavaScript)
Teraz vytvorte súbor src/edit.js. Táto komponenta definuje, ako blok vyzerá a správa sa v editore Gutenberg.
// src/edit.js
import { useBlockProps, InspectorControls } from '@wordpress/block-editor';
import { PanelBody, RangeControl, ToggleControl } from '@wordpress/components';
import { __ } from '@wordpress/i18n';
import ServerSideRender from '@wordpress/server-side-render';
export default function Edit( { attributes, setAttributes } ) {
const blockProps = useBlockProps();
const { numberOfPosts, showExcerpt } = attributes;
return (
<div { ...blockProps }>
<InspectorControls>
<PanelBody title={ __( 'Nastavenia príspevkov', 'my-dynamic-blocks' ) }>
<RangeControl
label={ __( 'Počet príspevkov', 'my-dynamic-blocks' ) }
value={ numberOfPosts }
onChange={ ( value ) => setAttributes( { numberOfPosts: value } ) }
min={ 1 }
max={ 10 }
/>
<ToggleControl
label={ __( 'Zobraziť úvod', 'my-dynamic-blocks' ) }
checked={ showExcerpt }
onChange={ ( value ) => setAttributes( { showExcerpt: value } ) }
/>
</PanelBody>
</InspectorControls>
{
// Použite ServerSideRender na zobrazenie náhľadu dynamického bloku
<ServerSideRender
block="my-dynamic-blocks/recent-posts"
attributes={ attributes }
/>
}
</div>
);
}
Všimnite si, že nedefinujeme funkciu save(). Toto je kľúčový rozdiel pre dynamické bloky. Komponenta ServerSideRender sa používa na zobrazenie náhľadu výstupu bloku priamo v editore, vykonaním požiadavky na server.
Krok 4: Načítanie skriptov a registrácia vykresľovania na strane servera (PHP)
Vo hlavnom súbore PHP vášho doplnku (napr. my-dynamic-blocks.php) musíte načítať svoj súbor JavaScript a zaregistrovať typ bloku vrátane render_callback.
<?php
/**
* Názov doplnku: Moje dynamické bloky
* Popis: Jednoduchý doplnok pre dynamické bloky Gutenberg.
* Verzia: 1.0
* Autor: Vaše meno
*/
function my_dynamic_blocks_register_block() {
// Registrácia typu bloku
register_block_type( 'my-dynamic-blocks/recent-posts', array(
'editor_script' => 'my-dynamic-blocks-editor-script',
'render_callback' => 'my_dynamic_blocks_render_recent_posts',
'attributes' => array(
'numberOfPosts' => array(
'type' => 'number',
'default' => 5,
),
'showExcerpt' => array(
'type' => 'boolean',
'default' => true,
),
),
) );
}
add_action( 'init', 'my_dynamic_blocks_register_block' );
function my_dynamic_blocks_enqueue_editor_scripts() {
wp_enqueue_script(
'my-dynamic-blocks-editor-script',
plugins_url( 'build/index.js', __FILE__ ), // Predpokladáme, že máte proces zostavenia
array( 'wp-blocks', 'wp-element', 'wp-editor', 'wp-components', 'wp-i18n', 'wp-server-side-render' ),
filemtime( plugin_dir_path( __FILE__ ) . 'build/index.js' )
);
}
add_action( 'enqueue_block_editor_assets', 'my_dynamic_blocks_enqueue_editor_scripts' );
/**
* Spätné volanie vykresľovania pre dynamický blok Najnovšie príspevky.
*
* @param array $attributes Atribúty bloku.
* @return string HTML výstup.
*/
function my_dynamic_blocks_render_recent_posts( $attributes ) {
$number_of_posts = isset( $attributes['numberOfPosts'] ) ? (int) $attributes['numberOfPosts'] : 5;
$show_excerpt = isset( $attributes['showExcerpt'] ) ? (bool) $attributes['showExcerpt'] : true;
$args = array(
'posts_per_page' => $number_of_posts,
'post_status' => 'publish',
'orderby' => 'date',
'order' => 'DESC',
'ignore_sticky_posts' => true,
);
$recent_posts_query = new WP_Query( $args );
$output = '';
if ( $recent_posts_query->have_posts() ) {
$output .= '<ul class="wp-block-my-dynamic-blocks-recent-posts">'; // Použite triedu pre štýlovanie
while ( $recent_posts_query->have_posts() ) {
$recent_posts_query->the_post();
$output .= '<li>';
$output .= '<a href="' . esc_url( get_permalink() ) . '">' . esc_html( get_the_title() ) . '</a>';
if ( $show_excerpt ) {
$output .= '<p>' . get_the_excerpt() . '</p>';
}
$output .= '</li>';
}
$output .= '</ul>';
wp_reset_postdata(); // Dôležité: Resetovať dáta príspevkov po vlastnej slučke
} else {
$output = '<p>' . __( 'Nenašli sa žiadne príspevky.', 'my-dynamic-blocks' ) . '</p>';
}
return $output;
}
Vysvetlenie kódu PHP:
my_dynamic_blocks_register_block(): Táto funkcia sa pripojí kinita zaregistruje náš typ bloku. Kľúčové je, že definujerender_callbackakomy_dynamic_blocks_render_recent_postsa tiež odovzdáva atribúty bloku, čo zrkadlí to, čo je definované v JavaScript.my_dynamic_blocks_enqueue_editor_scripts(): Táto funkcia sa pripojí kenqueue_block_editor_assetsa načíta náš súbor JavaScript špecificky pre editor. Ako závislosť zahŕňawp-server-side-render.my_dynamic_blocks_render_recent_posts(): Toto je nášrender_callback. Prijíma pole$attributes, čistí ich a prevádza na správne typy, potom používaWP_Queryna načítanie najnovších príspevkov. Konštruuje HTML zoznam<ul>a vracia ho.wp_reset_postdata()je nevyhnutné po vlastnej slučkeWP_Query, aby sa zabránilo konfliktom s hlavným dopytom WordPressu.
Krok 5: Zostavenie JavaScriptu
Ak používate moderný proces zostavenia JavaScriptu (ako @wordpress/scripts), budete musieť zostaviť svoje aktíva. V adresári vášho doplnku spustite npm run build (alebo yarn build).
Krok 6: Aktivácia a testovanie
Aktivujte svoj doplnok. Teraz, keď pridáte blok 'Najnovšie príspevky' do príspevku alebo stránky, uvidíte rozhranie editora. V oblasti náhľadu sa zobrazí výstup vykreslený vašou spätnou väzbou PHP. Keď publikujete alebo aktualizujete príspevok, rovnaká spätná väzba PHP sa spustí na front-ende, aby zobrazila dynamický obsah.
Najlepšie postupy a upozornenia
- Bezpečnosť na prvom mieste: Vždy čistite a overujte všetky dáta pochádzajúce z atribútov alebo externých zdrojov pred ich použitím vo vašom
render_callback. Používajte funkcie WordPressu akoesc_html(),esc_url(),sanitize_text_field()atď. wp_reset_postdata(): Ak vášrender_callbackpoužívaWP_Queryalebo upravuje globálny objekt$post, vždy potom zavolajtewp_reset_postdata(), aby ste obnovili pôvodný dopyt a dáta príspevku.- Úvahy o výkone: Hoci dynamické bloky sú výkonné, nadmerné alebo zložité vykresľovanie na strane servera môže ovplyvniť časy načítania stránky. Optimalizujte svoje dopyty a logiku vykresľovania. Zvážte mechanizmy cachovania, ak sa objavia problémy s výkonom.
- Náhľad editora: Komponenta
ServerSideRenderposkytuje dobrý náhľad, ale spolieha sa na vykonanie požiadavky na server. Pre veľmi zložité bloky to nemusí byť okamžité. Uistite sa, že vášrender_callbackje efektívny. - Správa atribútov: Atribúty slúžia primárne na konfiguráciu bloku v editore.
render_callbackje zodpovedný za načítanie a zobrazenie skutočného dynamického obsahu. Vyhnite sa ukladaniu veľkého množstva dynamických dát priamo do atribútov. - Konvencie pomenovania: Používajte jedinečné predpony pre názvy svojich blokov (napr.
my-plugin-slug/block-name) a názvy funkcií PHP, aby ste sa vyhli konfliktom s inými doplnkami alebo témami. - Internacionalizácia: Používajte
__()a_n()pre prekladateľné reťazce vo vašom JavaScript aj PHP kóde.
Za hranicami najnovších príspevkov: Rozšírenie možností dynamických blokov
Príklad „Najnovšie príspevky“ je len špičkou ľadovca. Dynamické bloky môžete použiť na:
- Zobrazovanie vlastných typov príspevkov: Prezentácia produktov, portfóliových položiek alebo udalostí.
- Obsah špecifický pre používateľa: Zobrazovanie obsahu relevantného pre prihláseného používateľa.
- Interaktívne formuláre: Hoci zložité formuláre môžu stále profitovať zo špecializovaných doplnkov, jednoduché dynamické formuláre sa dajú vytvoriť.
- Vizualizácia dát: Načítavanie dát z API a vykresľovanie grafov alebo diagramov (hoci to často zahŕňa pokročilejšie knižnice JavaScript).
- Integrácia s inými doplnkami: Dynamické zobrazovanie dát spravovaných inými doplnkami.
Záver
Dynamické bloky WordPress sú nepostrádateľným nástrojom pre vývojárov, ktorí chcú vytvárať skutočne interaktívne a dátovo orientované zážitky v rámci editora Gutenberg. Pochopením toho, ako registrovať bloky s funkciami render_callback a efektívne spravovať atribúty, môžete vytvárať výkonné komponenty, ktoré načítavajú a zobrazujú informácie v reálnom čase. Zatiaľ čo statické bloky slúžia svojmu účelu pre štruktúrovaný obsah, dynamické bloky odomykajú novú úroveň funkčnosti, čo vám umožňuje preklenúť priepasť medzi logikou na strane servera a prezentáciou na strane klienta. Dodržiavaním najlepších postupov pre bezpečnosť, výkon a organizáciu kódu môžete s istotou vyvíjať robustné a užitočné dynamické bloky, ktoré vylepšia vaše webové stránky WordPress.
Sources (5)
- WordPress Architecture: A Complete Guide - Liquid Web
- Explaining WordPress Hooks with Actions and Filters - Hey Reliable
- WordPress Hooks, Actions, and Filters: What They Do and How They Work
- Getting Started with Gutenberg: WordPress Block Development Essentials
- Gutenberg Block Development Step by Step Guide - White Label IQ