✅ WEB ja WordPressi uudised, teemad, pistikprogrammid. Siin jagame näpunäiteid ja parimaid veebisaidi lahendusi.

Kuidas luua esiotsa vorm ACF-iga

7

Selles õpetuses näitan teile, kuidas luua Advanced Custom Fields (ACF) abil esiotsa vorm. Ma räägin üksikasjalikult, kuidas see töötab ja kuidas saate seda oma vajadustele vastavaks kohandada.

Advanced Custom Fields (ACF) on tasuta pistikprogramm, mis aitab teil lisada WordPressi peaaegu igat tüüpi sisule mitut tüüpi väljaseadeid. Saate lisada välju postitustele, taksonoomiatele, menüüdele, vidinatele, kasutajatele ja isegi kohandatud administraatori lehtedele. Seda kasutatakse peamiselt administraatori jaoks, kuid saate seda kasutada ka esiotsa väljade genereerimiseks.

Rakendusi ACF-väljade lisamiseks esiotsa on palju; postituste, kategooriate või kasutajate loomiseks ja värskendamiseks saate lisada vormi. Mõne koodiga saate isegi luua üldise kontaktivormi, kus vastused salvestatakse kohandatud postituse tüüpi postitustena ja kood käivitab vormi vastuste kohta meiliteatised. Täpselt nagu tavaline kontaktivorm. Levinud kasutusalad on ACF-i esiotsa vormifunktsioonide kasutamine vormide loomiseks ja külastajatel saidi sisu loomiseks või muutmiseks ilma sisse logimata. Kuid kasutage seda ettevaatlikult. See avab kergesti rämpsposti ja kuritarvitamise ning halvimal juhul võivad külastajad teie saidi sisu või seaded hävitada. Peaksite vähemalt nõudma, et külastajad logiksid sisse kehtivate kasutajatega, et pääseda juurde vormidele, mis võivad muuta WordPressi kriitilist sisu (kasutajaprofiil, postitused jne).

Mida me teeme

Eeldan, et WordPressi sait on memberACF-i kasutava kohandatud rolliga (‘ ‘) kasutajate jaoks määratlenud täiendavate väljade komplekti. Neil kasutajatel pole üldse administraatorijuurdepääsu, kuid tahame pakkuda neile võimalust muuta oma profiili kohandatud välju. Lahendus, mille olen valinud, on nende profiili värskendamiseks kohandatud lehemalli loomine, mis näitab vormi ainult siis, kui nad on sisse logitud ja õige rolliga.

Jätan selle selles õpetuses üsna lihtsaks, nii et ma ei lisa näidet standardsete kasutajaprofiili väljade lisamisest WordPressis (e-post, parool jne). See jääb natuke selle õpetuse ulatusest välja. Luban sellel profiili muutmise lehel redigeerida ainult ACF-välju.

ACF-iga olen loonud väljade rühma liikmete kasutajate seadete komplektiga:

Kuidas luua esiotsa vorm ACF-iga

Ja minu teemas on kohandatud lehe mall, mis praegu näeb välja selline – hetkel on lihtsalt tavaline ühe lehe mall;

Real #11kontrollime, kas praegune kasutaja on sisse logitud ja tal on kohandatud roll member. Muutke rolli või miinimumreegel milleks iganes soovite seda esiotsa vormi lubada. Pidage meeles, et isegi WordPressi madalaimal rollil subscriberon juurdepääs oma profiili redigeerimisele administraatoripaneelil.

Lühidalt, tahame lisada need väljad iga liikme kohta sellele kohandatud esiotsa lehele:

Kuidas luua esiotsa vorm ACF-iga

Kuidas ACF-i esiotsa vormid töötavad

