✅ Nowości, motywy, wtyczki WEB i WordPress. Tutaj dzielimy się wskazówkami i najlepszymi rozwiązaniami dla stron internetowych.

Programowe tworzenie treści z wpisów formularzy grawitacyjnych

21

Ten post poprowadzi Cię, jak tworzyć wszelkiego rodzaju treści (użytkownicy, posty lub coś innego niestandardowego) na podstawie wpisów w formularzu Gravity Forms. Dodamy obszar na ekranie szczegółów wpisu w admin, aby tworzyć treści na podstawie przesłanych informacji.

Co zrobimy

Stworzymy nowy metabox na ekranie szczegółów wpisu Gravity Form. W tym metabox dodamy przycisk. Chodzi o to, aby użytkownik końcowy mógł przejrzeć wpis, a jeśli zatwierdzi szczegóły wpisu, może nacisnąć przycisk, aby uruchomić tworzenie treści.

Programowe tworzenie treści z wpisów formularzy grawitacyjnych

Nasz kod zostanie wyzwolony po kliknięciu tego przycisku, wykonaniu niezbędnej akcji, a opcjonalnie zaprezentujemy użytkownikowi końcowemu komunikat o wyniku. Dodamy również (opcjonalnie) metadane do wpisu, abyśmy mogli łatwo sprawdzić, czy treść została utworzona z tego wpisu wcześniej, czy nie.

Postaram się, aby kod był dość prosty i ogólny, dzięki czemu można go łatwo podmieniać i dostosowywać do potrzeb projektu. W poniższym przykładzie założę, że chcemy programowo utworzyć użytkownika. Ale to, co zrobisz ze szczegółami wpisu, zależy wyłącznie od Ciebie; możesz utworzyć post, zaktualizować inne treści lub wysłać niestandardowy e-mail, jeśli chcesz.

Identyfikacja pól

Pierwszą kwestią, którą musimy zrobić, jest to, jak zidentyfikować pola. Innymi słowy, musimy wiedzieć, które pole jest czym. Pamiętaj, że wartości wpisu w Gravity Forms odnoszą się do ich identyfikatorów pól formularza. A nawet mając dostęp do informacji z każdego pola formularza – potrzebujemy niezawodnego sposobu, aby wiedzieć, które pola są jakimi informacjami. Formularz może składać się z czterech wejść tekstowych — musimy wiedzieć, które z czterech wejść tekstowych dotyczą imienia.

Masz tutaj kilka alternatyw. Można na stałe zakodować identyfikatory pól (np. określić, że identyfikator pola 2 to nazwisko), ale jest to bardzo podatne na błędy i nie jest zalecane. Prostym sposobem jest użycie jednego z istniejących danych wejściowych pola w Gravity Forms, na przykład nazwy klasy CSS. Należy jednak pamiętać, że użytkownik końcowy może podać wiele nazw klas, aby uzyskać żądaną stylizację, a kod może łatwo się zepsuć, jeśli nie przeanalizujesz prawidłowo tego ciągu. Zdecydowanie polecam dodawanie własnych niestandardowych danych wejściowych do pól:

Jeśli chcesz solidnej metody identyfikacji pól dla Twojego kodu, zdecydowanie sprawdź jak w powyższym poście. Ale żeby to uprościć w tym poście, użyję klasy CSS i założę, że użytkownik nie wprowadza niczego poza wartościami, których potrzebujemy w tym obszarze.

Konfiguracja formularza

Pierwszym krokiem jest oczywiście skonfigurowanie formularza z potrzebnymi polami i typami pól. A następnie wstawiasz identyfikatory pól we właściwych miejscach. Jako przykład mam ten formularz:

Programowe tworzenie treści z wpisów formularzy grawitacyjnych

I dla każdego pola, które chcę uwzględnić, dostarczam niestandardową klasę CSS, którą mogę kierować w swoim kodzie. Na przykład na imię;

Programowe tworzenie treści z wpisów formularzy grawitacyjnych

Przejdźmy teraz do kodu i tworzenia funkcji, która konwertuje zgłoszenia na zawartość niestandardową.

Dodanie metaboxa w szczegółach wpisu

Pierwszym krokiem jest dodanie pewnego rodzaju wyzwalacza akcji, aby utworzyć naszą niestandardową treść. Naturalnym miejscem jest ekran szczegółów wpisu. Pozwala to użytkownikowi końcowemu na przejrzenie przesłanych wartości, a następnie podjęcie decyzji, czy tworzyć z nich treści. Gravity Forms umożliwia programistom łatwe tworzenie niestandardowych metaboksów na tych ekranach.

Aby utworzyć niestandardowy metabox do szczegółów wpisu możemy użyć filtru gform_entry_detail_meta_boxes. Jest to filtr, który zwraca tablicę wszystkich metaboksów do wyświetlenia w szczegółach wpisu. Po prostu dodajemy nowy element tablicy, aby utworzyć nowy metabox i definiujemy funkcję zwrotną, która renderuje jego zawartość. Ustawiamy ładny opisowy tytuł w ‘ title‘ i określamy jego pozycję tak, aby pojawiała się w ‘ side‘.

