{"id":233392,"date":"2023-02-12T15:33:00","date_gmt":"2023-02-12T12:33:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233392"},"modified":"2022-11-10T23:27:03","modified_gmt":"2022-11-10T20:27:03","slug":"kuidas-lisada-oma-kohandatud-wordpressi-gutenbergi-plokki-pildivalik","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/et\/kuidas-lisada-oma-kohandatud-wordpressi-gutenbergi-plokki-pildivalik\/","title":{"rendered":"Kuidas lisada oma kohandatud WordPressi Gutenbergi plokki pildivalik"},"content":{"rendered":"\n<p>See postitus on m\u00f5eldud teile, kes loote kohandatud Gutenbergi plokki ja vajate viisi meediateegist pildi valimiseks v\u00f5i \u00fcleslaadimiseks. Enamikku muid v\u00e4ljat\u00fc\u00fcpe, nagu m\u00e4rkeruudud, tekstisisendid v\u00f5i v\u00e4rvivalijad, on \u00fcsna lihtne lisada, kuid meediumi \u00fcleslaadija n\u00f5uab natuke rohkem koodi. Loome komponendi Inspector, mis vastutab meediateegi avamise nupu renderdamise, pildi valimise ja soovi korral selle hiljem eemaldamise v\u00f5i muutmise eest. K\u00f5ik kasutavad standardseid WordPressi komponente.<\/p>\n<p>Enne koodi sukeldumist pidage meeles, et see postitus n\u00f5uab teatud Gutenbergi teadmisi kohandatud plokkide kirjutamise kohta. Keskendume ainult meedia \u00fcleslaadija osale, mitte sellele, kuidas registreerida ja teha Gutenbergi blokk. Kui te pole kindel, kuidas kohandatud Gutenbergi plokki kirjutada, on mul \u00f5petuste seeria, mis h\u00f5lmab t\u00e4pselt seda:<\/p>\n<p>Kui see on eemal, sukeldume otse sisse!<\/p>\n<h2>Mida me teeme<\/h2>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153621-61e511f57cf93.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153621-61e511f57cf93.png\" alt=\"Kuidas lisada oma kohandatud WordPressi Gutenbergi plokki pildivalik\" ><\/a><\/p>\n<p>Valitud meediumifunktsioon on funktsionaalselt t\u00e4pselt sama, mis WordPressi esilet\u00f5stetud pildifunktsioon. Lisame inspektorisse paneeli, mis koosneb nupust pildi valimiseks.<\/p>\n<p>Kui kl\u00f5psate nupul, avaneb aken &quot;Vali v\u00f5i laadige \u00fcles meedium&quot;, mis v\u00f5imaldab teil valida faili meediumiteegist. Meediumiteek on piiratud ainult piltide kuvamisega. Kui pilt on valitud, h\u00fcpikaken sulgub ja paneel kuvab faili eelvaate. valitud pildi v\u00e4ike pisipilt. All kuvatakse eelvaate nupud pildi muutmiseks ja eemaldamiseks. T\u00e4pselt nagu esiletoodud pildi puhul.<\/p>\n<p>See \u00f5petus eeldab, et kasutate valitud pilti ploki taustana \u2013 lihtsalt n\u00e4itena. Seet\u00f5ttu salvestame pildi URL-i. Lisan n\u00e4ite, kuidas valitud pilti kasutada (nii funktsioonis <code>edit<\/code>kui ka <code>save<\/code>funktsioonis). Pildi valimisel kuvatakse pilt meie ploki taustana nii redaktoris kui ka eesmises.<\/p>\n<p>Meediumi ID ja meediumi URL-i salvestame ploki atribuutidesse. Kood kasutab ID-ga valitud meediumi kohta lisateabe p\u00e4rimiseks paketis <code>withSelect<\/code>sisalduvat k\u00f5rgema j\u00e4rgu komponenti .<code>wp.data<\/code><\/p>\n<p>Samuti &quot;laenan&quot; klassinimesid WordPressi esilet\u00f5stetud pildifunktsioonidest, et k\u00f5ik n\u00e4eks hea v\u00e4lja ja poleks vaja ise CSS-i kirjutada. See on loomulikult vabatahtlik.<\/p>\n<h2>Valitud kandja salvestamine atribuutidesse<\/h2>\n<p>See, mida peate oma ploki atribuutidesse salvestama, on pisut teie enda otsustada. Ilmselgelt peame salvestama meediumi ID. Sellest v\u00f5ib piisata, kui te ei pea skriptikoodis kuskil kasutama meedia URL-i. N\u00e4iteks kui kasutate <code>ServerSideRender<\/code>kohta, kus PHP vastutab ploki v\u00e4ljundi renderdamise eest. Sel juhul saate h\u00f5lpsasti meediumi ID-st pildi URL-i hankida, kasutades n\u00e4iteks <code>[wp_get_attachment_image_src](https:\/\/developer.wordpress.org\/reference\/functions\/wp_get_attachment_image_src\/)()<\/code>. Allolevas n\u00e4ites n\u00e4itan aga lihtsat n\u00e4idet pildi kuvamisest meie ploki taustana, seega salvestan atribuudina ka meediumi URL-i. Kasutame URL-i atribuuti nii <code>edit<\/code>(tausta lisamiseks redaktoris) kui ka <code>save<\/code>(tausta lisamiseks kasutajaliidesesse).<\/p>\n<p>Alustame oma atribuutide m\u00e4\u00e4ratlemisest. Meediumi ID peaks olema t\u00fc\u00fcbinumber ja vaikimisi 0. See muudab v\u00f5rdlemise lihtsaks. Ja meediumi URL peaks olema t\u00fc\u00fcpstring ja vaikimisi t\u00fchi string.<\/p>\n<pre><code>attributes: {\n    mediaId: {\n        type: 'number',\n        default: 0\n    },\n    mediaUrl: {\n        type: 'string',\n        default: ''\n    }\n},<\/code><\/pre>\n<h2>Komponendi loomine<\/h2>\n<p>Koodi korrap\u00e4rasemaks muutmiseks m\u00e4\u00e4ratleme ploki <code>edit<\/code>funktsiooni jaoks eraldi komponendi. Edastame selle komponendi hiljem <code>withSelect<\/code>oma komponendi \u00fcmber m\u00e4hkimiseks.<\/p>\n<p><code>&lt;div&gt;<\/code>Komponendi tagastuses renderdame ploki sisu jaoks lihtsa. Eeldan, et n\u00e4idissisu asendamiseks blokeerite v\u00f5i blokeerite tegeliku sisu. Samuti renderdame <code>InspectorControls<\/code>(pakett <code>wp.blockEditor<\/code>), et lisada inspektorile jaotis. Praegu lisan t\u00fchja <code>PanelBody<\/code>sees <code>InspectorControls<\/code>. Lisan <code>&lt;div&gt;<\/code>sama klassiga, mida kasutab WordPressi esilet\u00f5stetud piltide jaotis. See tagab, et meie stiil n\u00e4eb hea v\u00e4lja. Hiljem t\u00e4idame selle <code>PanelBody<\/code>valitud meediumifunktsiooni koodiga.<\/p>\n<p>Kuid k\u00f5igepealt h\u00e4vitame faili alguses vajaliku komponendi:<\/p>\n<pre><code>const { InspectorControls } = wp.blockEditor;\nconst { PanelBody } = wp.components;\nconst { Fragment } = wp.element;<\/code><\/pre>\n<p>\u00dclalpool <code>registerBlockType<\/code>m\u00e4\u00e4ratlen lihtsa komponendi nimega <code>BlockEdit<\/code>. Kui eelistate selle teisaldada eraldi faili, v\u00f5ite seda teha. See on tavaline ja soovitatav, kuid selle \u00f5petuse jaoks hoian asjad lihtsana ja hoian seda samas failis.<\/p>\n<pre><code>const BlockEdit = (props) =&gt; {\n    const { attributes, setAttributes } = props;\n\u00a0\n    return (&lt;Fragment&gt;\n            &lt;InspectorControls&gt;\n                &lt;PanelBody\n                    title={__('Select block background image', 'awp')}\n                    initialOpen={ true }\n                &gt;\n                    &lt;div className=\"editor-post-featured-image\"&gt;\n                        ...We will add code here...\n                    &lt;\/div&gt;\n                &lt;\/PanelBody&gt;\n            &lt;\/InspectorControls&gt;\n            &lt;div&gt;\n                ... Your block content here...\n            &lt;\/div&gt;\n        &lt;\/Fragment&gt;\n    );\n};<\/code><\/pre>\n<p>N\u00fc\u00fcd tahame selle komponendi oma <code>edit<\/code>funktsioonis renderdada. Kuid me tahame selle pakkida <code>withSelect<\/code>.<\/p>\n<h2>Funktsioonis kasutamine <code>withSelect<\/code>_<code>edit<\/code><\/h2>\n<p>Kui te ei tunne <code>withSelect<\/code>, on see kasulik k\u00f5rgemat j\u00e4rku komponent, mis v\u00f5imaldab meil p\u00e4ringuid teha. Selle abil saate n\u00e4iteks postitusi p\u00e4rida. Siiski kasutame funktsiooni <code>select('core').getMedia()<\/code>meediumi ID p\u00e4ringu tegemiseks. Vastuseks saame objekti kogu meedia teabega. Meediaobjekt, mille me vastuseks saame, esitatakse seej\u00e4rel meie <code>BlockEdit<\/code>komponendi rekvisiidina, mis on kasutusvalmis. Tubli.<\/p>\n<p>Teeme meediumi p\u00e4ringu ainult siis, kui meediumi ID atribuudiks on tegelikult seatud midagi muud kui 0. Meie redigeerimisfunktsioon n\u00e4eb v\u00e4lja selline:<\/p>\n<pre><code>edit: withSelect((select, props) =&gt; {\n    return { media: props.attributes.mediaId? select('core').getMedia(props.attributes.mediaId): undefined };\n})(BlockEdit),<\/code><\/pre>\n<p>P\u00e4ris l\u00f5pus, p\u00e4rast <code>withSelect<\/code>j\u00e4rjekorras sulgemist, <code>#3<\/code>palume <code>withSelect<\/code>oma <code>BlockEdit<\/code>komponendi tagastada. Sellega on meie <code>BlockEdit<\/code>komponendil n\u00fc\u00fcd juurdep\u00e4\u00e4s <code>props.media<\/code>.<\/p>\n<h2>Meediumivaliku renderdamine<\/h2>\n<p>L\u00f5puks tuleb l\u00f5bus osa: inspektori osa.<\/p>\n<p>Komponent, millest oleme huvitatud, on <code>MediaUpload<\/code>(pakett <code>wp.blockEditor<\/code>). Kui olete huvitatud, on Gutenbergi WordPressi Githubi repos <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/tree\/master\/packages\/block-editor\/src\/components\/media-upload\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">selle komponendi kohta dokumentatsiooni<\/a>. Samuti m\u00e4hime selle komponendi komponendi sisse nimega <code>MediaUploadCheck<\/code>(pakett <code>wp.blockEditor<\/code>). See komponent tagab, et praegusel kasutajal on meediateegi kasutamise v\u00f5imalused, seega on selle kasutamine hea tava.<\/p>\n<p>Komponendil <code>MediaUpload<\/code>on vajalik tugi: <code>render<\/code>. See komponent t\u00f6\u00f6tab nii, et m\u00e4\u00e4ratleme <code>render<\/code>rekvisiidi jaoks funktsiooni, kus renderdame v\u00e4ljundi \u201emeediumi \u00fcleslaadija ala&quot; jaoks. Meie puhul renderdame <code>Button<\/code>(paketi <code>wp.components<\/code>). MediaUploadi renderdusrekvisiidis saame juurdep\u00e4\u00e4su <code>open<\/code>funktsioonile, mida saame kutsuda, et panna WordPress avama Media Library h\u00fcpikakna:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153621-61e511f6d571d.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153621-61e511f6d571d.png\" alt=\"Kuidas lisada oma kohandatud WordPressi Gutenbergi plokki pildivalik\" ><\/a><\/p>\n<p>Saadaval on veel m\u00f5ned rekvisiidid <code>MediaUpload<\/code>. Selles \u00f5petuses k\u00e4sitleme selle funktsionaalseks muutmiseks olulisi, kuid saate m\u00e4ngida veel m\u00f5nega. Teid v\u00f5ib v\u00e4hemalt huvitada rekvisiit, <code>allowedTypes<\/code>kus saate piirata, milliseid failit\u00fc\u00fcpe on v\u00f5imalik teegis valida. Meie puhul m\u00e4\u00e4rasime selle lubama ainult pilte.<\/p>\n<h3>Lisades<code>MediaUpload<\/code><\/h3>\n<p>Destruktureerige esmalt uued komponendid;<\/p>\n<pre><code>const { Button } = wp.components;\nconst { MediaUpload, MediaUploadCheck } = wp.blockEditor;<\/code><\/pre>\n<p>Lisame <code>MediaUploadCheck<\/code>ja <code>MediaUpload<\/code>meie <code>div<\/code>sisse <code>PanelBody<\/code>:<\/p>\n<pre><code>&lt;div className=\"editor-post-featured-image\"&gt;\n    &lt;MediaUploadCheck&gt;\n        &lt;MediaUpload\n            allowedTypes={ ['image'] }\n            render={({open}) =&gt; (&lt;Button \n                    className={attributes.mediaId == 0? 'editor-post-featured-image__toggle': 'editor-post-featured-image__preview'}\n                    onClick={open}\n                &gt;\n                    {attributes.mediaId == 0 &amp;&amp; __('Choose an image', 'awp')}\n                &lt;\/Button&gt;\n            )}\n        \/&gt;\n    &lt;\/MediaUploadCheck&gt;\n&lt;\/div&gt;<\/code><\/pre>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153621-61e511fa0bf3f.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153621-61e511fa0bf3f.png\" alt=\"Kuidas lisada oma kohandatud WordPressi Gutenbergi plokki pildivalik\" ><\/a><\/p>\n<p>Eespool olev kood destruktureerib <code>open<\/code>funktsiooni <code>render<\/code>. Teeme lihtsaks, <code>Button<\/code>kus selle <code>onClick<\/code>atribuut funktsiooni k\u00e4ivitab <code>open<\/code>. Lisasin ka samad klassinimed, mis WordPressi esilet\u00f5stetud pildifunktsioonidele, tagamaks, et meil pole vaja stiili lisada.<\/p>\n<p>Komponendi sees <code>Button<\/code>kontrollime, kas pilt on seatud v\u00f5i mitte (<code>attributes.mediaId<\/code>). Kui ei ole, kordame teksti &quot;Vali pilt&quot;. Peaksime selle n\u00fc\u00fcd oma plokki saama.<\/p>\n<p>Kui kl\u00f5psate nuppu, peaks ilmuma h\u00fcpikaken Media Library. Kujutise valimine aga praegu ei toimi, kuna meil puuduvad k\u00fcljes olevad rekvisiidid <code>onSelect<\/code>ja. Teeme selle n\u00fc\u00fcd korda. Seadsime valitud meediumi ID-le ja k\u00e4ivitame funktsiooni, mille hiljem oma komponendi sees m\u00e4\u00e4ratleme.<code>value``MediaUpload``value``onSelect<\/code><\/p>\n<pre><code>...\n&lt;MediaUploadCheck&gt;\n    &lt;MediaUpload\n        onSelect={onSelectMedia}\n        value={attributes.mediaId}\n        allowedTypes={ ['image'] }\n        ...<\/code><\/pre>\n<p>M\u00e4\u00e4ratleme <code>onSelectMedia<\/code>funktsiooni meie komponendis.<\/p>\n<h3>Meediumivaliku k\u00e4sitlemine<\/h3>\n<p><strong>M\u00e4rkus<\/strong>: defineerin oma funktsioonid noolefunktsioonidena (<code>onSelectMedia =() =&gt; { }<\/code>). Noolefunktsioonid on ESNextis \u00fcsna uued ja \u00fcsna nutikad. Negatiivne k\u00fclg on see, et noolefunktsioonide kasutamine eeldab selle toe lisamist oma Babeli konfiguratsioonis. Kui te pole seda teinud, soovitan vaadata <a href=\"https:\/\/awhitepixel.com\/blog\/how-to-create-custom-gutenberg-blocks-part-1-setting-up-the-development-environment\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">selle postituse<\/a> pealkirja &quot;Babeli seadistamine&quot; alt .<\/p>\n<p>Vahetult enne komponendi tagastuslauset defineerin <code>onSelectMedia<\/code>funktsiooni. K\u00f5ik, mida me peame tegema, on v\u00e4rskendada oma atribuute kasutades <code>setAttributes()<\/code>. Parameetrina <code>onSelectMedia<\/code>saame meediumiobjekti. Me lihtsalt ammutame meediaobjektist selle, mida vajame. Meie puhul on see meediumi ID ja t\u00e4issuuruses URL, mis on vastavalt atribuudid <code>id<\/code>.<code>url<\/code><\/p>\n<pre><code>const BlockEdit = (props) =&gt; {\n    const { attributes, setAttributes } = props;\n\u00a0\n    const onSelectMedia = (media) =&gt; {\n        props.setAttributes({\n            mediaId: media.id,\n            mediaUrl: media.url\n        });\n    }\n\u00a0\n    return(\n        ...<\/code><\/pre>\n<p>Proovige seda kohe ja saate n\u00fc\u00fcd valida pildi meediumiteegist. Valitud meedium salvestatakse ploki atribuutidesse. Kuid Inspektoris pole selle eelvaadet veel n\u00e4ha ja kuna olete pildi valinud, kaob pildi valimise nupp. Paneel on n\u00fc\u00fcd t\u00fchi. J\u00e4rgmine samm on eelvaate renderdamine iga kord, kui pilt on valitud, samuti valikuv\u00f5imaluste pakkumine selle eemaldamiseks v\u00f5i muutmiseks.<\/p>\n<h2>Eelvaatepildi renderdamine<\/h2>\n<p>Rekvisiidis <code>Button<\/code>renderdatava komponendi sees kordame teksti &quot;Vali pilt&quot;, kui pilt pole veel m\u00e4\u00e4ratud <code>MediaUpload<\/code>. <code>render<\/code>Kuid me peame lisama koodi, kui pilt on siin seatud; eelvaade.<\/p>\n<p>Kena eelvaate renderdamiseks kasutame komponenti <code>ResponsiveWrapper<\/code>(pakett <code>wp.components<\/code>). T\u00e4ielikuks <code>ResponsiveWrapper<\/code>toimimiseks peame tagama k\u00f5rguse ja laiuse rekvisiidid. Vajame ka pisipildi URL-i. Inspektori sees eelvaate kuvamiseks pole m\u00f5tet kasutada t\u00e4ielikku URL-i (mis v\u00f5ib olla hiiglaslik). Siit tulebki rekvisiit <code>withSelect<\/code>. Komponendi sees renderdame lihtsa <code>&lt;img&gt;<\/code>HTML-m\u00e4rgendi.<\/p>\n<p>K\u00f5igepealt destruktureerime vajaliku komponendi:<\/p>\n<pre><code>const { ResponsiveWrapper } = wp.components;<\/code><\/pre>\n<pre><code>&lt;Button \n    className={attributes.mediaId == 0? 'editor-post-featured-image__toggle': 'editor-post-featured-image__preview'}\n    onClick={open}\n&gt;\n    {attributes.mediaId == 0 &amp;&amp; __('Choose an image', 'awp')}\n    {props.media != undefined &amp;&amp; \n        &lt;ResponsiveWrapper\n                naturalWidth={ props.media.media_details.width }\n            naturalHeight={ props.media.media_details.height }\n            &gt;\n                &lt;img src={props.media.source_url} \/&gt;\n            &lt;\/ResponsiveWrapper&gt;\n    }\n&lt;\/Button&gt;<\/code><\/pre>\n<p>Nagu n\u00e4ete, p\u00e4\u00e4seme juurde rekvisiidile, mille <code>withSelect<\/code>komponent meile andis, <code>props.media<\/code>. Toome objektilt meediumi pisipildi suuruse laiuse, k\u00f5rguse ja URL-i.<\/p>\n<p>N\u00fc\u00fcd peaksite saama valitud pildist kena eelvaate!<\/p>\n<p>Kuna renderdame eelvaatepildi sees <code>Button<\/code>, k\u00e4ivitab eelvaatepildil kl\u00f5psamine funktsiooni, <code>Button<\/code>milleks <code>onClick<\/code>on meediateegi avamine. Nii saad juba valitud pilti muuta.<\/p>\n<p>Praegu ei saa valitud pilti eemaldada ega l\u00e4htestada. Teeme selle korda!<\/p>\n<h3>Eemaldamisfunktsiooni lisamine<\/h3>\n<p>Peaksime pakkuma v\u00e4hemalt kasutajale v\u00f5imalust valitud pilt eemaldada. Praeguse seisuga saate p\u00e4rast pildi valimist seda ainult muuta, kuid mitte eemaldada.<\/p>\n<p>Teeme seda sama, mida WordPress teeb esilet\u00f5stetud pildi puhul: uus <code>Button<\/code>eelvaatepildi all (t\u00e4iesti v\u00e4ljaspool seda <code>MediaUploadCheck<\/code>). Pakkudes sellele nutikaid rekvisiite, <code>Button<\/code>muudame selle <code>isLink<\/code>punase tekstiv\u00e4rviga () lingiks (<code>isDestructive<\/code>). Lugege <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/tree\/master\/packages\/components\/src\/button\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Buttoni dokumentatsiooni,<\/a> et n\u00e4ha, mis veel on v\u00f5imalik. M\u00e4hkime nupu veel \u00fche sisse <code>MediaUploadCheck<\/code>, et tagada kasutajal \u00f5iged v\u00f5imalused.<\/p>\n<pre><code>        ...\n        &lt;\/MediaUploadCheck&gt;\n        {attributes.mediaId != 0 &amp;&amp; \n            &lt;MediaUploadCheck&gt;\n                &lt;Button onClick={removeMedia} isLink isDestructive&gt;{__('Remove image', 'awp')}&lt;\/Button&gt;\n            &lt;\/MediaUploadCheck&gt;\n        }\n    &lt;\/div&gt;\n&lt;\/PanelBody&gt;<\/code><\/pre>\n<p>Selle s\u00fcndmuse jaoks <code>Button<\/code>k\u00e4ivitame <code>onClick<\/code>oma komponendi sees uue funktsiooni: <code>removeMedia()<\/code>. M\u00e4\u00e4ratleme selle kuskil vahetult enne komponendi tagastusfunktsiooni, nagu tegime <code>onSelectMedia<\/code>.<\/p>\n<pre><code>const removeMedia =() =&gt; {\n    props.setAttributes({\n        mediaId: 0,\n        mediaUrl: ''\n    });\n}<\/code><\/pre>\n<p>K\u00f5ik see funktsioon on meie kahe atribuudi v\u00e4\u00e4rtuse l\u00e4htestamine.<\/p>\n<p>N\u00fc\u00fcd on meil kena ja selge link pildi eemaldamiseks:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153621-61e511faedb09.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153621-61e511faedb09.png\" alt=\"Kuidas lisada oma kohandatud WordPressi Gutenbergi plokki pildivalik\" ><\/a><\/p>\n<p>Kui kl\u00f5psate uuel nupul, kaob valitud pilt ja nupp ise ning uuesti ilmub pildi valimise nupp.<\/p>\n<h3>Asendusnupu lisamine<\/h3>\n<p>See samm on t\u00e4iesti vabatahtlik. Nagu varem mainitud, avaneb pildi eelvaatepildil kl\u00f5psamine Media Library ja v\u00f5imaldab pilti muuta. Kuid see ei pruugi k\u00f5igile nii intuitiivne olla. WordPress lisab pildi muutmiseks eraldi nupu, et see oleks v\u00e4ga selge. Meie saame sama teha.<\/p>\n<p>Pildi muutmise nupu renderdamiseks kordame p\u00f5him\u00f5tteliselt koodi, mis meil on pildi valimiseks: teine <code>MediaUpload<\/code>\u200b\u200bkomponent. Pakume sama funktsiooni <code>onSelect<\/code>nagu <code>allowedFileTypes<\/code>varemgi <code>value<\/code>. Rekvisiidi sees <code>render<\/code>renderdame <code>MediaUpload<\/code>lihtsalt teise <code>Button<\/code>, mis avab meediumiteegi. Asetame selle nupu enne nuppu Eemalda \u2013 kuna see on l\u00f5ppkasutaja jaoks m\u00f5ttekam:<\/p>\n<pre><code>&lt;\/MediaUploadCheck&gt;\n{attributes.mediaId != 0 &amp;&amp; \n    &lt;MediaUploadCheck&gt;\n        &lt;MediaUpload\n            title={__('Replace image', 'awp')}\n            value={attributes.mediaId}\n            onSelect={onSelectMedia}\n            allowedTypes={['image']}\n            render={({open}) =&gt; (&lt;Button onClick={open} isDefault isLarge&gt;{__('Replace image', 'awp')}&lt;\/Button&gt;\n            )}\n        \/&gt;\n    &lt;\/MediaUploadCheck&gt;\n}\n{attributes.mediaId != 0 &amp;&amp; \n    &lt;MediaUploadCheck&gt;\n        &lt;Button onClick={removeMedia} ...<\/code><\/pre>\n<p>N\u00fc\u00fcd peaksite saama selle:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153621-61e511f57cf93.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153621-61e511f57cf93.png\" alt=\"Kuidas lisada oma kohandatud WordPressi Gutenbergi plokki pildivalik\" ><\/a><\/p>\n<h2>Valitud pildi kasutamine<\/h2>\n<p>N\u00fc\u00fcdseks peaks juba \u00fcsna selge olema, kuidas saad valitud pilti kasutada. Meediumi ID ja meediumi URL on salvestatud ploki atribuutidesse. Lihtsa n\u00e4itena lisan aga koodi, mis seab valitud pildi ploki taustaks. Koodi saab teha t\u00e4pselt sama nii funktsioonides <code>edit<\/code>kui ka <code>save<\/code>funktsioonides. Loome lihtsalt stiiliobjekti, mille rakendame ploki \u00fcmbrislausele. Stiiliobjektis m\u00e4\u00e4rame meediumi URL-i taustapildi.<\/p>\n<pre><code>    ...\n    const blockStyle = {\n        backgroundImage: attributes.mediaUrl != 0? 'url(\"' + attributes.mediaUrl + '\")': 'none'\n    };\n\u00a0\n    return(\n        &lt;Fragment&gt;\n            &lt;InspectorControls&gt;\n            ...\n            &lt;\/InspectorControls&gt;\n            &lt;div style={blockStyle}&gt;\n                ... Your block content here...\n            &lt;\/div&gt;\n        &lt;\/Fragment&gt;\n        ...<\/code><\/pre>\n<p>\u00dclej\u00e4\u00e4nud kohandatud ploki sisuga v\u00f5ib see h\u00f5lpsasti v\u00e4lja n\u00e4ha umbes selline:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153621-61e511fd78dce.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153621-61e511fd78dce.png\" alt=\"Kuidas lisada oma kohandatud WordPressi Gutenbergi plokki pildivalik\" ><\/a><\/p>\n<p>Kui rakendate plokistiili m\u00f5lemas <code>edit<\/code>ja <code>save<\/code>, peaks teie plokk saama valitud meediumi taustaks. Nii toimetaja sees kui ka frontendis.<\/p>\n<h2>J\u00e4reldus<\/h2>\n<p>Meediumiteegist pildi (v\u00f5i faili) valimine on funktsioon, mida Gutenbergi arendajana kahtlemata oma plokkide jaoks vajate. Oleme \u00f5ppinud, kuidas lisada oma kohandatud Gutenbergi plokis funktsiooni meediumiteegist pildi valimiseks. Oleme seda teinud samamoodi nagu WordPress ise teeb seda esiletoodud pildi puhul. (Redigeeri mai 2020: WordPress on n\u00fc\u00fcd v\u00e4rskendanud kasutamiseks esiletoodud pilti <code>useSelect<\/code>, selle asemel Reacti konks). See tagab, et meie kood ei ole &quot;h\u00e4kkinud&quot; ja tulevaste v\u00e4rskenduste puhul on suur oht, et see puruneb.<\/p>\n<p>Andke mulle teada, kui teil on sellest kasu olnud!<\/p>\n<h2>T\u00e4ielik kood<\/h2>\n<p>Allpool on t\u00e4ielik kood kohandatud ploki jaoks, millel on valitud meediumifunktsioon. Ja tegelikult ei midagi muud. See osa on teie otsustada!<\/p>\n<pre><code>const { registerBlockType } = wp.blocks;\nconst { InspectorControls, MediaUpload, MediaUploadCheck } = wp.blockEditor;\nconst { PanelBody, Button, ResponsiveWrapper } = wp.components;\nconst { Fragment } = wp.element;\nconst { withSelect } = wp.data;\nconst { __ } = wp.i18n;\nconst BlockEdit = (props) =&gt; {\n    const { attributes, setAttributes } = props;\n\u00a0\n    const removeMedia = () =&gt; {\n        props.setAttributes({\n            mediaId: 0,\n            mediaUrl: ''\n        });\n    }\n    const onSelectMedia = (media) =&gt; {\n        props.setAttributes({\n            mediaId: media.id,\n            mediaUrl: media.url\n        });\n    }\n\u00a0\n    const blockStyle = {\n        backgroundImage: attributes.mediaUrl != ''? 'url(\"' + attributes.mediaUrl + '\")': 'none'\n    };\n    return (&lt;Fragment&gt;\n            &lt;InspectorControls&gt;\n                &lt;PanelBody\n                    title={__('Select block background image', 'awp')}\n                    initialOpen={ true }\n                &gt;\n                    &lt;div className=\"editor-post-featured-image\"&gt;\n                        &lt;MediaUploadCheck&gt;\n                            &lt;MediaUpload\n                                onSelect={onSelectMedia}\n                                value={attributes.mediaId}\n                                allowedTypes={ ['image'] }\n                                render={({open}) =&gt; (&lt;Button \n                                        className={attributes.mediaId == 0? 'editor-post-featured-image__toggle': 'editor-post-featured-image__preview'}\n                                        onClick={open}\n                                    &gt;\n                                        {attributes.mediaId == 0 &amp;&amp; __('Choose an image', 'awp')}\n                                        {props.media != undefined &amp;&amp; \n                                                &lt;ResponsiveWrapper\n                                                naturalWidth={ props.media.media_details.width }\n                                            naturalHeight={ props.media.media_details.height }\n                                            &gt;\n                                                &lt;img src={props.media.source_url} \/&gt;\n                                            &lt;\/ResponsiveWrapper&gt;\n                                            }\n                                    &lt;\/Button&gt;\n                                )}\n                            \/&gt;\n                        &lt;\/MediaUploadCheck&gt;\n                        {attributes.mediaId != 0 &amp;&amp; \n                            &lt;MediaUploadCheck&gt;\n                                &lt;MediaUpload\n                                    title={__('Replace image', 'awp')}\n                                    value={attributes.mediaId}\n                                    onSelect={onSelectMedia}\n                                    allowedTypes={['image']}\n                                    render={({open}) =&gt; (&lt;Button onClick={open} isDefault isLarge&gt;{__('Replace image', 'awp')}&lt;\/Button&gt;\n                                    )}\n                                \/&gt;\n                            &lt;\/MediaUploadCheck&gt;\n                        }\n                        {attributes.mediaId != 0 &amp;&amp; \n                            &lt;MediaUploadCheck&gt;\n                                &lt;Button onClick={removeMedia} isLink isDestructive&gt;{__('Remove image', 'awp')}&lt;\/Button&gt;\n                            &lt;\/MediaUploadCheck&gt;\n                        }\n                    &lt;\/div&gt;\n                &lt;\/PanelBody&gt;\n            &lt;\/InspectorControls&gt;\n            &lt;div style={blockStyle}&gt;\n                ... Your block content here...\n            &lt;\/div&gt;\n        &lt;\/Fragment&gt;\n    );\n};\nregisterBlockType('awp\/imageselectinspector', {\n    title: 'AWP Imageselect',\n    icon: 'smiley',\n    category: 'layout',\n    supports: {\n        align: true\n    },\n    attributes: {\n        mediaId: {\n            type: 'number',\n            default: 0\n        },\n        mediaUrl: {\n            type: 'string',\n            default: ''\n        }\n    }, \n    edit: withSelect((select, props) =&gt; {\n        return { media: props.attributes.mediaId? select('core').getMedia(props.attributes.mediaId): undefined };\n    })(BlockEdit),\n    save: (props) =&gt; {\n        const { attributes } = props;\n        const blockStyle = {\n            backgroundImage: attributes.mediaUrl != ''? 'url(\"' + attributes.mediaUrl + '\")': 'none'\n        };\n        return (&lt;div style={blockStyle}&gt;\n                ... Your block content here...\n            &lt;\/div&gt;\n        );\n    }\n});<\/code><\/pre>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/awhitepixel.com\" class=\"external external_icon\">awhitepixel.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>See \u00f5petus selgitab, kuidas lisada oma kohandatud WordPressi Gutenbergi ploki jaoks Inspectoris olevasse meediumiteeki pildi valimise v\u00f5i \u00fcleslaadimise nupp.<\/p>\n","protected":false},"author":1,"featured_media":153622,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[894,937,937,729,729,833,894,1110,842,802,802,812,812,833,842,863,863],"tags":[1165],"class_list":{"0":"post-233392","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","6":"hentry","7":"category-kood","8":"category-gutenberg-4","10":"category-javascript-4","12":"category-juhend-algajatele","14":"category-n-a","15":"category-opetused","16":"category-php-4","18":"category-pistikprogrammid","22":"category-wordpress-4","24":"tag-affiai-et"},"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/233392","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/comments?post=233392"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/233392\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media\/153622"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media?parent=233392"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/categories?post=233392"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/tags?post=233392"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}