✅ WEB- och WordPress -nyheter, teman, plugins. Här delar vi tips och bästa webbplatslösningar.

Skapa innehåll från Gravity Forms-poster

15

Det här inlägget kommer att guida dig i hur du skapar någon form av innehåll (användare, inlägg eller något annat anpassat) baserat på poster i ett Gravity Forms-formulär. Vi kommer att lägga till ett område på skärmen för inträdesdetaljer i admin för att skapa innehåll baserat på den inlämnade informationen.

Vad vi ska göra

Vi kommer att skapa en ny metabox i Gravity Forms skärm för inträdesdetaljer. I denna metabox lägger vi till en knapp. Tanken är att slutanvändaren kan granska inlägget och om de godkänner inträdesdetaljerna kan de trycka på knappen för att utlösa innehållsskapandet.

Skapa innehåll från Gravity Forms-poster

Vår kod kommer att triggas när du klickar på den här knappen, utför den nödvändiga åtgärden och vi kommer valfritt att presentera ett meddelande om resultatet för slutanvändaren. Vi kommer också (valfritt) att lägga till metadata till posten så att vi enkelt kan kontrollera om innehåll har skapats från denna post tidigare eller inte.

Jag kommer att hålla koden ganska enkel och generell så att du enkelt kan ersätta och justera den för att passa ditt projekts behov. I exemplet nedan kommer jag att anta att vi vill skapa en användare programmässigt. Men vad du gör med inträdesuppgifterna är helt upp till dig; du kan skapa ett inlägg, uppdatera annat innehåll eller skicka ett anpassat e-postmeddelande om du vill.

Identifiera fälten

Det första vi måste tänka på är hur man identifierar fälten. Med andra ord måste vi veta vilket fält som är vad. Tänk på att en posts värden i Gravity Forms hänvisas till deras formulärfälts-ID. Och även med tillgång till varje formulärfältinformation – vi behöver ett säkert sätt att veta vilka fält som är vilken information. Ett formulär kan bestå av fyra textinmatningar – vi behöver veta vilken av de fyra textinmatningarna som är för förnamnet.

Du har några alternativ här. Du kan hårdkoda fält-ID:n (t.ex. bestämma att fält-ID 2 är efternamn), men detta är mycket benäget att fel och rekommenderas inte. Ett enkelt sätt är att använda en av de befintliga fältinformationsingångarna i Gravity Forms, till exempel CSS-klassnamn. Men kom ihåg att slutanvändaren kan tillhandahålla flera klassnamn för att få den stil de vill ha, och din kod kan lätt gå sönder om du inte analyserar den här strängen ordentligt. Det sätt jag definitivt rekommenderar är att lägga till dina egna anpassade indata till fält:

Om du vill ha en solid metod för att identifiera fält för din kod, kolla definitivt in hur i inlägget ovan. Men för att hålla det enkelt i det här inlägget kommer jag att använda CSS-klassen och anta att användaren inte anger något annat än de värden vi behöver inom detta område.

Skapar formuläret

Det första steget är naturligtvis att ställa in formuläret med de fält och fälttyper du behöver. Och sedan sätter du in fältidentifierarna på sina rätta platser. Som ett exempel har jag det här formuläret:

Skapa innehåll från Gravity Forms-poster

Och för varje fält jag vill inkludera tillhandahåller jag en anpassad CSS-klass som jag kan rikta in mig på i min kod. Till exempel för förnamn;

Skapa innehåll från Gravity Forms-poster

Låt oss nu gå vidare till kod och hur man skapar en funktionalitet som omvandlar inlämningar till anpassat innehåll.

Lägga till en metabox i inmatningsdetaljer

Det första steget är att lägga till någon form av handlingstrigger för att skapa vårt anpassade innehåll. En naturlig plats finns på skärmen för inmatningsdetaljer. Detta gör att slutanvändaren kan granska de inlämnade värdena och sedan bestämma om de ska skapa innehåll av dem eller inte. Gravity Forms låter utvecklare enkelt skapa anpassade metaboxar på dessa skärmar.

För att skapa en anpassad metabox för inmatningsdetaljer kan vi använda filtret gform_entry_detail_meta_boxes. Det är ett filter som returnerar en array av alla metaboxar för att visas i inmatningsdetaljer. Vi lägger helt enkelt till ett nytt arrayelement för att skapa en ny metabox och definierar en återuppringningsfunktion för att återge dess innehåll. Vi anger en trevlig beskrivande titel i ‘ title‘ och definierar dess position så att den visas i ‘ side‘.

