✅ WEB і WordPress новини, теми, плагіни. Тут ми ділимося порадами і кращими рішеннями для сайтів.

Додайте Select2 як InspectorControl у WordPress Gutenberg

21

Для проекту, над яким я працював, я хотів використовувати Select2 як Gutenberg InpectorControl, щоб дозволити мені застосувати налаштування до блоку. Цей підручник також надасть вам основу, необхідну для розміщення сторонніх компонентів React у редакторі Gutenberg WordPress.

Select2 — це надзвичайно зручна заміна полів вибору на вашому веб-сайті. Зокрема, у ньому є кілька чудових опцій для вибору кількох елементів.

Готовий продукт, Select2 у WordPress Gutenberg InspectorControls

Хороша новина полягає в тому, що мені не потрібно було створювати компонент React, щоб включити Select2 у Gutenberg, react-selectкомпонент Джеда Ватсона вже чудово справляється з цим, однак змусити його добре працювати з Gutenberg було не так легко, як просто слідувати інструкції.

Перш за все, нам потрібно було встановити компонент у нашу збірку. Оскільки це було на npm, це було так само просто, як ввести наступне в наш термінал:

Введення Select2 у блок Гутенберга

Використовуючи Git-репозиторій курсу Зака ​​Гордонса Гутенберга (частина фантастичного курсу розробки Зака ​​Гордонса Гутенберга) як основу для мого плагіна (зокрема InspectorControlsприкладу), для використання react-selectмені потрібно було додати такі включення у верхній частині мого файлу:

import React from 'react';
import Select from 'react-select';

О ні! Компіляція цього дає нам помилку:

Модуль не знайдено: помилка: не вдається вирішити "react"

Ніколи не бійтеся, ця чудова стаття «Як використовувати зовнішні компоненти React у ваших блоках Gutenberg» від CSS Igniter прийшла на допомогу, все, що нам потрібно зробити, це зареєструватися externalsв нашому webpack.config.jsфайлі:

externals: {
    'react': 'React',
    'react-dom': 'ReactDOM',
}

Ось так:

module.exports = {
    entry: {
        './assets/js/editor': './blocks/index.js',
        './assets/js/script': './blocks/script.js',
    },
    output: {
        path: path.resolve( __dirname ),
        filename: '[name].js',
    },
    externals: {
        'react': 'React',
        'react-dom': 'ReactDOM',
    }
...

Реєстрація InspectorControls

У рулон панелі вашого <InspectorControls>компонента вам потрібно буде додати наступне:

<Select
    name='select-two'
    value={ JSON.parse( selectedOption) }
    onChange={ handleSelectChange }
    options={[
        { value: 'health', label: 'Health' },
        { value: 'wealth', label: 'Wealth' },
        { value: 'code', label: 'Code' },
    ]}
    isMulti='true'
    />

Ми ще не закінчили, оскільки нам також потрібно буде зареєструвати selectedOptionатрибут і handleSelectChangeфункцію. Ми можемо зробити це так:

attributes: {
    selectedOption: {
        type: 'string',
        default: null,
    }
},

…а тепер про функцію…

const handleSelectChange = (selectedOption) => setAttributes( { selectedOption: JSON.stringify( selectedOption) } );

Почекайте, навіщо нам JSON.stringify()і JSON.parse()цінності? Оскільки значення, яке react-selectприймає компонент, є масивом, і оскільки Гутенберг не дозволяє нам зберігати це значення як масив, це обхідний шлях, який ми можемо використати.

Збираємо разом

Тепер наша повна InspectorControlsобласть має виглядати так:

...
attributes: {
    selectedOption: {
        type: 'string',
        default: null,
    }
},
edit: props => {
    const { attributes: { selectedOption }, className, setAttributes } = props;
    const handleSelectChange = (selectedOption) => setAttributes( { selectedOption: JSON.stringify( selectedOption) } );
    return [
        <InspectorControls>
            <PanelBody
                title={ __( 'Select2', 'text-domain') }
            >
                <PanelRow>
                    <Select
                        name='select-two'
                        value={ JSON.parse( selectedOption) }
                        onChange={ handleSelectChange }
                        options={[
                            { value: 'health', label: 'Health' },
                            { value: 'wealth', label: 'Wealth' },
                            { value: 'code', label: 'Code' },
                        ]}
            isMulti='true'
                        />
                 </PanelRow>
             </PanelBody>
         </InspectorControls>,
...

Добре виглядає в Gutenberg

Як ви можете бачити на скріншоті, це працює досить добре:

Додайте Select2 як InspectorControl у WordPress GutenbergВиберіть 2 як Gutenberg InspectorControl

Беручи це далі

Я використовував цей контрольний інспектор у своєму плагіні Secure Blocks for Gutenberg. Дізнайтеся, як я заповнив елемент керування Select2 динамічними даними з WordPress REST API.

Джерело запису: wholesomecode.ltd

Цей веб -сайт використовує файли cookie, щоб покращити ваш досвід. Ми припустимо, що з цим все гаразд, але ви можете відмовитися, якщо захочете. Прийняти Читати далі