{"id":233954,"date":"2023-02-26T17:52:00","date_gmt":"2023-02-26T14:52:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233954"},"modified":"2022-11-11T13:23:20","modified_gmt":"2022-11-11T10:23:20","slug":"looge-programmiliselt-sisu-gravitatsioonivormide-kirjetest","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/et\/looge-programmiliselt-sisu-gravitatsioonivormide-kirjetest\/","title":{"rendered":"Looge programmiliselt sisu gravitatsioonivormide kirjetest"},"content":{"rendered":"\n<p>See postitus juhendab teid, kuidas luua mis tahes sisu (kasutajad, postitused v\u00f5i midagi muud kohandatud) vormi Gravity Forms kirjete p\u00f5hjal. Lisame administraatori sisestuse \u00fcksikasjade ekraanile ala, et luua sisu esitatud teabe p\u00f5hjal.<\/p>\n<h2>Mida me teeme<\/h2>\n<p>Loome Gravity Formi sisestuse \u00fcksikasjade ekraanil uue metakasti. Sellesse metakasti lisame nupu. Idee seisneb selles, et l\u00f5ppkasutaja saab sisestuse \u00fcle vaadata ja kui ta sisestuse \u00fcksikasjad heaks kiidab, saab sisu loomise k\u00e4ivitamiseks nuppu vajutada.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-151470-61e4cba9a24f2.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-151470-61e4cba9a24f2.png\" alt=\"Looge programmiliselt sisu gravitatsioonivormide kirjetest\" ><\/a><\/p>\n<p>Selle nupu kl\u00f5psamisel k\u00e4ivitub meie kood, sooritame vajalikud toimingud ja soovi korral edastame l\u00f5ppkasutajale teate tulemusest. Lisame (valikuliselt) kirjele ka metaandmed, et saaksime h\u00f5lpsalt kontrollida, kas sellest kirjest on varem sisu loodud v\u00f5i mitte.<\/p>\n<p>J\u00e4tan koodi \u00fcsna lihtsaks ja \u00fcldiseks, et saaksite seda h\u00f5lpsasti asendada ja kohandada vastavalt oma projekti vajadustele. Allolevas n\u00e4ites eeldan, et tahame kasutaja programmiliselt luua. Kuid see, mida te sisestusandmetega ette v\u00f5tate, on t\u00e4ielikult teie otsustada; v\u00f5ite soovi korral luua postituse, v\u00e4rskendada muud sisu v\u00f5i saata kohandatud meili.<\/p>\n<h2>V\u00e4ljade tuvastamine<\/h2>\n<p>Esimene kaalutlus, mida peame tegema, on v\u00e4ljade tuvastamine. Teisis\u00f5nu, me peame teadma, milline valdkond on mis. Pidage meeles, et Gravity Formsis oleva kirje v\u00e4\u00e4rtustele viidatakse nende vormiv\u00e4lja ID-dele. Ja isegi juurdep\u00e4\u00e4suga iga vormiv\u00e4lja teabele \u2013 vajame kindlat viisi, et teada saada, millised v\u00e4ljad on missugune teave. Vorm v\u00f5ib koosneda neljast tekstisisestusviisist \u2013 me peame teadma, millised neljast tekstisisendist on eesnime jaoks.<\/p>\n<p>Siin on teil m\u00f5ned alternatiivid. Saate v\u00e4ljade ID-sid k\u00f5vasti kodeerida (nt m\u00e4\u00e4rata, et v\u00e4lja ID 2 on perekonnanimi), kuid see on v\u00e4ga vigane ja pole soovitatav. Lihtne viis on kasutada Gravity Formsis \u00fcht olemasolevat v\u00e4ljateabe sisendit, n\u00e4iteks CSS-klassi nime. Kuid pidage meeles, et l\u00f5ppkasutaja v\u00f5ib soovitud stiili saamiseks anda mitu klassinime ja teie kood v\u00f5ib kergesti puruneda, kui te seda stringi korralikult ei s\u00f5elu. Soovitan kindlasti oma kohandatud sisendite lisamist v\u00e4ljadele:<\/p>\n<p>Kui soovite oma koodi v\u00e4ljade tuvastamiseks kindlat meetodit, vaadake kindlasti \u00fclaltoodud postitust, kuidas seda teha. Kuid et see oleks selles postituses lihtne, kasutan ma CSS-klassi ja eeldan, et kasutaja ei sisesta midagi muud peale v\u00e4\u00e4rtuste, mida me selles valdkonnas vajame.<\/p>\n<h2>Vormi seadistamine<\/h2>\n<p>Esimene samm on loomulikult vormi seadistamine vajalike v\u00e4ljade ja v\u00e4ljat\u00fc\u00fcpidega. Ja siis sisestate v\u00e4lja identifikaatorid nende \u00f5igetesse kohtadesse. N\u00e4itena on mul selline vorm:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-151470-61e4cbaa8ac83.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-151470-61e4cbaa8ac83.png\" alt=\"Looge programmiliselt sisu gravitatsioonivormide kirjetest\" ><\/a><\/p>\n<p>Ja iga v\u00e4lja jaoks, mida tahan kaasata, pakun kohandatud CSS-klassi, mida saan oma koodis sihtida. N\u00e4iteks eesnime jaoks;<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-151470-61e4cbab8f543.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-151470-61e4cbab8f543.png\" alt=\"Looge programmiliselt sisu gravitatsioonivormide kirjetest\" ><\/a><\/p>\n<p>Liigume n\u00fc\u00fcd edasi koodi ja selle juurde, kuidas luua funktsioon, mis teisendab esildised kohandatud sisuks.<\/p>\n<h2>Metaboksi lisamine sisestuse \u00fcksikasjadesse<\/h2>\n<p>Esimene samm on kohandatud sisu loomiseks mingi toimingup\u00e4\u00e4stiku lisamine. Loomulik koht on sisestuse \u00fcksikasjade ekraanil. See v\u00f5imaldab l\u00f5ppkasutajal esitatud v\u00e4\u00e4rtused \u00fcle vaadata ja seej\u00e4rel otsustada, kas luua nende p\u00f5hjal sisu v\u00f5i mitte. Gravity Forms v\u00f5imaldab arendajatel nendel ekraanidel h\u00f5lpsasti kohandatud metakaste luua.<\/p>\n<p>Kirje \u00fcksikasjade jaoks kohandatud metakasti loomiseks saame kasutada filtrit <code>gform_entry_detail_meta_boxes<\/code>. See on filter, mis tagastab k\u00f5igi metakastide massiivi, mis kuvatakse kirje \u00fcksikasjades. Lisame lihtsalt uue massiivielemendi, et luua uus metakast, ja m\u00e4\u00e4ratleme selle sisu renderdamiseks tagasihelistamisfunktsiooni. Seadsime lahtrisse \u201e &quot; kena kirjeldava pealkirja <code>title<\/code>ja m\u00e4\u00e4ratleme selle positsiooni, mis kuvatakse jaotises \u201e <code>side<\/code>&#8220;.<\/p>\n<pre><code>add_filter('gform_entry_detail_meta_boxes', function($meta_boxes, $entry, $form) {\n    $meta_boxes['awp-create-user-metabox'] = [\n        'title' =&gt; __('Create user from entry', 'awp'),\n        'callback' =&gt; 'awp_gf_create_user_metabox_render',\n        'context' =&gt; 'side'\n    ];\n    return $meta_boxes;\n}, 10, 3);<\/code><\/pre>\n<p>Ja siis peame m\u00e4\u00e4ratlema tagasihelistamise funktsiooni: <code>awp_gf_create_user_metabox_render()<\/code>meie koodis. See funktsioon vastutab metakasti sisu renderdamise eest. Selle funktsiooni parameetrina saame argumentide massiivi, millest saame tuua vormi ja kirje objekti;<\/p>\n<pre><code>function awp_gf_create_user_metabox_render($args) {\n    $form = $args['form'];  \/\/ Form array. Here we find all the fields in $form['fields']\n    $entry = $args['entry'];  \/\/ Entry array. Here we find all values in this current submission\n    $render = '';\n    echo $render;\n}<\/code><\/pre>\n<p>K\u00f5ik, mida peame selle funktsiooni puhul tegema, on HTML-i koostamine ja selle kordamine.<\/p>\n<p>Toimingu k\u00e4ivitamiseks nupu lisamisel j\u00e4rgime sama meetodit, mida Gravity Forms ise teeb. Kogu sisestuse \u00fcksikasjade ekraani \u00fcmbritseb vormielement ja meil pole vaja muud teha, kui lisada esitamisnupule onclick s\u00fcndmus, mis muudab <code>action<\/code>atribuuti. Me m\u00e4\u00e4ratleme oma kohandatud toimingu nime, et teaksime, millal see k\u00e4ivitati \u2013 ja see ei l\u00e4he vastuollu Gravity Formsi tegevustega.<\/p>\n<p>Kutsume oma kohandatud toimingut &quot; <code>awp_gf_create_user<\/code>&quot; ja renderdame esitamisnupu koos onclick s\u00fcndmusega, n\u00e4iteks:<\/p>\n<pre><code>function awp_gf_create_user_metabox_render($args) {\n    $form = $args['form'];  \/\/ Form array. Here we find all the fields in $form['fields']\n    $entry = $args['entry'];  \/\/ Entry array. Here we find all values in this current submission\n    $render = '';\n    $action = 'awp_gf_create_user';\n    $render .= sprintf('&lt;input type=\"submit\" value=\"%s\" class=\"button\" onclick=\"jQuery('#action').val('%s');\" \/&gt;', \n        __('Create user', 'awp'), \n        $action\n    );\n    echo $render;\n}<\/code><\/pre>\n<p>\u00dclaltoodud koodiga saame sisestamise \u00fcksikasjade ekraani k\u00fcljele uue metakasti, mis n\u00e4eb v\u00e4lja j\u00e4rgmine:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-151470-61e4cba9a24f2.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-151470-61e4cba9a24f2.png\" alt=\"Looge programmiliselt sisu gravitatsioonivormide kirjetest\" ><\/a><\/p>\n<p>Praegu ei juhtu nupule kl\u00f5psates midagi. See on lihtsalt sellep\u00e4rast, et me pole veel kirjutanud koodi selle kuulamiseks.<\/p>\n<h2>V\u00e4\u00e4rtuste eraldamine kirjest<\/h2>\n<p>Nagu varem mainitud, identifitseeritakse k\u00f5ik sisestatud v\u00e4\u00e4rtused sisestusmassiivis nende v\u00e4lja ID-de j\u00e4rgi.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-151470-61e4cbad6bcf2.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-151470-61e4cbad6bcf2.png\" alt=\"Looge programmiliselt sisu gravitatsioonivormide kirjetest\" ><\/a><\/p>\n<p>\u00dclaloleval pildil on v\u00e4ljal ID 1 eesnimi, ID 2 perekonnanimi ja nii edasi. Aga oota \u2013 mis toimub 5.1, 5.3 ja muuga? Gravity Formsis saame &quot;alam-ID-d&quot; spetsiaalse v\u00e4lja jaoks, mis aktsepteerib mitut v\u00e4\u00e4rtust. Lisasin oma vormile aadressiv\u00e4lja, mis on \u00fcks v\u00e4li, kuid sisaldab mitut sisendit. Iga sisend sellel v\u00e4ljal saab oma ID-d, mis on lisatud p\u00f5hi-ID-le. ja punkt. Kui te \u00fchtegi neist mitme sisendiga v\u00e4ljadest ei kasuta, siis suurep\u00e4rane! Kood muutub v\u00e4ga lihtsaks. Kuid lisasin selle eriv\u00e4lja, et saaksime n\u00e4ha, kuidas sellele juurde p\u00e4\u00e4seda.<\/p>\n<p>Praegu on meie probleem selles, et kood ei tea, mille jaoks v\u00e4lja ID 1, 2 v\u00f5i 3 on m\u00f5eldud. See teave asub vormimassiivis, t\u00e4psemalt <code>$form['fields']<\/code>elemendis. See element sisaldab k\u00f5iki vormi v\u00e4lju ja meil on t\u00e4ielik juurdep\u00e4\u00e4s igale v\u00e4ljaobjektile. Siit leiame meie valitud identifitseerimismeetodi; minu n\u00e4ites <code>cssClass<\/code>.<\/p>\n<p>V\u00f5ime need v\u00e4ljad lihtsalt l\u00e4bi sirvida ja otsida identifikaatoreid, mida tahame eraldada. Panen k\u00f5ik oma identifikaatorid massiivi ja saame lihtsalt kontrollida, kas ts\u00fckli v\u00e4li on \u00fcks neist.<\/p>\n<p>Kuid k\u00f5igepealt peame teadma, et nuppu kl\u00f5psati. See on \u00fcsna lihtne; saame lihtsalt kontrollida, kas meie kohandatud toiming asub <code>$_POST<\/code>massiivis. Kuid kuna me t\u00f6\u00f6tame Gravity Formsiga, saame kasutada <code>[rgpost](https:\/\/docs.gravityforms.com\/rgpost\/)()<\/code>. Funktsioon Gravity Forms <code>rgpost()<\/code>tagastab lihtsalt POST-p\u00e4ringu v\u00e4\u00e4rtuse. Kontrollimine <code>rgpost('awp_gf_create_user')<\/code>ja <code>$_POST['awp_gf_create_user']<\/code>on t\u00e4pselt sama. Kuid me kasutame Gravity Formsi funktsiooni.<\/p>\n<pre><code>    ...\n    $render = '';\n    $action = 'awp_gf_create_user';\n\u00a0\n    if (rgpost('action') == $action) {  \/\/ Button was clicked\n        $values = [];\n        \/\/ All identificators\n        $css_classes = ['awp_first_name', 'awp_last_name', 'awp_email', 'awp_address'];\n        foreach ($form['fields'] as $field) {\n            if (in_array($field-&gt;cssClass, $css_classes)) {\n                $values[$field-&gt;cssClass] = $entry[$field-&gt;id];\n            }\n        }\n    }\n    $render .= sprintf('&lt;input type=\"submit\" value=\"%s\" class=\"button\" onclick=\"jQuery('#action').val('%s');\" \/&gt;', \n    ...<\/code><\/pre>\n<p>Real <code>#8<\/code>m\u00e4\u00e4ratleme massiivi k\u00f5igi kohandatud identifikaatoritega, mida soovime otsida. Need on k\u00f5ik v\u00e4\u00e4rtused, mille olen oma vormi CSS-klassina sisestanud. Seej\u00e4rel kontrollime iga v\u00e4lja ts\u00fcklis, kas v\u00e4li on \u00fcks neist identifikaatoritest. Oma n\u00e4ites kasutan v\u00e4ljade tuvastamiseks CSS-klassi, kuid soovitan kasutada kohandatud sisendeid. See kood ei t\u00f6\u00f6ta ka siis, kui on antud mitu CSS-klassi.<\/p>\n<p>Seej\u00e4rel <code>#12<\/code>lisame reale oma l\u00f5ppv\u00e4\u00e4rtuste massiivi uue elemendi, mille v\u00f5tmeks on identifikaator. Seej\u00e4rel kasutame v\u00e4lja ID-d ja viitame sisestusmassiivile. Selle ts\u00fckli l\u00f5pus <code>$values<\/code>tuleks t\u00e4ita k\u00f5ik asjakohased esitatud v\u00e4\u00e4rtused. K\u00f5ik t\u00fchjaks j\u00e4etud v\u00f5i identifikaatorite massiivi mitte kaasatud v\u00e4ljad j\u00e4etakse v\u00e4lja.<\/p>\n<p>Kui lisasite spetsiaalse mitme sisestusv\u00e4lja, peate alam-ID-dele \u00f5igesti viitamiseks lisama lisakoodi. Ma tean, et <code>awp_address<\/code>see on aadressiv\u00e4lja t\u00fc\u00fcp. Gravity Forms&#8217;i aadressiv\u00e4ljat\u00fc\u00fcbid j\u00e4rgivad alam-ID-de fikseeritud mustrit ja olen lubanud ainult kolm v\u00f5imalikku sisendit (t\u00e4navaaadressil 1 on alam-ID 1, postiindeksil alam-ID 3 ja linnal on alam-ID 5). Selliste v\u00e4ljade k\u00e4sitlemiseks peame tegema midagi sellist:<\/p>\n<pre><code>        ...\n        foreach ($form['fields'] as $field) {\n            if (in_array($field-&gt;cssClass, $css_classes)) {\n                if ($field-&gt;cssClass == 'awp_address') {\n                    $address = $entry[$field-&gt;id.'.1']. ', '. $entry[$field-&gt;id.'.5']. ' '. $entry[$field-&gt;id.'.3'];\n                    $values[$field-&gt;cssClass] = $address;\n                } else {\n                    $values[$field-&gt;cssClass] = $entry[$field-&gt;id];\n                }\n            }\n        }\n        ...<\/code><\/pre>\n<p>Real <code>#4<\/code>\u00fchendan k\u00f5ik v\u00e4\u00e4rtused nii, et l\u00f5plik string on standardiseeritud \u00fcherealine aadressivorming (&#8220;, &#8220;).<\/p>\n<p>N\u00fc\u00fcd on k\u00f5ik vajalikud v\u00e4\u00e4rtused massiivi identifikaatoriv\u00f5tmete j\u00e4rgi kenasti sorteeritud <code>$values<\/code>. See, mida te sellega ette v\u00f5tate, s\u00f5ltub t\u00e4ielikult teie ja teie projekti vajadustest. Aga lisan n\u00e4ite kasutaja loomisest WordPressis.<\/p>\n<h2>Kande esitamisest uue kasutaja loomine<\/h2>\n<p>Koodi puhtana hoidmiseks kutsun v\u00e4lja eraldi funktsiooni, mis vastutab uue kasutaja loomise eest. K\u00f5ik, mida ma vajan, on v\u00e4\u00e4rtuste massiivi edastamine. Ma tahan, et see funktsioon annaks mingisuguse viite selle toimingu tulemusele. Nii saan luua s\u00f5numi olenemata sellest, kas kasutaja loomine \u00f5nnestus v\u00f5i mitte v\u00f5i kui antud e-posti aadressiga kasutaja on juba olemas.<\/p>\n<pre><code>        ...\n        foreach ($form['fields'] as $field) {\n            if (in_array($field-&gt;cssClass, $css_classes)) {\n                $address = $entry[$field-&gt;id.'.1']. ', '. $entry[$field-&gt;id.'.5']. ' '. $entry[$field-&gt;id.'.3'];\n                    $values[$field-&gt;cssClass] = $address;\n                } else {\n                    $values[$field-&gt;cssClass] = $entry[$field-&gt;id];\n                }\n            }\n        }\n        $result = awp_gf_create_user($values);\n    }\n    ...<\/code><\/pre>\n<p>Seej\u00e4rel m\u00e4\u00e4ratleme lihtsalt <code>awp_gf_create_user()<\/code>funktsiooni. Lisan lihtsa n\u00e4ite kasutaja programmilisest loomisest WordPressis. See on m\u00f5eldud lihtsalt n\u00e4itena, et n\u00e4idata, kuidas ekstraktitud v\u00e4\u00e4rtusi kasutada.<\/p>\n<p>K\u00f5igepealt kontrollime, kas antud e-posti aadressiga kasutaja on olemas <code>[get_user_by](https:\/\/developer.wordpress.org\/reference\/functions\/get_user_by\/)()<\/code>. Kui ei, siis kasutame <code>[wp_insert_user](https:\/\/developer.wordpress.org\/reference\/functions\/wp_insert_user\/)()<\/code>kasutaja lisamiseks. Lisasin ka n\u00e4ite kohandatud kasutaja meta (meie aadressiv\u00e4li) salvestamisest. L\u00f5puks peaks meie meetod tagastama kasutaja loomise tulemuse. Kui kasutaja oli juba olemas, tagastame -1. Vastasel juhul tagastame kasutajatunnuse.<\/p>\n<pre><code>function awp_gf_create_user($values) {\n    \/\/ Check if user exists\n    $exists = get_user_by('email', $values['awp_email']);\n    if ($exists) {\n        return -1;\n    }\n\u00a0\n    \/\/ Create user\n    $random_password = wp_generate_password(12, false);\n    $user_id = wp_insert_user([\n        'user_email' =&gt; $values['awp_email'],\n        'user_login' =&gt; $values['awp_email'],\n        'user_pass' =&gt; $random_password,\n        'first_name' =&gt; $values['awp_first_name'],\n        'last_name' =&gt; $values['awp_last_name'],\n        'role' =&gt; 'author'\n    ]);\n    \/\/ Optional: custom user meta\n    if ($user_id) {\n        update_user_meta($user_id, 'address', $values['awp_address']);\n    }\n\u00a0\n    \/\/ Return user ID (or WP_Error) back to metabox render function so we can display an appropriate message\n    return $user_id;\n}<\/code><\/pre>\n<p>Tagasi meie metaboksi renderdusse saame n\u00fc\u00fcd selle tulemuse p\u00f5hjal tingimuslikult l\u00f5ppkasutajale s\u00f5numi lisada. See on lihtne n\u00e4ide; kui tagastatud v\u00e4\u00e4rtus oli -1, on antud e-posti aadressiga kasutaja juba olemas. Ja kui tagastatud v\u00e4\u00e4rtus oli suurem kui 0, siis teame, et see l\u00f5i kasutaja edukalt. Seet\u00f5ttu kuvatakse teade, mis \u00fctleb, et kasutaja loomine \u00f5nnestus.<\/p>\n<pre><code>    ...\n    $message = '';\n    if (rgpost('action') == $action) {  \/\/ Button was clicked\n        ...\n        $result = awp_gf_create_user($values);\n        if ($result &gt; 0) {\n            $message = __('User successfully created!', 'awp');\n        } else if ($result == -1) {\n            $message = __('An user by that email already exists!', 'awp');\n        }\n    }\n\u00a0\n    if (!empty($message)) {\n        $render .= '&lt;p&gt;'. $message. '&lt;\/p&gt;';\n    }\n    $render .= sprintf('&lt;input type=\"submit\" value=\"%s\" class=\"button\" onclick=\"jQuery('#action').val('%s');\" \/&gt;', \n    ...<\/code><\/pre>\n<h2>Dubleeriva sisu v\u00e4ltimine<\/h2>\n<p>\u00dclaltoodud lihtne n\u00e4ide keelab p\u00e4rilikult mitme kasutaja loomise samast kirjest, kuna see kontrollib, kas antud e-posti aadressiga kasutaja on juba olemas v\u00f5i mitte. Kuid muudel juhtudel ei pruugi teil seda v\u00f5imalust olla. Teine strateegia, mille eesm\u00e4rk on v\u00e4ltida l\u00f5ppkasutajate sama kirje dubleeriva sisu loomist, on kohandatud kirje meta lisamine. Teisis\u00f5nu; kui toiming \u00f5nnestus, lisame sellele kirjele kohandatud meta. Ja siis kontrollime lihtsalt enne toimingu alustamist, kas see kohandatud meta on olemas.<\/p>\n<p>Gravity Forms pakub meetodeid kohandatud meta lisamiseks kirjetele; <code>[gform_add_meta](https:\/\/docs.gravityforms.com\/gform_add_meta\/)()<\/code>samuti v\u00e4\u00e4rtuste toomine: <code>[gform_get_meta](https:\/\/docs.gravityforms.com\/gform_get_meta\/)()<\/code>.<\/p>\n<pre><code>    ...\n    $message = '';\n    if (rgpost('action') == $action) {  \/\/ Button was clicked\n        $already_created = gform_get_meta($entry['id'], 'awp_created_user');\n        if ($already_created) {\n            $message = __('You have already created an user from this entry!', 'awp');\n        } else {\n            ...\n            $result = awp_gf_create_user($values);\n            if ($result &gt; 0) {\n                gform_add_meta($entry['id'], 'awp_created_user', $user_id, $form['id']);\n                $message = __('User successfully created!', 'awp');\n            } else if ($result == -1) {\n                $message = __('An user by that email already exists!', 'awp');\n            }\n        }\n    }\n    ...<\/code><\/pre>\n<p>Real <code>#4<\/code>toome oma kohandatud sisestuse meta. Kui see oli olemas (mitte t\u00fchi), seadsime l\u00f5ppkasutajale teate, et ta on juba varem proovinud sellest kirjest sisu luua. Kui kohandatud metat ei eksisteerinud, j\u00e4tkame oma sisu loomist. Kui sisu on edukalt loodud, peame kirjele (rida <code>#10<\/code>) lisama kohandatud meta.<\/p>\n<h2>J\u00e4reldus ja l\u00f5plik kood<\/h2>\n<p>Selles postituses olen p\u00fc\u00fcdnud tuua n\u00e4ite, kuidas Gravity Formsis kirjest sisu luua. Koodin\u00e4idete eesm\u00e4rk on anda teile idee selle kohta, kuidas seda oma projekti vajadustega kohandada ja muuta. Soovitan kindlasti seda funktsiooni laiendada, et veateadetega paremini toime tulla. Samuti v\u00f5iksite selle metakasti lisada ainult konkreetse(te) vormi(de) jaoks. Kuid see peaks olema hea alus, millele tugineda.<\/p>\n<p>Ja siin on l\u00f5plik kood:<\/p>\n<pre><code>add_filter('gform_entry_detail_meta_boxes', function($meta_boxes, $entry, $form) {\n    $meta_boxes['awp-create-user-metabox'] = [\n        'title' =&gt; __('Create user from entry', 'awp'),\n        'callback' =&gt; 'awp_gf_create_user_metabox_render',\n        'context' =&gt; 'side'\n    ];\n    return $meta_boxes;\n}, 10, 3);\n\u00a0\nfunction awp_gf_create_user_metabox_render($args) {\n    $form = $args['form'];  \/\/ Form array. Here we find all the fields in $form['fields']\n    $entry = $args['entry'];  \/\/ Entry array. Here we find all values in this current submission\n    $render = '';\n    $action = 'awp_gf_create_user';\n\u00a0\n    $message = '';\n    if (rgpost('action') == $action) {  \/\/ Button was clicked\n        $already_created = gform_get_meta($entry['id'], 'awp_created_user');\n        if ($already_created) {\n            $message = __('You have already created an user from this entry!', 'awp');\n        } else {\n            $values = [];\n            \/\/ All identificators\n            $css_classes = ['awp_first_name', 'awp_last_name', 'awp_email', 'awp_address'];\n            foreach ($form['fields'] as $field) {\n                if (in_array($field-&gt;cssClass, $css_classes)) {\n                    if ($field-&gt;cssClass == 'awp_address') {\n                        $address = $entry[$field-&gt;id.'.1']. ', '. $entry[$field-&gt;id.'.5']. ' '. $entry[$field-&gt;id.'.3'];\n                        $values[$field-&gt;cssClass] = $address;\n                    } else {\n                        $values[$field-&gt;cssClass] = $entry[$field-&gt;id];\n                    }\n                }\n            }\n\u00a0\n            $result = awp_gf_create_user($values);\n\u00a0\n            if ($result &gt; 0) {\n                gform_add_meta($entry['id'], 'awp_created_user', $user_id, $form['id']);\n                $message = __('User successfully created!', 'awp');\n            } else if ($result == -1) {\n                $message = __('An user by that email already exists!', 'awp');\n            }\n        }\n    }\n\u00a0\n    if (!empty($message)) {\n        $render .= '&lt;p&gt;'. $message. '&lt;\/p&gt;';\n    }\n    $render .= sprintf('&lt;input type=\"submit\" value=\"%s\" class=\"button\" onclick=\"jQuery('#action').val('%s');\" \/&gt;', \n        __('Create user', 'awp'), \n        $action\n    );\n    echo $render;\n}\n\u00a0\nfunction awp_gf_create_user($values) {\n    \/\/ Check if user exists\n    $exists = get_user_by('email', $values['awp_email']);\n    if ($exists) {\n        return -1;\n    }\n    \/\/ Create user\n    $random_password = wp_generate_password(12, false);\n    $user_id = wp_insert_user([\n        'user_email' =&gt; $values['awp_email'],\n        'user_login' =&gt; $values['awp_email'],\n        'user_pass' =&gt; $random_password,\n        'first_name' =&gt; $values['awp_first_name'],\n        'last_name' =&gt; $values['awp_last_name'],\n        'role' =&gt; 'author'\n    ]);\n    \/\/ Optional: custom user meta\n    if ($user_id) {\n        update_user_meta($user_id, 'address', $values['awp_address']);\n    }\n    \/\/ Return user ID (or WP_Error) back to metabox render function so we can display an appropriate message\n    return $user_id;\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 postitus juhendab teid, kuidas luua mis tahes sisu (kasutajad, postitused v\u00f5i midagi muud kohandatud) vormi Gravity Forms kirjete p\u00f5hjal.<\/p>\n","protected":false},"author":1,"featured_media":151471,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[894,894,916,916,1110,842,812,812,842,863,863],"tags":[1165],"class_list":["post-233954","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-kood","category-muud","category-n-a","category-opetused","category-pistikprogrammid","category-wordpress-4","tag-affiai-et"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/233954","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=233954"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/233954\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media\/151471"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media?parent=233954"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/categories?post=233954"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/tags?post=233954"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}