ब्लॉग

बेसिक ब्लॉक्स से परे: उन्नत वर्डप्रेस कार्यक्षमता के लिए कस्टम गुटेनबर्ग ब्लॉक बनाना

अपने स्वयं के कस्टम गुटेनबर्ग ब्लॉक बनाकर वर्डप्रेस ब्लॉक एडिटर की पूरी क्षमता को अनलॉक करें। यह गाइड आपकी साइट की कार्यक्षमता और डिज़ाइन का विस्तार करने के लिए व्यावहारिक कदम, कोड उदाहरण और सर्वोत्तम अभ्यास प्रदान करता है।

सारांश

वर्डप्रेस ब्लॉक एडिटर, गुटेनबर्ग, ने अपने मॉड्यूलर ब्लॉक सिस्टम के साथ सामग्री निर्माण में क्रांति ला दी है। जबकि कोर ब्लॉक बहुमुखी प्रतिभा प्रदान करते हैं, कस्टम ब्लॉक अद्वितीय कार्यक्षमताओं और ब्रांडिंग के लिए आवश्यक हैं। यह लेख आपको अपने स्वयं के गुटेनबर्ग ब्लॉक विकसित करने की प्रक्रिया के माध्यम से मार्गदर्शन करता है, जिसमें ब्लॉक पंजीकरण, विशेषताएँ और रेंडरिंग जैसी आवश्यक अवधारणाओं को शामिल किया गया है। हम व्यावहारिक उदाहरणों का पता लगाएंगे, कोड संगठन और सुरक्षा के लिए सर्वोत्तम प्रथाओं पर चर्चा करेंगे, और यह उजागर करेंगे कि कस्टम ब्लॉक वर्डप्रेस के आर्किटेक्चर और हुक के साथ कैसे एकीकृत होते हैं। कस्टम ब्लॉक विकास में महारत हासिल करके, आप अपनी वर्डप्रेस साइट की क्षमताओं और उपयोगकर्ता अनुभव को महत्वपूर्ण रूप से बढ़ा सकते हैं।

बेसिक ब्लॉक्स से परे: उन्नत वर्डप्रेस कार्यक्षमता के लिए कस्टम गुटेनबर्ग ब्लॉक बनाना

वर्डप्रेस 5.0 में गुटेनबर्ग ब्लॉक एडिटर का आगमन सामग्री निर्माण और प्रबंधन के तरीके में एक महत्वपूर्ण बदलाव का प्रतीक है। क्लासिक एडिटर के रैखिक दृष्टिकोण से दूर, गुटेनबर्ग ने एक मॉड्यूलर सिस्टम पेश किया जहां सामग्री को अलग "ब्लॉक" का उपयोग करके बनाया जाता है। जबकि डिफ़ॉल्ट ब्लॉक का सेट सामान्य आवश्यकताओं की एक विस्तृत श्रृंखला को कवर करता है, कई वेबसाइटों को अद्वितीय कार्यक्षमताओं, विशिष्ट डिज़ाइन तत्वों, या आसानी से उपलब्ध चीज़ों से परे एकीकरण की आवश्यकता होती है। यहीं पर कस्टम गुटेनबर्ग ब्लॉक विकास आता है, जो वर्डप्रेस की क्षमताओं का विस्तार करने और इसे आपकी परियोजना की मांगों के अनुरूप बनाने का एक शक्तिशाली तरीका प्रदान करता है।

कस्टम ब्लॉक विकसित करने से आप पुन: प्रयोज्य घटक बना सकते हैं जो संपादकों के लिए सामग्री निर्माण को सुव्यवस्थित करते हैं, ब्रांड स्थिरता सुनिश्चित करते हैं, और सीधे संपादक इंटरफ़ेस के भीतर जटिल सुविधाओं को लागू करते हैं। यह गाइड आपको प्रक्रिया के माध्यम से ले जाएगा, मूल बातें समझने से लेकर मजबूत और रखरखाव योग्य कस्टम ब्लॉक के लिए सर्वोत्तम प्रथाओं को लागू करने तक।

ब्लॉक एडिटर के आर्किटेक्चर को समझना