Peate lisama kaks funktsioonikutset malli, mille jaoks soovite esiotsa vormi; [acf_form_head](https://www.advancedcustomfields.com/resources/acf_form_head/)()ja [acf_form](https://www.advancedcustomfields.com/resources/acf_form/)().

Funktsioon acf_form_head()tuleb paigutada teie malli ülaossa, enne mis tahes väljundit. Tavaliselt tähendab see mallis enne [get_header](https://developer.wordpress.org/reference/functions/get_header/)(). Funktsioonikutse tagab, et kõik skriptid ja stiilid on lisatud, nii et ACF-väljad renderdatakse õigesti, samuti kõik funktsioonid töö töötlemiseks, kinnitamiseks ja esitamiseks. Me ei pea sellele funktsioonile parameetreid lisama.

Funktsioon acf_form()renderdab esiotsa vormi ja see tuleks paigutada kohta, kus soovite vormi kuvada. See aktsepteerib mitmesuguseid seadeid. Peame minimaalselt teavitama, milliseid välju või rühmi näidata ja kuhu need salvestada.

Kui soovite otsustada, milliseid välju kuvada, esitage tavaliselt väljade rühm (atribuut field_groups). Kuid acf_form()funktsioon toetab ka konkreetsete üksikute väljade pakkumist (omadus fields). Saate lisada ka mitu välja või väljarühma, et ühendada need samale vormile. Selle tõttu field_groupsootab massiivi. Nii et isegi kui soovite kuvada ainult ühte väljarühma, peate massiivi sees selle ID või nälkja esitama.

Teine nõutav atribuut, mille peate vormi esitama, acf_form()on see, kust tuleks andmed laadida ja kuhu need salvestada, atribuudis post_id. Ärge laske end eksitada nimetusest "postitus". Reeglid post_idon samad, kui kasutate get_field(), kui olete ACF-iga töötamisega varem tuttav. Kui väljad on postituse jaoks (postitus, leht, kohandatud postituse tüüpi postitus), peate siin sisestama ainult ID. Kuid kui soovite kasutajate andmeid laadida ja värskendada, järgige järgmist vormingut: user_{user ID}. Samamoodi kategooria väljadega: category_{category ID}. Tutvuge kõigi reeglitega ACF-iget_field() dokumentatsiooni pealkirja „Hangi väärtus erinevatest objektidest" all .

ACF-i esiotsa vormi lisamine meie mallile

Esmalt lisame lehemalli deklaratsiooni (rida) acf_form_head()ülaossa, vahetult enne get_header()– aga pärast lehemalli deklaratsiooni #3. Seejärel lisame kohas, kus tahame vormi renderdada acf_form(), kahe omadusega.

Peame välja selgitama oma väljarühma ID. Kui lisasite väljade rühma koodi järgi (mul on postitus ACF-väljade lisamise kohta koodi järgi ), olete juba esitanud väljarühma nälkja. Seejärel annaksite nälkja field_groupskinnistule massiivina. Kui lisasite väljarühma administraatoripaneelil, peate grupi brauseris avama ja kontrollima URL-i. Oleme huvitatud ID-st, mis kuvatakse pärast " ?post=":

Kuidas luua esiotsa vorm ACF-iga

Minu näites on ID 1145. Siis ma pakun selle massiivi field_groups.

PS: Ma ei soovita ID-d kõvasti kodeerida, kuna see ID on igas WordPressi eksemplaris erinev! Kui töötate nii kohaliku installi kui ka lavastus- ja tootmisserveriga, soovitan kindlasti lisada väljad hoopis koodi järgi. Nii saate määratleda väljarühma nime ja see töötab kõikjal.

Mis puutub post_idkinnisvarasse, siis saan praeguse kasutaja ID hankida WordPressi funktsiooni abil [get_current_user_id](https://developer.wordpress.org/reference/functions/get_current_user_id/)(). Ühendan stringi ‘ user_‘ ja selle funktsiooni tagastamise kui post_id.

Ja see on põhimõtteliselt kõik!

Kui külastan seda lehte liikmekasutajana sisse logituna, näeksin selle kasutaja praegused väärtused. Kõik ACF-välja tüübid töötavad ja näevad head välja. Ja ma saan värskendada väärtusi esiotsa vormi abil ja näha, et neid värskendatakse ka administraatoris.

Vormi edasine kohandamine

Saame kasutajale edastatud seadeid veelgi kohandada acf_form(). Kõigi võimalike sätete nägemiseks vaadake ACF-i dokumentatsiooni acf_form() kohta.

Hetkel kuvatakse meie kasutajaprofiili vormil sätete esitamisel „Postita värskendatud”. Profiili seadete puhul pole sellel mõtet. Saame sõnumit kinnisvaraga kohandada updated_message.

Kui soovite, saate pärast vormi esitamist määrata teise URL-i, kuhu suunata. Vaikimisi laaditakse sama leht uuesti GET parameetriga " ?updated=true". Saate määrata tänulehele konkreetse URL-i või kui vorm on postituse jaoks, võiksite selle postituse vaatamise juurde suunata. Saame esitada atribuudi URL-i return.

Kui soovime vormi esitamisnupul teistsugust teksti, saame selle atribuudis määrata submit_value.

Võite ka öelda, et ärge märgendit acf_form()renderdage. <form>Kui soovite kombineerida ACF-i vormi oma kohandatud vormiga, saate käsitsi määrata ja välja formkirjutada false. Kui teete seda, saab ACF endiselt väärtusi värskendada, kuid peate hoolitsema kohandatud vormi muude väljade värskendamise eest.<form>``<input type="submit"/>

Toimingute käivitamine vormi esitamisel

Mõnikord võite soovida käivitada kasutajaliidese vormi värskendamisel mõne kohandatud funktsiooni või sündmuse. Levinud näide on funktsiooni kirjutamine, mis saadab iga vormi esitamise korral meiliteate.

Advanced Custom Fields pakub väljade värskendamiseks kahte kasulikku konksu; tegevus [acf/save_post](https://www.advancedcustomfields.com/resources/acf-save_post/)ja filter [acf/pre_save_post](https://www.advancedcustomfields.com/resources/acf-pre_save_post/). Jällegi, ärge laske end eksitada nimetusest "postitus". Need käivituvad mis tahes ACF-väljade värskendamise korral, sealhulgas kasutaja, kategooria, menüü jms väljad.

Filtrit acf/pre_save_postkäitatakse ainult esiotsa vormidel, mis kasutavad acf_form(). Selle filtri parameetrina saame post_idsama väärtuse, mille me post_idülalpool acf_form()sisestasime. Filter ootab teid tagasi post_id. Pidage meeles, et kui me ei viita postituse ID-le, peame selle sõeluma. Näiteks kasutaja jaoks peate tegema midagi sellist:

add_filter('acf/pre_save_post', function($post_id) { if (strpos($post_id, 'user_') === false) { return $post_id; }   $user_id = intval(substr($post_id, 5)); // Extracts the user ID   // Do your thing. You'll find the submitted values in $_POST   return $post_id; });

Teise võimalusena võite kasutada konksu acf/save_post, kuid pidage meeles, et see käivitatakse ka administraatoris. Selle konksu parameetrina saate post_idsama, mis acf/pre_save_post. Oluline asi, mida kasutamisel meeles pidada, acf/save_poston see, et saate konksu prioriteedi abil kontrollida, kas teie funktsiooni käivitatakse enne väljade salvestamist või pärast seda. Funktsioon, mille prioriteet on 10 või kõrgem, käivitub pärast väljade salvestamist. Ja prioriteet, mis on väiksem kui 10, käivitatakse enne, kui ACF väärtused salvestab.

add_action('acf/save_post', function($post_id) { // You can fetch the values with standard get_field() });   add_action('acf/save_post', function($post_id) { // You can access the submitted values in $_POST }, 8);

Kui olete funktsiooni enne salvestamist sidunud (prioriteet alla 10), saate võrrelda esitatud väärtusi sellega, mida ACF salvestab. Saate teha get_field()praeguse väärtuse ja võrrelda neid vastava väärtusega $_POST.

Kui soovite midagi teha alles siis, kui välju on esiotsas värskendatud, saate lihtsalt kontrollida, kas meil on administraator [is_admin](https://developer.wordpress.org/reference/functions/is_admin/)(). Allpool on näide sellest, kuidas seadistada meiliteatisi, kui kasutaja värskendab oma seadeid kasutajaliideses.

add_action('acf/save_post', function($post_id) { if (strpos($post_id, 'user_') === false) { return $post_id; }   if (is_admin()) { return; // Bail if we are updating in admin }   $user_id = intval(substr($post_id, 5));   // Use get_field() to get the saved/submitted values if needed // Then use wp_mail() to send an email });

See veebisait kasutab teie kasutuskogemuse parandamiseks küpsiseid. Eeldame, et olete sellega rahul, kuid saate soovi korral loobuda. Nõustu Loe rohkem