{"id":228214,"date":"2022-10-13T20:33:00","date_gmt":"2022-10-13T17:33:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=228214"},"modified":"2022-11-09T01:19:35","modified_gmt":"2022-11-08T22:19:35","slug":"wordpressi-jaoks-kohandatud-cmb2-lingivalija-juhtelemendi-loomine","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/et\/wordpressi-jaoks-kohandatud-cmb2-lingivalija-juhtelemendi-loomine\/","title":{"rendered":"WordPressi jaoks kohandatud CMB2 lingivalija juhtelemendi loomine"},"content":{"rendered":"\n<p>Selles \u00f5petuses vaatlen, kuidas saate luua kohandatud juhtelemendi, et laiendada <a href=\"https:\/\/wordpress.org\/plugins\/cmb2\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">WebDevStudios CMB2<\/a> (Custom Meta Boxes 2) <a href=\"https:\/\/webdevstudios.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">funktsionaalsust<\/a>.<\/p>\n<p>Arendan veebisaite (ja veebirakendusi) <a href=\"https:\/\/wordpress.org\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">WordPress<\/a> CMS-iga (sisuhalduss\u00fcsteem) ning uue projekti j\u00f5udmisel v\u00f5ite garanteerida, et mul on n\u00f5ue arendada v\u00e4lja kohandatud metakastid, mis v\u00f5imaldavad kasutajal t\u00e4pselt kontrollida saidi sisu ja paigutuse \u00fcle.<\/p>\n<p>Kirjeldan \u00fcksikasjalikult, kuidas ma CMB2 <a href=\"https:\/\/en-gb.wordpress.org\/plugins\/link-picker-for-cmb2\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">jaoks CMB2 juhtlingi valija loosin<\/a> (saadaval k\u00f5igist headest WordPressi pistikprogrammide hoidlatest). Ekraanipilti sellest saab n\u00e4ha allpool.<\/p>\n<p>&quot;Lingivalija&quot; CMB2 juhtnupp t\u00f6\u00f6s<\/p>\n<p>Lingivalija k\u00e4ivitab WordPressi sisseehitatud dialoogi \u201eLingi lisamine\/muutmine&quot;, kui kl\u00f5psate nupul \u201eVali&#8221;. Seda on n\u00e4ha alloleval ekraanipildil:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-169316-61e80b39277e2.png\" alt=\"WordPressi jaoks kohandatud CMB2 lingivalija juhtelemendi loomine\" \/>Nupu vajutamine v\u00f5imaldab valida lingi hulgast (v\u00f5i lisada oma)<\/p>\n<p>Olen kindel, et n\u00f5ustute sellega, et selline juhtseade on v\u00e4ga mugav, kui soovite anda oma saidi toimetajatele v\u00f5imaluse lisada linki ja otsida ka WordPressist selle sisemisi linke, selle asemel, et nad peaksid lingid lingiks l\u00f5ikama ja kleepima. valdkonnas.<\/p>\n<h2>Sissejuhatus \/ Ajalugu<\/h2>\n<p>Neile, kes ei tea, on WordPressi postituse redigeerimisekraanil metakast ja see sisaldab t\u00f5en\u00e4oliselt mitmesuguseid vormi juhtelemente (tekstikastid, ripploendid, m\u00e4rkeruudud jne). Need juhtelemendid v\u00f5imaldavad teie veebisaidi kasutajatel h\u00f5lpsasti muuta saidi kohandatud tekstiosa v\u00f5i funktsioone.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-169316-61e80b39277e2.png\" alt=\"WordPressi jaoks kohandatud CMB2 lingivalija juhtelemendi loomine\" \/><img decoding=\"async\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-169316-61e80b3a6c2f7.png\" alt=\"WordPressi jaoks kohandatud CMB2 lingivalija juhtelemendi loomine\" \/>Erinevate vormijuhtelementidega metakasti n\u00e4ide<\/p>\n<p>WordPress v\u00f5imaldab luua metakaste funktsioonide (nt <code>[add_meta_box](https:\/\/developer.wordpress.org\/reference\/functions\/add_meta_box\/)<\/code>) abil, kuid sellisel viisil metakastide loomine v\u00f5ib olla pikk protsess, millega kaasneb palju koodikordusi (eriti kui soovite kasutada samu vormijuhtelemente mitmes projektis).<\/p>\n<h2>Miks CMB2?<\/h2>\n<p>M\u00f5ned teist v\u00f5ib-olla on kuulnud <a href=\"https:\/\/www.advancedcustomfields.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Advanced Custom Fields<\/a> (ACF), mis pakub GUI-d (graafiline kasutajaliides), mis v\u00f5imaldab teil luua metakaste otse WordPressiga.<\/p>\n<p>ACF ei ole minu arvates <strong>suurep\u00e4rane t\u00f6\u00f6riist<\/strong> \u00fchegi skaleeritava veebilahenduse jaoks. Pistikprogramm s\u00f5ltub liiga palju andmebaasis salvestatavatest andmetest. See p\u00f5hjustab saidil muudatuste juurutamisel valu, kuna te ei saa lihtsalt koodi \u00fcles l\u00fckata ja muudatusi kohe n\u00e4ha. Selle asemel peate uuesti tegema t\u00f6\u00f6d erinevates juurutuskeskkondades (lavastamine, otse\u00fclekanne jne). Seega vajasime lahendust, mis v\u00f5imaldaks meil programmiliselt metakaste luua. Sisestage CMB2.<\/p>\n<p>Enne CMB2 kasutuselev\u00f5ttu kasutasime varem nende armsate inimeste <a href=\"https:\/\/github.com\/humanmade\/Custom-Meta-Boxes\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">HM -i kohandatud metabokse<\/a> <a href=\"https:\/\/hmn.md\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Human<\/a> Made&#8217;is (mis sai alguse WebDevStudio eelk\u00e4ija CMB2-le).<\/p>\n<p>Meile meeldisid HM kohandatud metakastid ja k\u00f5ige lihtsamate koodil\u00f5ikude abil saime kiiresti luua kohandatud metabokse, et teha peaaegu k\u00f5ike!<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-169316-61e80b3c08039.png\" alt=\"WordPressi jaoks kohandatud CMB2 lingivalija juhtelemendi loomine\" \/>HM kohandatud metakastide m\u00e4rgistuse n\u00e4ide (see on Instagrami metaboksi m\u00e4rgistus esimesel ekraanipildil)<\/p>\n<p>Miks siis \u00fcle minna CMB2-le? Noh, HM Custom Meta Boxes ei p\u00e4lvinud kahjuks suurt armastust (r\u00e4\u00e4kisin selle peaarendajaga ja ta on v\u00e4ga h\u00f5ivatud mees), samas kui CMB2 liikus edasi uute funktsioonide, uute juhtelementidega ja see oli kogunud t\u00f5mbej\u00f5udu. WordPressi kogukonnas, kus paljud inimesed on selle kasutusele v\u00f5tnud ja selle laiendamiseks pistikprogrammid v\u00e4lja lasknud (sealhulgas mitmed meie partneragentuurid).<\/p>\n<p>L\u00f5puks, nagu v\u00f5isite aru saada, on CMB2-ga t\u00f6\u00f6tamine sama uskumatult lihtne, kui olime harjunud, kuna m\u00f5lemal platvormil on \u00fchine esivanem.<\/p>\n<h2>\u00d5petus<\/h2>\n<p>Enne kui alustame, on iga\u00fchel oma ideaalid WordPressi pistikprogrammi loomise kohta ja ma olen proovinud m\u00f5ndagi, kuid Tom J Nowelli \u00f5petus <a href=\"https:\/\/tomjn.com\/2015\/06\/24\/root-composition-in-wordpress-plugins\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">WordPressi<\/a> juurkompositsioonist muutis t\u00e4ielikult minu t\u00f6\u00f6viisi. Minu arvates on selle l\u00e4henemine puhas, lihtne ja see muudab iga pistikprogrammi tulevase hooldamise lihtsaks. Kui otsite pistikprogrammi <a href=\"https:\/\/wordpress.org\/plugins\/link-picker-for-cmb2\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Link Picker for CMB2 allikast<\/a>, n\u00e4ete, milliseid meetodeid ta praktikas \u00f5petab.<\/p>\n<h3>Vormi ehitamine<\/h3>\n<p>Lingivalijat renderdava vormi loomiseks peame esimese asjana haakima <code>cmb2_render_[control_name]<\/code>toiminguga. Nagu ma nimetasin seda juhtelementi link_pickeriks, saame konksu l\u00f5pule viia j\u00e4rgmiselt:<\/p>\n<pre><code>&lt;?php\nadd_action( 'cmb2_render_link_picker', array( $this, 'cmb2_render_link_picker' ), 10, 5 );\n`\n<\/code><\/pre>\n<p>Neile, kes <code>add_action<\/code>konksust tegelikult aru ei saa, toimib see j\u00e4rgmiselt:<\/p>\n<ol>\n<li>Esimene argument <code>cmb2_render_link_picker<\/code>on konksu nimi, mille k\u00fclge tahame haakida.<\/li>\n<li>Teine argument <code>array( $this, 'cmb2_render_link_picker' )<\/code>on funktsioon, mida tahame selle konksu k\u00e4ivitamisel kutsuda. Pange t\u00e4hele, et ma m\u00e4hkin selle massiivi, mille <code>$this<\/code>esimene parameeter on, kuna ma kutsun funktsiooni klassi sees. Kui te ei t\u00f6\u00f6ta klassidega, v\u00f5ite lihtsalt kasutada funktsiooni nime <code>cmb2_render_link_picker<\/code>.<br \/>\n3., on <code>10<\/code>j\u00e4rjekord, mille j\u00e4rgi tahame funktsiooni k\u00e4ivitada (mida v\u00e4iksem on number, seda varem see toimingu kutsumisel k\u00e4ivitub).<\/li>\n<li>See <code>5<\/code>on parameetrite hulk, mis edastatakse funktsioonile, mida ma kutsun (see selgub peagi).<\/li>\n<\/ol>\n<p>J\u00e4rgmisena loome funktsiooni, mis vormi renderdab:<\/p>\n<pre><code>&lt;?php\n\npublic function cmb2_render_link_picker( $field, $value, $object_id, $object_type, $field_type_object) {\n\u2026\n}\n`\n<\/code><\/pre>\n<p>Olen j\u00e4tnud \u00fclaltoodud koodi &quot;DocBlock&quot;, mis kirjeldab, mida iga <code>cmb2_render_link_picker()<\/code>funktsiooni edastatud parameeter teeb.<\/p>\n<p>Pange t\u00e4hele, et minu funktsioon algab <code>public<\/code>deklaratsiooniga. See on j\u00e4llegi sellep\u00e4rast, et ma t\u00f6\u00f6tan klassis. Kui te ei t\u00f6\u00f6ta klassidega, v\u00f5ite selle vahele j\u00e4tta.<\/p>\n<p>Selle v\u00e4lja v\u00e4\u00e4rtus edastatakse <code>$value<\/code>parameetri kaudu funktsioonile. Selle v\u00e4lja puhul l\u00e4bime massiivi, kuna meie juhtelemendil on kolm eraldi elementi:<\/p>\n<ul>\n<li>Tekst<\/li>\n<li>URL<\/li>\n<li>Kui link avaneb uues aknas (v\u00f5i mitte)<\/li>\n<\/ul>\n<p>Kuna <code>$value<\/code>ei ole alati m\u00e4\u00e4ratud (n\u00e4iteks juhtelemendi esmakordsel renderdamisel), peame selle initsialiseerima m\u00f5ne vaikev\u00e4\u00e4rtusega. Teeme seda j\u00e4rgmise koodibitiga:<\/p>\n<pre><code>&lt;?php\n$value = wp_parse_args( \n    $value, \n    array(\n        'text'  =&gt; '',\n        'url'   =&gt; '',\n        'blank' =&gt; 'false',) );\n<\/code><\/pre>\n<p>Seej\u00e4rel saame asuda vormi renderdamisega tegelema. Siin on n\u00e4ide esimesest tekstisisestuse juhtelemendist:<\/p>\n<pre><code>&lt;p&gt;\n    &lt;label for=\"&lt;?php echo $field_type_object-&gt;_id( '_text' ); ?&gt;'\"&gt;\n        &lt;?php echo esc_html( $field_type_object-&gt;_text( 'link_picker_text', 'Text') ); ?&gt;\n    &lt;\/label&gt;\n&lt;\/p&gt;\n&lt;?php \n    echo $field_type_object-&gt;input( \n            array(\n            'class' =&gt; 'cmb_text',\n            'name'  =&gt; $field_type_object-&gt;_name( '[text]' ),\n            'id'    =&gt; $field_type_object-&gt;_id( '_text' ),\n            'value' =&gt; $value['text'],) ); \n?&gt;\n<\/code><\/pre>\n<p>Pheh! See tundub natuke r\u00e4pane, kas pole? Jaotame selle ridade kaupa:<\/p>\n<ol>\n<li>Ava l\u00f5igu silt.<\/li>\n<li>Juhtelemendi avasildi m\u00e4rgend, kuid parameetri <code>for<\/code>poolt automaatselt m\u00e4\u00e4ratud atribuudiga. <code>$field_type_object<\/code> <code>_id<\/code>See genereerib juhtelemendile selle renderdamisel automaatselt ID.<\/li>\n<li>Meie sildi tekst, mis on koostatud juhtelementide massiivi teksti abil (v\u00f5i taandub s\u00f5nale \u201eTekst&#8221;).<\/li>\n<li>L\u00f5pusildi silt<\/li>\n<li>L\u00f5igu sulgev silt.<\/li>\n<li>K\u00e4ivitage PHP deklaratsioon<\/li>\n<li>Kasutage sisendi juhtelementi (osa <code>$field_type_object<\/code>vormi sisendi loomiseks (vaiket\u00fc\u00fcp on tekst).<\/li>\n<li>K\u00e4ivitage parameetrite massiiv<\/li>\n<li>M\u00e4\u00e4rake sisendi klass.<\/li>\n<li>M\u00e4\u00e4rake sisendi nimi, kasutades uuesti <code>$field_type_object<\/code>abistajat.<\/li>\n<li>M\u00e4\u00e4rake sisendi ID-ks sama ID, mis m\u00e4\u00e4rati sildisildil.<\/li>\n<li>Hankige v\u00e4\u00e4rtus jaotisest <code>$value<\/code>, kuna see on massiiv, tahame selle juhtelemendi jaoks tekstiklahvi.<\/li>\n<li>Sulgege massiiv.<\/li>\n<li>Sulgege sisestusfunktsioon.<\/li>\n<li>Sulgege PHP deklaratsioon.<\/li>\n<\/ol>\n<p>URL-i vormi v\u00e4lja m\u00e4rgistus on paljuski sama, ainult HTML5 sisestust\u00fc\u00fcpide kasutamiseks saame m\u00e4\u00e4rata t\u00e4iendava parameetri &#8216;type&#8217; v\u00e4\u00e4rtuseks &#8216;url&#8217;:<\/p>\n<pre><code>&lt;?php \n\u2026\n'type'  =&gt; 'url',\n\u2026\n<\/code><\/pre>\n<p>L\u00f5puks tahame rakendada rippmen\u00fc\u00fcd. M\u00e4rgistus on v\u00e4ga tuttav:<\/p>\n<pre><code>&lt;?php\necho $field_type_object-&gt;select( \n    array(\n        'class'   =&gt; 'cmb_dropdown',\n        'name'    =&gt; $field_type_object-&gt;_name( '[blank]' ),\n        'id'      =&gt; $field_type_object-&gt;_id( '_blank' ),\n        'options' =&gt; $blank_options,) );\n<\/code><\/pre>\n<p>Pange t\u00e4hele, et <code>$field_type_object<\/code>meie kasutatav funktsioon on <code>select<\/code>rippmen\u00fc\u00fc loomine. Pange t\u00e4hele ka seda, et real 6 on meil uus atribuut <code>options<\/code>. Sellesse me edastame &quot;valikute&quot; jada. See luuakse enne seda juhtelementi j\u00e4rgmiselt:<\/p>\n<pre><code>&lt;?php \n$blank_options = '';\n$blank_options .= '&lt;option value=\"false\" '. selected( $value['blank'], 'false', false) .'&gt;Opens in same&lt;\/option&gt;';\n$blank_options .= '&lt;option value=\"true\" '. selected( $value['blank'], 'true', false) .'&gt;Opens in new&lt;\/option&gt;';\n<\/code><\/pre>\n<p>Siis ei pea me tegema muud, kui m\u00e4hkima selle m\u00f5nesse <code>&lt;div&gt;<\/code>ja meil on t\u00e4ielikult renderdatud kontroll:<\/p>\n<pre><code>&lt;?php\npublic function cmb2_render_link_picker( $field, $value, $object_id, $object_type, $field_type_object) {\n    $value = wp_parse_args( $value, array(\n        'text'  =&gt; '',\n        'url'   =&gt; '',\n        'blank' =&gt; 'false',) );\n    $blank_options = '';\n    $blank_options .= '&lt;option value=\"false\" '. selected( $value['blank'], 'false', false) .'&gt;Opens in same&lt;\/option&gt;';\n    $blank_options .= '&lt;option value=\"true\" '. selected( $value['blank'], 'true', false) .'&gt;Opens in new&lt;\/option&gt;';\n    ?&gt;\n    &lt;div class=\"link-picker\"&gt;\n        &lt;div class=\"text\"&gt;\n            &lt;p&gt;\n                &lt;label for=\"&lt;?php echo $field_type_object-&gt;_id( '_text' ); ?&gt;'\"&gt;\n                    &lt;?php echo esc_html( $field_type_object-&gt;_text( 'link_picker_text', 'Text') ); ?&gt;\n                &lt;\/label&gt;\n            &lt;\/p&gt;\n            &lt;?php \n                echo $field_type_object-&gt;input( \n                    array(\n                        'class' =&gt; 'cmb_text',\n                        'name'  =&gt; $field_type_object-&gt;_name( '[text]' ),\n                        'id'    =&gt; $field_type_object-&gt;_id( '_text' ),\n                        'value' =&gt; $value['text'],\n                        'desc'  =&gt; '',) ); \n            ?&gt;\n        &lt;\/div&gt;\n        &lt;div class=\"url\"&gt;\n            &lt;p&gt;\n                &lt;label for=\"&lt;?php echo $field_type_object-&gt;_id( '_url' ); ?&gt;'\"&gt;\n                    &lt;?php echo esc_html( $field_type_object-&gt;_text( 'link_picker_url', 'URL') ); ?&gt;\n                &lt;\/label&gt;\n            &lt;\/p&gt;\n            &lt;?php \n                echo $field_type_object-&gt;input( \n                    array(\n                        'class' =&gt; 'cmb_text_url',\n                        'name'  =&gt; $field_type_object-&gt;_name( '[url]' ),\n                        'id'    =&gt; $field_type_object-&gt;_id( '_url' ),\n                        'value' =&gt; $value['url'],\n                        'type'  =&gt; 'url',\n                        'desc'  =&gt; '',) ); \n            ?&gt;\n        &lt;\/div&gt;\n        &lt;div class=\"blank\"&gt;\n            &lt;p&gt;\n                &lt;label for=\"&lt;?php echo $field_type_object-&gt;_id( '_blank' ); ?&gt;'\"&gt;\n                    &lt;?php echo esc_html( $field_type_object-&gt;_text( 'link_picker_blank', 'Window') ); ?&gt;\n                &lt;\/label&gt;\n            &lt;\/p&gt;\n            &lt;?php \n                echo $field_type_object-&gt;select( \n                    array(\n                        'class'   =&gt; 'cmb_checkbox',\n                        'name'    =&gt; $field_type_object-&gt;_name( '[blank]' ),\n                        'id'      =&gt; $field_type_object-&gt;_id( '_blank' ),\n                        'options' =&gt; $blank_options,\n                        'desc'    =&gt; '',) ); \n            ?&gt;\n        &lt;\/div&gt;\n        &lt;div class=\"choose\"&gt;\n            &lt;p&gt;\n                &lt;label&gt;Choose&lt;\/label&gt;\n            &lt;\/p&gt;\n            &lt;button class=\"dashicons dashicons-admin-links js-insert-link button button-primary\" title=\"&lt;?php esc_html_e( 'Insert Link', 'cmb' ); ?&gt;\"&gt;\n                 &lt;span class=\"screen-reader-text\"&gt;&lt;?php esc_html_e( 'Choose Link', 'cmb' ); ?&gt;&lt;\/span&gt;\n             &lt;\/button&gt;\n        &lt;\/div&gt;\n    &lt;\/div&gt;\n    &lt;p class=\"clear\"&gt;\n        &lt;?php echo $field_type_object-&gt;_desc();?&gt;\n    &lt;\/p&gt;\n&lt;?php\n}\n<\/code><\/pre>\n<p>Ja see ongi k\u00f5ik! Oleme oma kontrolli teinud! CMB2 t\u00f6\u00f6tleb automaatselt k\u00f5iki andmeid, mida tahame salvestada, seega pole seal midagi teha.<\/p>\n<h3>Stiilid<\/h3>\n<p>Loodava juhtelemendi ekraanipildil (selle postituse \u00fclaosas) on rakendatud m\u00f5ned kohandatud stiilid, nii et see kuvatakse tekstisiseselt. Ma ei k\u00e4sitle t\u00e4na vormi stiili kujundamist, kuid kui olete uudishimulik, saate <a href=\"https:\/\/en-gb.wordpress.org\/plugins\/link-picker-for-cmb2\/developers\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">pistikprogrammi alla laadida ja allikat vaadata<\/a>.<\/p>\n<h3>Kontrolli korratavaks muutmine<\/h3>\n<p>Neile teist, kes soovivad veidi edasi areneda, saate CMB2 korratavate piirkondadega juhtimise t\u00f6\u00f6le panna. Selleks peate veidi massiivi kaardistama. Selleks kasutage allolevat koodi:<\/p>\n<pre><code>&lt;?php\n\npublic function cmb2_sanitize_link_picker( $check, $meta_value, $object_id, $field_args, $sanitize_object) {\n\n    if (! is_array( $meta_value) ||! $field_args['repeatable']) {\n        return $check;\n    }\n    foreach ($meta_value as $key =&gt; $val) {\n        $meta_value[ $key ] =  null;\n        if(! empty( $val['url'])) {\n            $meta_value[ $key ] = array_map( 'sanitize_text_field', $val );\n        }\n    }\n    return $meta_value;\n}\npublic function cmb2_types_esc_link_picker( $check, $meta_value, $field_args, $field_object) {\n\n    if (! is_array( $meta_value) ||! $field_args['repeatable']) {\n        return $check;\n    }\n    foreach ($meta_value as $key =&gt; $val) {\n        $meta_value[ $key ] =  null;\n        if(! empty( $val['url'])) {\n            $meta_value[ $key ] = array_map( 'esc_attr', $val );\n        }\n    }\n    return $meta_value;\n}\n<\/code><\/pre>\n<h2>Lingi valimine<\/h2>\n<p>Muidugi on lingivalija eesm\u00e4rk integreerida WordPressi enda lingi valimise funktsiooni, muutes nupul &#8216;Vali&#8217; kl\u00f5psamisel h\u00fcpikakna &#8216;Lingi lisamine\/redigeerimine&#8217;.<\/p>\n<p>Selle teostamiseks toetume suuresti JavaScriptile. Eelk\u00f5ige kasutan asjade <a href=\"https:\/\/jquery.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">elluviimiseks jQueryt<\/a>.<\/p>\n<p>Enne kui n\u00e4itan teile dialoogi k\u00e4ivitavat JavaScripti, peame esmalt j\u00e4rjekorda panema WordPressi enda sisemise JavaScripti, mis eellaadib modaalid ja teegid, millest meie kood s\u00f5ltub. See n\u00e4eb v\u00e4lja umbes selline:<\/p>\n<pre><code>&lt;?php\nglobal $post_id;\n\nif (isset( $post_id)) {\n    wp_enqueue_media( array( 'post' =&gt; $post_id) );\n}\n\n$plugin_js_url  = plugins_url( 'js\/plugin.js', ROOT );\nwp_enqueue_script( 'wholesomecode', $plugin_js_url, array( 'jquery', 'jquery-ui-core', 'jquery-ui-draggable', 'jquery-ui-droppable', 'thickbox', 'wpdialogs' ), '1.0.0', true );\n<\/code><\/pre>\n<p>Nagu n\u00e4ete, tuginevad paljud sisemised WordPressi teegid h\u00fcpikakna laadimiseks jQueryle, seega on m\u00f5istlik, et meie h\u00fcpikakna k\u00e4ivitaja teeb sama. Seda tehakse <code>\/js\/plugin.js<\/code>\u00fclaltoodud n\u00e4ite reale 10 laaditud rakenduse kaudu.<\/p>\n<pre><code>jQuery(document).ready(function($) {\n\n    var url   = $('body');\n    var text = $('body');\n    var blank = $('body');\n\n    $('body').on('click', '.js-insert-link', function(event) {\n\n        event.preventDefault? event.preventDefault(): event.returnValue = false;\n        event.stopPropagation();\n\n        url            = $(this).closest('.link-picker').find('input.cmb_text_url ');\n        text           = $(this).closest('.link-picker').find('input.cmb_text ');\n        blank          = $(this).closest('.link-picker').find('input.cmb_checkbox ');\n\n        wpActiveEditor = true;\n        wpLink.open();\n        wpLink.textarea = url;\n\n        return false;\n    });\n\n    $('body').on('click', '#wp-link-cancel, #wp-link-backdrop, #wp-link-close', function(event) {\n\n        wpLink.textarea = url;\n        wpLink.close();\n        event.preventDefault? event.preventDefault(): event.returnValue = false;\n        event.stopPropagation();\n        return false;\n    });\n\n    $('body').on('click', '#wp-link-submit', function(event) {\n        console.log(text)\n        var linkAtts = wpLink.getAttrs();\n\n        linkAtts.text = $('#wp-link-text').val();\n\n        url.val(linkAtts.href);\n\n        if( linkAtts.text != '') {\n            text.val(linkAtts.text);\n        }\n\n        if (linkAtts.target == '_blank') {\n            blank.prop('checked', true);\n        } else {\n            blank.prop('checked', false);\n        }\n\n        wpLink.textarea = url;\n        wpLink.close();\n        event.preventDefault? event.preventDefault(): event.returnValue = false;\n        event.stopPropagation();\n        return false;\n    });\n});\n<\/code><\/pre>\n<p>Kasutades klasse, mille panime oma vormi juhtelementide \u00fcmber, sihib JavaScript juhtelemente ja surub lingivalija h\u00fcpikaknas valitud tulemuse asjakohastele juhtv\u00e4ljadele.<\/p>\n<h2>Juhtnupu kasutamine<\/h2>\n<p>Nii et p\u00e4rast \u00fclaltoodud \u00f5petuse l\u00e4bivaatamist ja v\u00f5ib-olla p\u00e4rast pistikprogrammi <a href=\"https:\/\/en-gb.wordpress.org\/plugins\/link-picker-for-cmb2\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Link Picker for CMB2<\/a> <a href=\"https:\/\/en-gb.wordpress.org\/plugins\/link-picker-for-cmb2\/developers\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">l\u00e4htekoodi \u00fclevaatamist<\/a> v\u00f5i lihtsalt minu versiooni allalaadimist v\u00f5ite n\u00fc\u00fcd m\u00f5elda, kuidas seda asja CMB2-ga kasutada. Noh, see ei saaks olla lihtsam:<a href=\"https:\/\/en-gb.wordpress.org\/plugins\/link-picker-for-cmb2\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external\"><\/a><\/p>\n<pre><code>&lt;?php\nfunction wholesomecode_create_meta_boxes() {\n  $prefix = '_profile_';\n\n    $cmb = new_cmb2_box(\n        array(\n            'id'            =&gt; 'cta',\n            'title'         =&gt; __( 'Call to Action', 'cmb2' ),\n            'object_types'  =&gt; array( 'profile' ),\n            'context'       =&gt; 'normal',\n            'priority'      =&gt; 'low',\n            'show_names'    =&gt; true,) );\n\n    $field1 = $cmb-&gt;add_field( \n        array(\n            'name' =&gt; __( 'Link Picker', 'cmb2' ),\n            'id'   =&gt; $prefix. 'cta_link',\n            'type' =&gt; 'link_picker',) );\n}\nadd_action( 'cmb2_admin_init', 'wholesomecode_create_meta_boxes' );\n<\/code><\/pre>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/wholesomecode.ltd\" class=\"external external_icon\">wholesomecode.ltd<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Selles \u00f5petuses vaatlen, kuidas saate luua kohandatud juhtelemendi, et laiendada WebDevStudios&#8217;i CMB2 (kohandatud metakastid 2) funktsionaalsust. Arendan veebisaite (ja veebirakendusi&#8230;<\/p>\n","protected":false},"author":1,"featured_media":224127,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[718,894,842,863],"tags":[1165],"class_list":["post-228214","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-arendaja","category-kood","category-opetused","category-wordpress-4","tag-affiai-et"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/228214","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=228214"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/228214\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media\/224127"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media?parent=228214"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/categories?post=228214"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/tags?post=228214"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}