A potem musimy zdefiniować funkcję zwrotną: awp_gf_create_user_metabox_render()w naszym kodzie. Ta funkcja odpowiada za renderowanie zawartości metaboksu. Jako parametr tej funkcji otrzymujemy tablicę argumentów, w której możemy pobrać obiekt formularza i wpisu;

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; }

Wszystko, co musimy zrobić w tej funkcji, to zbudować trochę kodu HTML i wyświetlić go.

Jeśli chodzi o dodanie przycisku uruchamiającego akcję, zastosujemy tę samą metodę, jak robi to samo Gravity Forms. Istnieje element formularza otaczający cały ekran szczegółów wpisu, a wszystko, co musimy zrobić, to dodać zdarzenie onclick do przycisku przesyłania, które zmieni właściwość „ action". Definiujemy własną niestandardową nazwę akcji, dzięki czemu wiemy, kiedy została uruchomiona – i nie koliduje z akcjami Gravity Forms.

Wywołajmy naszą akcję niestandardową „ awp_gf_create_user” i wyrenderujmy przycisk przesyłania ze zdarzeniem onclick, jak na przykład:

Z powyższym kodem dostaniemy nowy metabox z boku na ekranie szczegółów wpisu, wyglądający tak:

Programowe tworzenie treści z wpisów formularzy grawitacyjnych

W tej chwili nic się nie dzieje po kliknięciu przycisku. To dlatego, że nie napisaliśmy jeszcze żadnego kodu, aby go słuchać.

Pobieranie wartości z wpisu

Jak wspomniano wcześniej, wszystkie przesłane wartości w tablicy wpisów są identyfikowane przez ich identyfikatory pól.

Programowe tworzenie treści z wpisów formularzy grawitacyjnych

Na obrazku powyżej pole ID 1 to imię, ID 2 to nazwisko i tak dalej. Ale poczekaj – co się dzieje z 5.1, 5.3 i tak dalej? W Gravity Forms otrzymujemy "sub-ID" dla specjalnego pola, które akceptuje wiele wartości. Do mojego formularza dodałem pole adresu, które jest jednym polem, ale wieloma danymi wejściowymi. Każde wejście w tym polu otrzymuje własne identyfikatory, dołączone do głównego ID i kropka.Jeśli nie używasz żadnego z tych pól z wieloma danymi wejściowymi, świetnie!Kod staje się naprawdę prosty.Ale dodałem to specjalne pole, abyśmy mogli zobaczyć, jak uzyskać do niego dostęp.

W tej chwili naszym problemem jest to, że kod nie wie, do czego służy pole o identyfikatorze 1, 2 lub 3. Ta informacja znajduje się w tablicy formularzy, a dokładniej w $form['fields']elemencie. Ten element zawiera wszystkie pola w formularzu i mamy pełny dostęp do każdego obiektu pola. To tutaj możemy znaleźć wybraną przez nas metodę identyfikacji; w moim przykładzie cssClass.

Możemy po prostu zapętlić te pola i poszukać identyfikatorów, które chcemy wyodrębnić. Umieszczę wszystkie moje identyfikatory w tablicy i możemy po prostu sprawdzić, czy pole w pętli jest jednym z nich.

