✅ WEB- ja WordPress -uutiset, -teemat, -laajennukset. Täällä jaamme vinkkejä ja parhaita verkkosivustoratkaisuja.

Lisää Select2 InspectorControliksi WordPress Gutenbergiin

22

Työssäni tekemässäni projektissa halusin käyttää Select2:ta Gutenbergina InpectorControl, jotta voin soveltaa asetuksia lohkoon. Tämä opetusohjelma antaa sinulle myös perustan, jota tarvitset saadaksesi minkä tahansa kolmannen osapuolen React-komponentin WordPress Gutenberg Editoriin.

Select2 on erittäin kätevä vaihtoehto verkkosivustosi valintalaatikoille. Erityisesti siinä on hienoja vaihtoehtoja useiden kohteiden valitsemiseen.

Valmis tuote, Select2 WordPressin Gutenberg InspectorControlsissa

Hyvä uutinen on, että minun ei tarvinnut rakentaa React-komponenttia saadakseni Select2:n osaksi Gutenbergiä, react-selectJed Watsonin komponentti, joka tekee jo hienoa työtä tässä, mutta sen saaminen pelaamaan Gutenbergin kanssa ei ollut niin helppoa kuin seuraaminen. ohjeet.

Ensinnäkin meidän piti asentaa komponentti kokoonpanoomme. Koska tämä tapahtui npm:ssä, se oli yhtä helppoa kuin seuraavan syöttäminen terminaaliimme:

Select2:n saaminen Gutenbergin lohkoon

Zac Gordons Gutenberg -kurssin Git repon (osa Zac Gordonsin fantastista Gutenberg-kehityskurssia) käyttäminen laajennukseni pohjana (erityisesti InspectorControlsesimerkissä), jotta react-selectminun oli lisättävä seuraavat kohdat tiedostoni yläosaan:

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

Voi ei! Tämän kääntäminen antaa meille virheen:

Moduulia ei löydy: Virhe: Ei voida ratkaista "reagoida"

Älä koskaan pelkää, tämä CSS Igniterin loistava artikkeli aiheesta "Kuinka käyttää ulkoisia React-komponentteja Gutenberg-lohkoissa"externals tuli apuun, meidän tarvitsee vain rekisteröityä webpack.config.jstiedostoomme:

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

Niin kuin:

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',
    }
...

InspectorControlsin rekisteröinti

Komponenttisi paneelirullan <InspectorControls>sisään sinun on lisättävä seuraavat:

<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'
    />

Emme ole aivan valmiita, koska meidän on myös rekisteröitävä selectedOptionattribuutti ja handleSelectChangetoiminto. Voimme tehdä tämän seuraavasti:

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

…ja nyt toimintoon…

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

Odota, miksi tarvitsemme JSON.stringify()ja JSON.parse()arvot? No, koska arvo, jonka react-selectkomponentti hyväksyy, on taulukko, ja koska Gutenberg ei anna meidän tallentaa tätä arvoa taulukkona, tämä on kiertotapa, jota voimme käyttää.

Laittamalla se yhteen

Koko alueemme InspectorControlspitäisi nyt näyttää tältä:

...
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>,
...

Hyvältä näyttää Gutenbergissä

Kuten kuvakaappauksesta näkyy, se toimii melko hyvin:

Lisää Select2 InspectorControliksi WordPress GutenbergiinValitse2 Gutenbergin tarkastajaksi

Vie sitä pidemmälle

Käytin tätä Inspector Controlia Secure Blocks for Gutenberg -laajennuksessani. Ota selvää, kuinka täydensin Select2-ohjausobjektin dynaamisilla tiedoilla WordPress REST API:sta.

Tämä verkkosivusto käyttää evästeitä parantaakseen käyttökokemustasi. Oletamme, että olet kunnossa, mutta voit halutessasi kieltäytyä. Hyväksyä Lisätietoja