Och då måste vi definiera callback-funktionen: awp_gf_create_user_metabox_render()i vår kod. Denna funktion är ansvarig för att rendera innehållet i metaboxen. Som parameter till denna funktion får vi en array av argument, i vilka vi kan hämta form- och inmatningsobjektet;

function awp_gf_create_user_metabox_render($args) { $form = $args['form']; // Form array. Here we find all the fields in $form['fields'] $entry = $args['entry']; // Entry array. Here we find all values in this current submission $render = ''; echo $render; }

Allt vi behöver göra i den här funktionen är att bygga upp lite HTML och upprepa det.

När det gäller att lägga till en knapp för att utlösa en åtgärd kommer vi att följa samma metod som Gravity Forms själv gör det. Det finns ett formulärelement som omsluter hela skärmen för inmatningsdetaljer, och allt vi behöver göra är att lägga till en onclick-händelse på en skicka-knapp som kommer att ändra actionegenskapen ‘ ‘. Vi definierar vårt eget anpassade åtgärdsnamn, så att vi vet när det har utlösts – och det kommer inte i konflikt med Gravity Forms handlingar.

Låt oss kalla vår anpassade åtgärd ‘ awp_gf_create_user‘ och återge en skicka-knapp med en onclick-händelse så här:

Med ovanstående kod kommer vi att få en ny metabox vid sidan av inmatningsinformationsskärmen, som ser ut så här:

Skapa innehåll från Gravity Forms-poster

Just nu händer ingenting när man klickar på knappen. Det är bara för att vi inte har skrivit någon kod för att lyssna på den än.

Extrahera värden från posten

Som tidigare nämnts identifieras alla inlämnade värden i inmatningsmatrisen av deras fält-ID.

Skapa innehåll från Gravity Forms-poster

I bilden ovan är fältet ID 1 för förnamn, ID 2 är efternamn och så vidare. Men håll ut – vad händer med 5.1, 5.3 och så vidare? I Gravity Forms får vi "sub-ID" för specialfält som accepterar flera värden. Jag har lagt till ett adressfält i mitt formulär som är ett fält, men flera inmatningar. Varje ingång inom detta fält får sina egna ID:n, läggs till huvud-ID:t och en punkt. Om du inte använder något av dessa fält med flera inmatningar, bra! Koden blir väldigt enkel. Men jag har inkluderat det här specialfältet så att vi kan se hur man kommer åt det.

Just nu är vårt problem att koden inte vet vad fält ID 1, 2 eller 3 är till för. Den informationen ligger i formmatrisen, mer specifikt $form['fields']elementet. Detta element innehåller alla fält i formuläret, och vi har full tillgång till varje fältobjekt. Det är här vi kan hitta vår valda identifieringsmetod; i mitt exempel cssClass.

Vi kan helt enkelt gå igenom dessa fält och leta efter de identifierare vi vill extrahera. Jag lägger alla mina identifierare i en array och vi kan helt enkelt kontrollera om ett fält i slingan är ett av dessa.

Men först måste vi veta att knappen klickades. Detta är ganska enkelt; vi kan helt enkelt kontrollera om vår anpassade åtgärd finns i $_POSTarrayen. Men eftersom vi arbetar med Gravity Forms kan vi använda [rgpost](https://docs.gravityforms.com/rgpost/)(). Gravity Forms-funktionen rgpost()returnerar helt enkelt värdet av en POST-begäran. Kontrollerar rgpost('awp_gf_create_user')och $_POST['awp_gf_create_user']är exakt samma. Men vi kommer att använda Gravity Forms funktion.

På line #8definierar vi en array med alla anpassade identifierare vi vill söka efter. Det här är alla värden som jag har angett som CSS-klass i mitt formulär. Sedan, i loopen för varje fält, kontrollerar vi om fältet är en av dessa identifierare. I mitt exempel använder jag CSS-klassen för att identifiera fält men jag rekommenderar att du använder anpassade indata. Denna kod kommer inte heller att fungera om flera CSS-klasser gavs.

Sedan #12lägger vi vid raden till ett nytt element till vår slutliga värdematris med identifieraren som nyckel. Vi använder sedan fältets ID och refererar till inmatningsmatrisen. I slutet av denna loop $valuesska fyllas i med eventuella inlämnade värden som är relevanta. Alla fält som lämnats tomma eller som inte ingår i identifieringsmatrisen kommer att exkluderas.

Om du har lagt till ett speciellt multipelinmatningsfält måste du lägga till lite extra kod för att korrekt referera till sub-ID:n. Jag vet att det awp_addressär en adressfältstyp. Adressfälttyper i Gravity Forms följer ett fast mönster av sub-ID:n och jag har bara aktiverat tre möjliga ingångar (Gatuadress 1 har sub-ID 1, postnummer har sub-ID 3 och City har sub-ID 5). För att hantera den här typen av fält måste vi göra något så här:

På rad #4sammanfogar jag alla värden så att den sista strängen är ett standardiserat enradsadressformat (“, “).

Vi har nu alla nödvändiga värden snyggt sorterade efter identifieringsnycklar i arrayen $values. Vad du gör med detta är helt upp till dig och ditt projekts behov. Men jag kommer att ta med ett exempel på att skapa en användare i WordPress.

Skapa en ny användare från inlämning

För att hålla min kod ren kommer jag att anropa en separat funktion som ansvarar för att skapa en ny användare. Allt jag behöver är att passera värdematrisen. Jag vill att den här funktionen ska returnera någon form av indikation på resultatet av denna åtgärd. På så sätt kan jag skapa ett meddelande oavsett om användaren skapades framgångsrikt eller om det redan finns en användare med den angivna e-postadressen.

Sedan definierar vi helt enkelt awp_gf_create_user()funktionen. Jag kommer att inkludera ett enkelt exempel på att skapa en användare programmatiskt i WordPress. Detta är helt enkelt menat som ett exempel för att visa hur man använder de extraherade värdena.

Först kontrollerar vi om en användare med den angivna e-postadressen finns med [get_user_by](https://developer.wordpress.org/reference/functions/get_user_by/)(). Om inte använder vi [wp_insert_user](https://developer.wordpress.org/reference/functions/wp_insert_user/)()för att lägga till en användare. Jag har också inkluderat ett exempel på lagring av anpassad användarmeta (vårt adressfält). Slutligen bör vår metod returnera resultatet av att skapa användaren. Om användaren redan fanns returnerar vi -1. Annars returnerar vi användar-ID.

Tillbaka i vår metabox-rendering kan vi nu villkorligt lägga till ett meddelande till slutanvändaren baserat på resultatet av detta. Detta är ett enkelt exempel; om det returnerade värdet var -1 finns det redan en användare med den angivna e-postadressen. Och om det returnerade värdet var större än 0 vet vi att det har skapat en användare. Därför får vi ett meddelande som säger att användarskapandet lyckades.

Undvik duplicerat innehåll

Det enkla exemplet ovan kommer att inaktivera skapande av flera användare från samma post eftersom det kontrollerar om en användare med angivna e-postadresser redan finns eller inte. Men i andra fall kanske du inte har denna möjlighet. Så en annan strategi för att undvika att slutanvändare skapar duplicerat innehåll från samma post är att lägga till anpassad ingångsmeta. Med andra ord; om åtgärden lyckades lägger vi till en anpassad meta till den posten. Och sedan kontrollerar vi helt enkelt om den anpassade metan finns innan vi startar handlingen.

Gravity Forms erbjuder metoder för att lägga till anpassade meta till poster; [gform_add_meta](https://docs.gravityforms.com/gform_add_meta/)()samt hämta värden: [gform_get_meta](https://docs.gravityforms.com/gform_get_meta/)().

På raden #4hämtar vi vår anpassade ingångsmeta. Om det fanns (inte tomt), ställer vi in ​​ett meddelande som informerar slutanvändaren om att han eller hon redan har försökt skapa innehåll från denna post tidigare. Om den anpassade metan inte existerade fortsätter vi att skapa vårt innehåll. När innehållet har skapats måste vi lägga till den anpassade metan till posten (rad #10).

Slutsats och slutlig kod

I det här inlägget har jag försökt ge ett exempel på hur man skapar innehåll från en post i Gravity Forms. Kodexemplen är tänkta att ge dig en uppfattning om hur du kan anpassa och ändra den för att passa ditt projekts behov. Jag rekommenderar definitivt att utöka denna funktionalitet för att hantera felmeddelanden bättre. Du kanske också vill lägga till denna metabox för en specifik form. Men det här borde vara en bra bas att bygga vidare på.

Och här är den sista koden:

Inspelningskälla: awhitepixel.com

Denna webbplats använder cookies för att förbättra din upplevelse. Vi antar att du är ok med detta, men du kan välja bort det om du vill. Jag accepterar Fler detaljer