विकास में गोता लगाने से पहले, यह समझना महत्वपूर्ण है कि गुटेनबर्ग और इसके ब्लॉक वर्डप्रेस पारिस्थितिकी तंत्र के भीतर कैसे कार्य करते हैं। वर्डप्रेस स्वयं एक मॉड्यूलर PHP और MySQL आर्किटेक्चर पर बनाया गया है। थीम प्रस्तुति को नियंत्रित करती हैं, और प्लगइन्स कार्यक्षमता जोड़ते हैं। गुटेनबर्ग, एक कोर वर्डप्रेस सुविधा के रूप में, इस संरचना में सहज रूप से एकीकृत होता है। यह अपने गतिशील, इन-ब्राउज़र संपादन अनुभव के लिए जावास्क्रिप्ट (मुख्य रूप से रिएक्ट) का लाभ उठाता है, जबकि PHP सर्वर-साइड पंजीकरण और रेंडरिंग को संभालता है।

कस्टम ब्लॉक अनिवार्य रूप से जावास्क्रिप्ट घटक हैं जिन्हें वर्डप्रेस के साथ पंजीकृत किया गया है। जब कोई उपयोगकर्ता किसी पोस्ट या पेज में कस्टम ब्लॉक जोड़ता है, तो गुटेनबर्ग डेटाबेस में इसके कॉन्फ़िगरेशन (विशेषताओं) को संग्रहीत करता है। फ्रंट-एंड पर पोस्ट को रेंडर करते समय, वर्डप्रेस इस कॉन्फ़िगरेशन की व्याख्या करने और उपयुक्त HTML आउटपुट करने के लिए PHP का उपयोग करता है, अक्सर उसी जावास्क्रिप्ट घटक या एक अलग PHP टेम्पलेट का उपयोग करता है।

एक कस्टम ब्लॉक के मुख्य घटक

हर कस्टम गुटेनबर्ग ब्लॉक, अपने मूल में, कई प्रमुख भागों से बना होता है:

  1. पंजीकरण: यह वर्डप्रेस को आपके नए ब्लॉक के बारे में बताने की प्रक्रिया है। इसमें इसका नाम, शीर्षक, आइकन और अन्य मेटाडेटा परिभाषित करना शामिल है। यह मुख्य रूप से जावास्क्रिप्ट के registerBlockType फ़ंक्शन का उपयोग करके किया जाता है।
  2. विशेषताएँ (Attributes): ये आपके ब्लॉक से जुड़े डेटा फ़ील्ड हैं। उन्हें ब्लॉक के एक विशिष्ट उदाहरण के लिए उपयोगकर्ता द्वारा संशोधित की जा सकने वाली सेटिंग्स या गुणों के रूप में सोचें (जैसे, टेक्स्ट सामग्री, छवि यूआरएल, रंग विकल्प)। विशेषताओं को ब्लॉक के जावास्क्रिप्ट पंजीकरण में परिभाषित किया गया है।
  3. एडिट फ़ंक्शन: यह जावास्क्रिप्ट फ़ंक्शन परिभाषित करता है कि ब्लॉक गुटेनबर्ग एडिटर के भीतर कैसे दिखाई देता है और व्यवहार करता है। यहीं पर आप इंटरैक्टिव UI बनाते हैं जिसका उपयोग सामग्री निर्माता ब्लॉक को कॉन्फ़िगर करने के लिए करेंगे।
  4. सेव फ़ंक्शन: यह जावास्क्रिप्ट फ़ंक्शन स्थिर HTML मार्कअप को परिभाषित करता है जिसे डेटाबेस में सहेजा जाएगा और आपकी वेबसाइट के फ्रंट-एंड पर रेंडर किया जाएगा। इसे ब्लॉक की विशेषताओं की वर्तमान स्थिति को प्रतिबिंबित करना चाहिए।

चरण-दर-चरण: अपना पहला कस्टम ब्लॉक बनाना

