Budowanie prostych lub złożonych formularzy w Gravity Forms jest łatwe i szybkie. Jedną z funkcjonalności oferowanych przez Gravity Forms jest umożliwienie warunkowej wstępnej selekcji lub wstępnego wypełnienia pól w formularzu. Jest to przydatne, gdy masz ten sam formularz na wielu stronach kontaktowych dla każdego działu i chcesz wstępnie wybrać odpowiedni dział w formularzu. Lub umieszczasz formularz zapytania na stronach produktów lub usług i chcesz automatycznie uzupełniać informacje o bieżącym produkcie lub usłudze w każdym przesłanym zgłoszeniu.
Możesz dynamicznie wstępnie wybierać lub wstępnie wypełniać pola na kilka sposobów, a także dynamicznie zastępować możliwe wybory w menu rozwijanym, grupie przycisków opcji lub pól wyboru. Dynamicznie wypełniane pole może być polem widocznym, które użytkownik może edytować, lub może zostać przekierowane do pola ukrytego, aby czytelnik przesłanych formularzy otrzymał ważne informacje.
Cztery sposoby dynamicznego wypełniania pól
W tym przewodniku przyjrzymy się czterem sposobom dynamicznego wypełniania pól w formularzu Gravity Forms. Trzy z nich możesz wykonać bez dotykania kodu! Ale jeśli chcesz dynamicznie modyfikować możliwe wybory w grupie wyboru, grupie przycisków radiowych lub polach wyboru, będziesz musiał napisać trochę kodu PHP. Zobaczymy, jak to zrobić na samym końcu.
Możesz dynamicznie wypełniać pola poprzez:
- Dodanie dodatkowych informacji w adresie URL.
- Podaj dodatkowe informacje do skróconego kodu osadzania Gravity Forms.
- Definiowanie dodatkowych informacji do Gravity Forms Block (jeśli używasz WordPressa z Gutenbergiem).
- Używanie filtrów z kodem PHP.
Ale najpierw musimy przejść przez proces aktywacji dynamicznej populacji pola.
Aktywacja pola, aby umożliwić dynamiczną populację
Pierwszym krokiem, niezależnie od metody użytej do wypełnienia pola, jest aktywacja tego w samym polu.
W edycji formularza rozwiń pole, a wewnątrz zakładki „Zaawansowane" znajdziesz pole wyboru „Zezwalaj na dynamiczne wypełnianie pola”. Zaznacz to, a pojawi się nowy tekst umożliwiający zdefiniowanie nazwy parametru. cokolwiek chcesz, ale powinno być wyjątkowe i bez spacji.
Zapisz formularz i możesz zdecydować, której metody chcesz użyć do jego wypełnienia.
Dynamiczne wypełnianie z parametrów adresu URL
Możesz dołączyć parametry GET do łącza do strony, na której osadzony jest formularz, na przykład, jeśli łącze znajduje się w innym tekście posta lub jest niestandardowym łączem w menu WordPress.
Po prostu dodaj zmienne zapytania w parach klucz-wartość, z nazwą parametru jako kluczem i ich wartością, jaką chcesz, aby ich wartość była. Możliwe jest dodanie wielu par klucz-wartość, jeśli chcesz wypełnić wiele pól w formularzu, po prostu oddziel każdą parę za pomocą „&”.
Zakładając, że Twój formularz istnieje na tej stronie: ” https://example.com/contact-me/„, a nazwa parametru to awp_populate_memożesz wypełnić pole używając tego adresu URL: ” https://example.com/contact-me/?awp_populate_me=Hello„.
Pamiętaj, że adresy URL muszą być odpowiednio zakodowane. Na przykład nie można po prostu dodawać spacji lub znaków specjalnych bezpośrednio jako wartości parametru. Zapewnienie „Witaj świecie!” jako wartość byłaby „ Hello%20world%21„. Istnieje wiele narzędzi online do kodowania adresów URL, jeśli chcesz iść w ten sposób.
Dynamicznie wypełniane z shortcode
Wszystkie formularze są wstawiane za pomocą skróconego kodu. Możesz dynamicznie wypełniać pola bezpośrednio w tym krótkim kodzie. Ta metoda może być przydatna, jeśli używasz tego samego formularza w wielu postach (np. rejestrujesz uczestników kilku różnych wydarzeń lub kursów) i musisz podać coś unikalnego, aby wiedzieć, z którego wydarzenia lub kursu pochodzi formularz……
Zwykle po osadzeniu formularza powstaje krótki kod, który wygląda mniej więcej tak:[gravityforms id="1" title="Contact us"]
Edytuj krótki kod i dodaj zestaw kluczy field_valuesdo ciągu, który zawiera nazwę parametru równą żądanej wartości. Na przykład ustawienie parametru awp_populate_mena „Hello World” odbywa się w następujący sposób:
[gravityforms id="1" title="Contact us" field_values="awp_populate_me=Hello World"]
Jeśli chcesz wypełnić wiele pól, dodaj „&” pomiędzy nimi, na przykład:
[gravityforms id="1" title="Contact us" field_values="awp_populate_me=Hello World&awp_another_field=Hello to you too"]
Dynamicznie wypełniane z Block w Gutenberg
Jeśli masz GravityForms w wersji 2.4.13+ i WordPress z Gutenbergiem (WordPress 5+), możesz dodać Gravity Forms jako blok. W ramach tego bloku masz również metodę wypełniania pól.
Dodaj blok „Formularze” do Gutenberga i wybierz swój formularz. Blok powinien zmienić się w podgląd formularza. W prawym panelu rozwiń Zaawansowane, a znajdziesz obszar tekstowy oznaczony „Wartości pól”. W tym obszarze tekstowym możesz wpisać nazwy i wartości parametrów, tak jakbyś wpisywał krótki kod. Np. „ awp_populate_me=Hello World!„
Dynamicznie wypełniane z kodu
I na koniec, jeśli wolisz wypełniać pola za pomocą kodu PHP, istnieją filtry do tego. Możesz umieścić ten kod w motywie functions.php.
Sposób kodowania zależy od rodzaju pola; jak można się domyślić, wypełnianie (zastępowanie wszystkich opcji) w zaznaczeniu, pola wyboru lub grupa radiowa muszą być obsługiwane inaczej niż tylko wypełnianie pojedynczego pola tekstowego.
Wypełnianie pojedynczego pola wartości
Wypełnianie pola, które ma pojedynczą wartość (dotyczy to pola tekstowego, obszaru tekstowego, pola e-mail, pola telefonu itp.) można łatwo wykonać za pomocą filtrowania gform_field_value_<parameter name>. W naszym przykładzie:
add_filter('gform_field_value_awp_populate_me', function($value) {
return 'Hello world!';
});
Możesz również użyć tego filtra, aby wstępnie wybrać opcję w polu wielowartościowym, np. wybierz (menu rozwijane), przyciski opcji lub pola wyboru.
Wypełnianie przycisków wyboru lub opcji
Jeśli po prostu interesuje Cię wstępny wybór opcji, postępuj zgodnie z powyższym przewodnikiem dotyczącym wypełniania pojedynczego pola wartości. Ten kod jest przeznaczony do dostosowywania lub zastępowania możliwych wyborów, które otrzymujesz w terenie.
Filtry renderowania formularzy Gravity Forms
Filtr gform_pre_renderpozwala nam modyfikować formularz tuż przed jego wyświetleniem. Ale dokonując tutaj zmian, powinniśmy upewnić się, że nasze zmiany są stosowane we wszystkich przypadkach; więc musimy się również podłączyć gform_admin_pre_render(odpowiedni filtr pre_render, ale wpływa na edycję administratora/formularza), gform_pre_validation(odpowiedzialny za walidację formularza przed przesłaniem) i gform_pre_submission_filter(filtr po walidacji, ale przed zapisaniem wpisu). Nie martw się, używamy tej samej funkcji dla wszystkich tych filtrów.
Możesz je filtrować bezpośrednio lub możesz podać podkreślenie i identyfikator formularza po nazwie filtru, aby filtrować tylko określony formularz. Np gform_pre_render_1. będzie uruchamiany tylko na formularzu z identyfikatorem formularza równym 1.
Jako argument do wszystkich tych filtrów otrzymujesz obiekt formularza, w którym możesz uzyskać identyfikator formularza (alternatywna metoda dodawania identyfikatora formularza w filtrze) i wszystkie jego pola. Pola formularza to tablica Fieldobiektów – ale jedyne, o co musimy się martwić, to zastąpienie właściwej choiceswłaściwości pola.
Zmiana wyborów
To, jakie dane chcesz zastąpić, zależy wyłącznie od Ciebie, ale choiceswłaściwość pola wymaga tablicy zawierającej elementy „text” i „value”. Na przykład ['text' => 'Hello World!', 'value' => '1', 'text' => 'Second choice', 'value' => '2'].
add_filter('gform_pre_render_1', 'awp_populate_choices');
add_filter('gform_pre_validation_1', 'awp_populate_choices');
add_filter('gform_pre_submission_filter_1', 'awp_populate_choices');
add_filter('gform_admin_pre_render_1', 'awp_populate_choices');
function awp_populate_choices($form) {
foreach ($form['fields'] as &$field) {
if ($field->inputName == 'awp_populate_me') {
// Generate your data here. Below is just an example
$pages = get_posts('numberposts=-1&post_status=publish&post_type=page');
// Generate a nice array that Gravity Forms can understand
$choices = [];
foreach ($pages as $page) {
$choices[] = ['text' => $page->post_title, 'value' => $page->ID];
}
// Set choices to field
$field->choices = $choices;
}
}
return $form;
}
Powyższy kod filtruje tylko identyfikator formularza równy 1. Zaczyna się od przechodzenia przez pola formularza. Ważne jest, aby zwrócić uwagę na „&” przed elementem w pętli, który przekazuje go przez odwołanie. Oznacza to, że jeśli wprowadzimy zmiany w $field, zostanie on zastosowany i zapisany bezpośrednio w $form['fields'].
Drugim krokiem jest kierowanie na pole, które ma nazwę parametru, na który chcemy kierować. Dla każdego pola jest to inputNamewłaściwość. Możesz użyć innych sposobów targetowania pól, np. jego identyfikatora (id) lub klasę CSS (cssClass). Kiedy znajdziemy nasze pole, musimy wygenerować tablicę zastępczą do choices i ustawić $field->choicesna to. W powyższym przykładzie wysyłam zapytanie do wszystkich stron i przeglądam je w pętli, aby wygenerować poprawnie sformatowaną tablicę.
Nie zapomnij zwrócić $formna samym końcu, ponieważ jest to filtr.
Warto wspomnieć, że ten filtr dotyczy również formularza edycji (ponieważ filtrujemy gform_admin_pre_render). Pamiętaj jednak, że nie możesz już manipulować wyborami podczas edycji formularza – po prostu nie zapisze to twoich zmian, ponieważ ten kod zawsze go zastąpi.
Wypełnianie pól wyboru
Wspomnę o tym jeszcze raz; jeśli po prostu interesuje Cię wstępne zaznaczenie pola wyboru, postępuj zgodnie z powyższym przewodnikiem dotyczącym wypełniania pojedynczego pola wartości. Jeśli chodzi o zastępowanie wszystkich wyborów w polach wyboru, proces jest bardzo podobny do wypełniania przycisków wyboru lub opcji powyżej, ale z pewnymi drobnymi różnicami. Polecam najpierw zapoznać się z powyższym wyjaśnieniem dotyczącym przycisków wyboru i opcji.
Używasz tych samych filtrów, a proces uruchamiania jest taki sam; przechodzisz przez pola formularza i znajdujesz ten, który chcesz. Jednak za pomocą pól wyboru musisz zastąpić dwie właściwości w obiekcie pola; choicesi inputs. Właściwość choicesoczekuje takiej samej tablicy, jak w przypadku przycisków wyboru lub opcji.
Właściwość inputoczekuje tablicy z elementami „ label” i „ id„. Nie labelwymaga wyjaśnień i powinien być identyczny z texttablicą wyborów. Element idmusi być zgodny z regułami Gravity Forms ID; łączenie identyfikatora pola, kropki i identyfikatora wyboru, zaczynając od 1 (np. jeśli identyfikator pola to 2, a identyfikator wyboru to 3, poprawny idjest „ 2.3„).
add_filter('gform_pre_render_1', 'awp_populate_choices');
add_filter('gform_pre_validation_1', 'awp_populate_choices');
add_filter('gform_pre_submission_filter_1', 'awp_populate_choices');
add_filter('gform_admin_pre_render_1', 'awp_populate_choices');
function awp_populate_choices($form) {
foreach ($form['fields'] as &$field) {
if ($field->inputName == 'awp_populate_me') {
// Generate your data here. Below is just an example
$pages = get_posts('numberposts=-1&post_status=publish&post_type=page');
// Generate nice arrays that Gravity Forms can understand
$choices = [];
$inputs = [];
$input_id = 1;
foreach ($pages as $page) {
$choices[] = ['text' => $page->post_title, 'value' => $page->ID];
$inputs[] = ['label' => $page->post_title, 'id' => $field->id. '.'. $input_id];
$input_id++;
}
// Set choices to field
$field->choices = $choices;
$field->inputs = $inputs;
}
}
return $form;
}
Ponieważ identyfikator wyboru musi zaczynać się od 1, rozpoczynamy zmienną licznika przed pętlą i dodajemy 1 dla każdego elementu w pętli i używamy tego razem z identyfikatorem pola i kropką, jak idw inputstablicy.
Kiedy mamy nasze dwie tablice, ustawiamy je na polach choicesi inputswłaściwościach i zwracamy zmodyfikowany formularz.