Ale najpierw musimy wiedzieć, że przycisk został kliknięty. To całkiem proste; możemy po prostu sprawdzić, czy nasza niestandardowa akcja znajduje się w $_POSTtablicy. Ale ponieważ pracujemy z Gravity Forms, możemy użyć [rgpost](https://docs.gravityforms.com/rgpost/)(). Funkcja Gravity Forms rgpost()po prostu zwraca wartość żądania POST. Sprawdzanie rgpost('awp_gf_create_user')i $_POST['awp_gf_create_user']jest dokładnie takie samo. Ale użyjemy funkcji Gravity Forms.

W linii #8definiujemy tablicę ze wszystkimi niestandardowymi identyfikatorami, które chcemy wyszukać. To są wszystkie wartości, które wprowadziłem jako klasę CSS w moim formularzu. Następnie w pętli dla każdego pola sprawdzamy, czy pole jest jednym z tych identyfikatorów. W moim przykładzie używam klasy CSS do identyfikacji pól, ale zalecam używanie niestandardowych danych wejściowych. Ten kod również nie zadziała, jeśli podano wiele klas CSS.

Następnie w wierszu #12dodajemy nowy element do naszej końcowej tablicy wartości z identyfikatorem jako kluczem. Następnie używamy identyfikatora pola i odwołujemy się do tablicy wejściowej. Na końcu tej pętli $valuesnależy wypełnić wszelkie przesłane wartości, które są istotne. Wszelkie pola, które pozostały puste lub nie zostały uwzględnione w tablicy identyfikatorów, zostaną wykluczone.

Jeśli dodałeś specjalne pole wielokrotnego wprowadzania, będziesz musiał dodać dodatkowy kod, aby prawidłowo odwoływać się do identyfikatorów podrzędnych. Wiem, że awp_addressjest to typ pola Adres. Typy pól adresowych w Gravity Forms są zgodne ze stałym wzorem identyfikatorów podrzędnych, a ja włączyłem tylko trzy z możliwych danych wejściowych (adres ulicy 1 ma identyfikator podrzędny 1, kod pocztowy ma identyfikator podrzędny 3, a miasto ma identyfikator podrzędny 5). Aby obsłużyć tego rodzaju pola, musimy zrobić coś takiego:

W wierszu #4łączę wszystkie wartości, tak aby końcowy ciąg był standardowym jednowierszowym formatem adresu („,”).

Mamy teraz wszystkie niezbędne wartości ładnie posortowane według kluczy identyfikatorów w tablicy $values. To, co z tym zrobisz, zależy wyłącznie od Ciebie i potrzeb Twojego projektu. Ale podam przykład tworzenia użytkownika w WordPressie.

Tworzenie nowego użytkownika z wysłania zgłoszenia

Aby mój kod był czysty, wywołam osobną funkcję odpowiedzialną za utworzenie nowego użytkownika. Wszystko czego potrzebuję to przekazać tablicę wartości. Chcę, aby ta funkcja zwracała jakieś wskazanie wyniku tej akcji. W ten sposób mogę utworzyć wiadomość niezależnie od tego, czy użytkownik został pomyślnie utworzony, czy też użytkownik z podanym adresem e-mail już istnieje.

Następnie po prostu definiujemy awp_gf_create_user()funkcję. Podam prosty przykład tworzenia użytkownika programowo w WordPressie. Jest to po prostu przykład pokazujący, jak używać wyodrębnionych wartości.

Najpierw sprawdzamy, czy użytkownik o podanym adresie e-mail istnieje z [get_user_by](https://developer.wordpress.org/reference/functions/get_user_by/)(). Jeśli nie, używamy [wp_insert_user](https://developer.wordpress.org/reference/functions/wp_insert_user/)()do dodania użytkownika. Podałem również przykład przechowywania niestandardowej meta użytkownika (nasze pole adresowe). Wreszcie nasza metoda powinna zwrócić wynik utworzenia użytkownika. Jeśli użytkownik już istniał, zwracamy -1. W przeciwnym razie zwracamy identyfikator użytkownika.

Po powrocie do renderowania metaboksu możemy teraz warunkowo dodać wiadomość do użytkownika końcowego na podstawie wyniku tego. To jest prosty przykład; jeśli zwrócona wartość wynosiła -1, użytkownik z podanym adresem e-mail już istnieje. A jeśli zwrócona wartość była większa niż 0, wiemy, że pomyślnie utworzył użytkownika. W ten sposób wyświetlamy komunikat informujący, że tworzenie użytkownika zakończyło się pomyślnie.

Unikanie duplikatów treści

Powyższy prosty przykład dziedziczy wyłącza tworzenie wielu użytkowników z tego samego wpisu, ponieważ sprawdza, czy użytkownik z podanym adresem e-mail już istnieje. Ale w innych przypadkach możesz nie mieć takiej możliwości. Tak więc inną strategią, aby uniknąć tworzenia duplikatów treści przez użytkowników końcowych z tego samego wpisu, jest dodanie niestandardowej meta wpisu. Innymi słowy; jeśli akcja się powiodła, dodamy niestandardową meta do tego wpisu. A potem po prostu sprawdzamy, czy ta niestandardowa meta istnieje, zanim rozpoczniemy akcję.

Gravity Forms oferuje metody dodawania niestandardowych meta do wpisów; [gform_add_meta](https://docs.gravityforms.com/gform_add_meta/)()a także pobieranie wartości: [gform_get_meta](https://docs.gravityforms.com/gform_get_meta/)().

W linii #4pobieramy naszą niestandardową meta wpisu. Jeśli istniał (nie pusty), ustawiamy komunikat informujący użytkownika końcowego, że próbował już wcześniej tworzyć treść z tego wpisu. Jeśli niestandardowa meta nie istniała, kontynuujemy tworzenie naszej zawartości. Po pomyślnym utworzeniu treści musimy dodać niestandardową meta do wpisu (linia #10).

Wniosek i kod końcowy

W tym poście próbowałem podać przykład tworzenia treści z wpisu w Gravity Forms. Przykłady kodu mają na celu dać ci pomysł, jak dostosować i zmienić go, aby pasował do potrzeb twojego projektu. Zdecydowanie polecam rozszerzenie tej funkcjonalności, aby lepiej radzić sobie z komunikatami o błędach. Możesz również dodać to metabox tylko dla określonych formularzy. Ale to powinna być dobra baza do budowania.

A oto ostateczny kod:

Źródło nagrywania: awhitepixel.com

Ta strona korzysta z plików cookie, aby poprawić Twoje wrażenia. Zakładamy, że nie masz nic przeciwko, ale możesz zrezygnować, jeśli chcesz. Akceptuję Więcej szczegółów