आइए एक "कॉल टू एक्शन" (CTA) को एक हेडलाइन और एक बटन के साथ प्रदर्शित करने वाला एक साधारण कस्टम ब्लॉक बनाएं। यह उदाहरण ब्लॉक पंजीकरण और संपादन के लिए आवश्यक जावास्क्रिप्ट पहलुओं पर ध्यान केंद्रित करेगा, एक बुनियादी वर्डप्रेस विकास वातावरण स्थापित होने की उम्मीद है।

आवश्यकताएँ:

  • एक स्थानीय वर्डप्रेस विकास वातावरण।
  • जावास्क्रिप्ट, रिएक्ट और PHP की बुनियादी समझ।
  • संपत्ति संकलन के लिए Node.js और npm (या yarn) स्थापित।

1. प्रोजेक्ट सेटअप:

कस्टम ब्लॉक आमतौर पर एक प्लगइन के हिस्से के रूप में विकसित किए जाते हैं। एक नई प्लगइन फ़ाइल (जैसे, my-custom-blocks/my-custom-blocks.php) और अपने ब्लॉक के लिए एक जावास्क्रिप्ट फ़ाइल (जैसे, src/index.js) बनाएं। आपको अपने जावास्क्रिप्ट को संकलित करने के लिए एक बिल्ड प्रक्रिया की भी आवश्यकता होगी। एक सामान्य तरीका @wordpress/scripts का उपयोग करना है जो संकलन को संभालने का एक सुविधाजनक तरीका प्रदान करता है।

अपने प्लगइन की रूट डायरेक्टरी में, एक package.json फ़ाइल बनाएं:

{
  "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" 
  }
}

निर्भरताएँ स्थापित करें: npm install

2. ब्लॉक का पंजीकरण (जावास्क्रिप्ट):

अपनी src/index.js फ़ाइल में, आप @wordpress/blocks पैकेज से registerBlockType का उपयोग करेंगे।

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. संपादक इंटरफ़ेस को परिभाषित करना (src/edit.js):

यह घटक एडिटर के भीतर ब्लॉक कैसे दिखता है और कार्य करता है, इसे संभालता है।

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. सेव फ़ंक्शन को परिभाषित करना (src/save.js):

यह फ़ंक्शन फ्रंट-एंड के लिए HTML आउटपुट निर्धारित करता है।

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. ब्लॉक स्क्रिप्ट को एनक्यू करना (PHP):

अपनी मुख्य प्लगइन फ़ाइल (my-custom-blocks.php) में, आपको अपनी संकलित जावास्क्रिप्ट फ़ाइल को पंजीकृत और एनक्यू करना होगा।

<?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. संपत्तियों का निर्माण:

अपने प्लगइन की डायरेक्टरी में npm run build चलाएँ। यह आपकी जावास्क्रिप्ट को build फ़ोल्डर में संकलित करेगा।

अब, वर्डप्रेस में प्लगइन को सक्रिय करें। आपको एडिटर में अपना "कॉल टू एक्शन" ब्लॉक उपलब्ध दिखना चाहिए!

कस्टम ब्लॉक विकास के लिए सर्वोत्तम अभ्यास

कस्टम ब्लॉक विकसित करना केवल उन्हें कार्यात्मक बनाने से परे है। सर्वोत्तम प्रथाओं का पालन यह सुनिश्चित करता है कि आपके ब्लॉक सुरक्षित, प्रदर्शनकारी, सुलभ और रखरखाव योग्य हों।

  • नेमस्पेसिंग: हमेशा अपने ब्लॉक के लिए एक अद्वितीय नेमस्पेस का उपयोग करें (जैसे, my-custom-blocks/cta)। यह अन्य ब्लॉकों के साथ टकराव को रोकता है। registerBlockType फ़ंक्शन इसे संभालता है।
  • कोड संगठन: अपने जावास्क्रिप्ट और PHP कोड को साफ और अच्छी तरह से व्यवस्थित रखें। जटिल ब्लॉकों के लिए, अपने जावास्क्रिप्ट को छोटे, पुन: प्रयोज्य घटकों में तोड़ने पर विचार करें।
  • सुरक्षा:
    • सैनिटाइजेशन: डेटा को डेटाबेस में सहेजते समय (विशेषकर उपयोगकर्ता-जनित सामग्री), हमेशा इसे सैनिटाइज करें। वर्डप्रेस sanitize_text_field, esc_url, आदि जैसे फ़ंक्शन प्रदान करता है।
    • एस्केपिंग: ब्राउज़र में डेटा आउटपुट करते समय, क्रॉस-साइट स्क्रिप्टिंग (XSS) हमलों को रोकने के लिए हमेशा इसे एस्केप करें। esc_html, esc_attr, esc_url जैसे फ़ंक्शन का उपयोग करें।
    • नॉनसेस (Nonces): आपके ब्लॉक से संबंधित किसी भी AJAX अनुरोध या फ़ॉर्म सबमिशन के लिए, यह सत्यापित करने के लिए नॉनसेस का उपयोग करें कि अनुरोध एक वैध वर्डप्रेस स्रोत से उत्पन्न हुआ है।
  • अंतर्राष्ट्रीयकरण (i18n): अपने जावास्क्रिप्ट में सभी उपयोगकर्ता-सामना स्ट्रिंग्स के लिए __() और _x() फ़ंक्शन ( @wordpress/i18n से) का उपयोग करें। यह आपके ब्लॉक को अनुवाद योग्य बनाता है।
  • सुलभता (Accessibility): सुनिश्चित करें कि आपका ब्लॉक सभी द्वारा प्रयोग करने योग्य है। सिमेंटिक HTML का उपयोग करें, जहां आवश्यक हो ARIA विशेषताएँ प्रदान करें, और स्क्रीन रीडर के साथ परीक्षण करें।
  • प्रदर्शन:
    • लेज़ी लोडिंग: भारी संपत्तियों या जटिल डेटा को लोड करने वाले ब्लॉकों के लिए, लेज़ी लोडिंग तकनीकों को लागू करने पर विचार करें।
    • कुशल रेंडरिंग: अपने save फ़ंक्शन और किसी भी सर्वर-साइड रेंडरिंग को यथासंभव कुशल बनाने के लिए अनुकूलित करें।
    • संपत्ति एनक्यूइंग: केवल अपने ब्लॉक के लिए आवश्यक स्क्रिप्ट और शैलियों को एनक्यू करें। ब्लॉक-विशिष्ट संपत्तियों के लिए enqueue_block_style और enqueue_block_script_handle का उपयोग करें।
  • मॉड्यूलरिटी और विस्तारशीलता: अन्य प्लगइन्स या थीम को आपके ब्लॉक के व्यवहार या आउटपुट को संशोधित करने की अनुमति देने के लिए अपने PHP में वर्डप्रेस हुक (एक्शन और फ़िल्टर) का लाभ उठाएं।
  • block.json: अधिक जटिल ब्लॉकों के लिए, ब्लॉक मेटाडेटा, निर्भरताएँ, शैलियाँ और स्क्रिप्ट हैंडल घोषित करने के लिए block.json फ़ाइल का उपयोग करें। यह ब्लॉक विकास के लिए आधुनिक मानक है और संपत्ति प्रबंधन को सरल बनाता है।

वर्डप्रेस आर्किटेक्चर के साथ एकीकरण

कस्टम ब्लॉक अलग-अलग इकाइयाँ नहीं हैं। वे वर्डप्रेस के कोर आर्किटेक्चर के साथ गहराई से एकीकृत होते हैं:

  • हुक: आप ब्लॉक पंजीकरण को संशोधित करने, कस्टम शैलियों या स्क्रिप्ट को सशर्त रूप से जोड़ने, या कोर ब्लॉक के रेंडर किए गए आउटपुट को बदलने के लिए अपने प्लगइन में PHP एक्शन और फ़िल्टर का उपयोग कर सकते हैं। उदाहरण के लिए, आप पंजीकृत ब्लॉक की सेटिंग्स को संशोधित करने के लिए block_type_metadata_settings फ़िल्टर का उपयोग कर सकते हैं।
  • थीम एकीकरण: ब्लॉक-आधारित थीम और फुल साइट एडिटिंग (FSE) ब्लॉकों पर बहुत अधिक निर्भर करते हैं। कस्टम ब्लॉक को FSE टेम्प्लेट में सहज रूप से फिट करने के लिए डिज़ाइन किया जा सकता है, जिससे उपयोगकर्ताओं को एक सुसंगत ब्लॉक-आधारित वर्कफ़्लो का उपयोग करके पूरी साइट बनाने की अनुमति मिलती है।
  • प्लगइन इंटरऑपरेबिलिटी: आपके कस्टम ब्लॉक अन्य प्लगइनों के साथ इंटरैक्ट कर सकते हैं। उदाहरण के लिए, एक कस्टम उत्पाद ब्लॉक ई-कॉमर्स प्लगइन से डेटा खींच सकता है, या एक कस्टम गैलरी ब्लॉक एक विशिष्ट मीडिया लाइब्रेरी प्लगइन के साथ एकीकृत हो सकता है।

उन्नत अवधारणाएँ और विचार

  • सर्वर-साइड रेंडरिंग (SSR): उन ब्लॉकों के लिए जिन्हें गतिशील डेटा या जटिल तर्क की आवश्यकता होती है जिसे सर्वर पर सबसे अच्छा संभाला जाता है, आप सर्वर-साइड रेंडरिंग लागू कर सकते हैं। इसमें ब्लॉक को पंजीकृत करते समय अपने PHP में render_callback फ़ंक्शन को परिभाषित करना शामिल है।
  • डायनामिक ब्लॉक: SSR का उपयोग करने वाले ब्लॉक को अक्सर डायनामिक ब्लॉक कहा जाता है। वे डेटाबेस में स्थिर HTML सहेजते नहीं हैं; इसके बजाय, वे केवल अपनी विशेषताओं को सहेजते हैं, और render_callback प्रत्येक पृष्ठ लोड पर HTML उत्पन्न करता है।
  • ब्लॉक शैलियाँ: आप अपने ब्लॉकों के लिए कस्टम शैलियाँ परिभाषित कर सकते हैं जिन्हें उपयोगकर्ता एडिटर के भीतर से चुन सकते हैं।
  • ब्लॉक विविधताएँ (Variations): अलग-अलग डिफ़ॉल्ट सेटिंग्स या दिखावट के साथ पूर्व-कॉन्फ़िगर किए गए संस्करणों की पेशकश करने के लिए एक आधार ब्लॉक की विविधताएँ बनाएँ।
  • एडिटर बनाम फ्रंट-एंड अंतर: ध्यान रखें कि edit और save फ़ंक्शन को विभिन्न परिदृश्यों को संभालने की आवश्यकता हो सकती है। edit फ़ंक्शन इंटरैक्टिव एडिटर अनुभव के लिए है, जबकि save फ़ंक्शन स्थिर HTML आउटपुट के लिए है। कभी-कभी, आपको डायनामिक फ्रंट-एंड रेंडरिंग के लिए एक अलग render_callback की आवश्यकता हो सकती है।

निष्कर्ष

कस्टम गुटेनबर्ग ब्लॉक विकास एक शक्तिशाली कौशल है जो वर्डप्रेस वेबसाइटों के लिए अनुकूलन और कार्यक्षमता का एक नया स्तर खोलता है। मुख्य घटकों - पंजीकरण, विशेषताएँ, संपादन और सहेजने के फ़ंक्शन - और सुरक्षा, प्रदर्शन और सुलभता के लिए सर्वोत्तम प्रथाओं का पालन करके, आप मजबूत, पुन: प्रयोज्य और उपयोगकर्ता-अनुकूल ब्लॉक बना सकते हैं। चाहे आप किसी क्लाइंट के लिए एक कस्टम प्लगइन बना रहे हों या अपनी साइट को बढ़ा रहे हों, कस्टम ब्लॉक में महारत हासिल करने से आपकी वर्डप्रेस विकास क्षमताओं में काफी वृद्धि होगी, जिससे आप मानक पेशकशों से परे जा सकेंगे और वास्तव में अद्वितीय डिजिटल अनुभव तैयार कर सकेंगे।

Sources (5)