Dinamikus kitöltés: a bejegyzés szerzője és a legördülő lista
Két kódpélda: a bejegyzés szerzőjének e-mail-címe egy mezőbe, és a legördülő lista, rádiógomb vagy többválasztós mező választékának feltöltése bejegyzésekkel.
Ez a fejezet két kódos példát mutat a dinamikus kitöltésre. Ha még nem ismered a dinamikus kitöltés alapjait, előbb olvasd el a Mező dinamikus kitöltése fejezetet. A kódok helyéről a Hová tedd a kódrészleteket? fejezet szól.
A bejegyzés szerzőjének kitöltése
Szekció neve “A bejegyzés szerzőjének kitöltése”Az első példa azt mutatja meg, hogyan töltheted ki egy mezőbe annak a bejegyzésnek a szerzői e-mail-címét, amelyben az űrlap megjelenik.
add_filter( 'gform_field_value_author_email', 'populate_post_author_email' );function populate_post_author_email( $value ) { global $post;
$author_email = get_the_author_meta( 'email', $post->post_author );
return $author_email;}A kódot másold be az aktív sablon functions.php fájljába, egy saját funkcióbővítménybe vagy egy saját kiegészítőbe.
Hogyan működik?
Szekció neve “Hogyan működik?”A függvényt a gform_field_value_author_email szűrőhöz kapcsoljuk. Amikor a Gravity Forms megjeleníti az űrlapot az oldalon, meghívja a függvényt, és a visszaadott értéket beírja a mezőbe.
Honnan tudja, melyik mezőt töltse ki? A mező dinamikus kitöltési paraméterneve alapján: a szűrő nevének utolsó része (itt author_email) a paraméternév. Ugyanazt a paraméternevet több mezőnél is használhatod, és a kód mindet kitölti.
A függvényben a $post globális objektumból elérjük a jelenlegi bejegyzés szerzőjének azonosítóját (post_author), majd a WordPress get_the_author_meta függvényével lekérjük a szerző e-mail-címét. A visszaadott értéket a Gravity Forms automatikusan beírja a mezőbe.
Csak adminisztrátornak látható mező
Szekció neve “Csak adminisztrátornak látható mező”Elképzelhető, hogy a mező szépen kitöltődik, de az első kipróbáláskor kiderül, hogy a szerző e-mail-címe belekerül az értesítő e-mail {all_fields} címkéjébe, te viszont azt szeretnéd, hogy csak a rendszergazda lássa. Ilyenkor:
- állítsd a mező láthatóságát Adminisztratív értékre;
- cseréld az összefűző címkét
{all_fields:noadmin}címkére.
Így a mező nem jelenik meg az alapértelmezett értesítő e-mailekben. Ha a mezőn be van kapcsolva a dinamikus kitöltés, az űrlap megjelenítésekor rejtett mezőként szerepel; ha nincs bekapcsolva, egyáltalán nem jelenik meg.
Legördülő lista, rádiógomb és többválasztós mező kitöltése
Szekció neve “Legördülő lista, rádiógomb és többválasztós mező kitöltése”A legördülő lista dinamikus kitöltése gyakori igény termékválasztó űrlapoknál, termékopciós űrlapoknál, vagy ha egy korábbi beküldések alapján kell a későbbi gyűjtőmező választéka. Ez a példa egyedi kóddal jeleníti meg a már meglévő bejegyzések listáját legördülő lista választékaként. Ha nem szeretnél kódolni, vagy bonyolultabb képesség kell, keress külső megoldást a bővítménytárakban és a közösségi kiegészítők között.
A példában a látogató a dinamikusan előállított listából választja ki a kedvenc bejegyzését.
A dinamikus kitöltés nem működik, ha az oldal, amelyen az űrlap van, gyorsítótárazott. Ez a gyorsítótár következménye, nem a Gravity Forms korlátja. A témáról a Gyorsítótár és szkript-optimalizáló fejezet szól.
A kód
Szekció neve “A kód”add_filter( 'gform_pre_render_123', 'populate_posts' );add_filter( 'gform_pre_validation_123', 'populate_posts' );add_filter( 'gform_pre_submission_filter_123', 'populate_posts' );add_filter( 'gform_admin_pre_render_123', 'populate_posts' );function populate_posts( $form ) {
foreach ( $form['fields'] as &$field ) {
if ( $field->type != 'select' || strpos( $field->cssClass, 'populate-posts' ) === false ) { continue; }
// Itt további paraméterekkel módosíthatod, mely bejegyzéseket kéri le $posts = get_posts( 'numberposts=-1&post_status=publish' );
$choices = array();
foreach ( $posts as $post ) { $choices[] = array( 'text' => esc_html( $post->post_title ), 'value' => $post->post_title ); }
// A „Válassz bejegyzést” szöveget cseréld a kívánt útmutató opcióra $field->placeholder = 'Válassz bejegyzést'; $field->choices = $choices;
}
return $form;}A kódot a sablon functions.php fájljába kell illeszteni. A 123 az űrlap azonosítója: cseréld a sajátodéra (Űrlap azonosítója).
A négy szűrő
Szekció neve “A négy szűrő”A kód négy szűrőt használ, hogy a mező minden helyzetben helyesen legyen kitöltve:
| Szűrő | Mire való |
|---|---|
gform_pre_render |
A választék feltöltése, amikor az űrlap megjelenik a frontenden. |
gform_pre_validation |
A választék elérhetővé tétele az ellenőrzés idején. |
gform_pre_submission_filter |
A választék megőrzése a beküldés feldolgozásakor. |
gform_admin_pre_render |
A választék feltöltése, amikor a beküldést az admin felületen nézed. |
Az űrlapspecifikus gform_pre_validation szűrő az 1.9-es kiadástól létezik.
Az egyedi szűrőfüggvény
Szekció neve “Az egyedi szűrőfüggvény”A példában a függvény neve populate_posts. Mivel a Gravity Forms hívja a szűrőkből, paraméterként megkapja az $form űrlapobjektumot. Ezt módosítjuk, és a végén visszaadjuk.
Végiglépés a mezőkön
Szekció neve “Végiglépés a mezőkön”foreach ( $form['fields'] as &$field ) { ... }Az űrlapobjektumból végigmegyünk a mezőkön, és megkeressük azokat, amelyeket módosítani akarunk. A &$field jelölés a mezőt hivatkozásként adja át, így a tényleges mezőobjektumot módosítjuk, nem egy másolatot.
if ( $field->type != 'select' || strpos( $field->cssClass, 'populate-posts' ) === false ) { continue;}Csak a legördülő listákat (select) módosítjuk, amelyeknek van populate-posts CSS-osztálya. A mezőt azonosító alapján is megkereshetnénk, de akkor az űrlap változtatásakor a kódot is módosítani kellene. A CSS-osztállyal közvetlenül a Gravity Forms admin felületén jelölheted ki a célmezőt. Ha az aktuális mező nem legördülő lista, vagy nincs meg az osztálya, kihagyjuk.
A bejegyzések lekérése
Szekció neve “A bejegyzések lekérése”$posts = get_posts( 'numberposts=-1&post_status=publish' );A get_posts() WordPress-függvény a megadott paraméterek szerint ad vissza bejegyzéseket. Bármilyen bejegyzéstípust lekérhetsz, egyedit is, a post_type paraméterrel:
$posts = get_posts( 'post_type=event&numberposts=-1&post_status=publish' );Kategória (taxonómia) szerint is szűrhetsz:
$posts = get_posts( array( 'post_type' => 'product', 'numberposts' => -1, 'post_status' => 'publish', 'tax_query' => array( array( 'taxonomy' => 'product_category', 'field' => 'slug', 'terms' => 'featured' ) )) );A választék tömbjének összeállítása
Szekció neve “A választék tömbjének összeállítása”A Gravity Forms a több választási lehetőséget tartalmazó mezőknél (például a legördülő listánál) a mező choices tulajdonságában tárolja a választékot, amely lehetőségek tömbje. Egy lehetőség tulajdonságai:
| Tulajdonság | Jelentés |
|---|---|
text |
Amit a felhasználó lát a legördülő listában. |
value |
Amit a Gravity Forms eltárol. |
isSelected |
Ki van-e jelölve a lehetőség. |
price |
Csak termékmezőknél. |
A példában csak a text és a value kell.
$choices = array();Először létrehozunk egy tömböt a lehetőségeknek.
foreach ( $posts as $post ) { $choices[] = array( 'text' => esc_html( $post->post_title ), 'value' => $post->post_title );}Ezután végigmegyünk a lekért bejegyzéseken, és mindegyikből egy lehetőséget készítünk. A text a bejegyzés címe, biztonsági okból esc_html()-be csomagolva; a value ugyanaz a cím. Ha a kiválasztott bejegyzés azonosítóját szeretnéd gyűjteni, a $post->post_title helyett $post->ID kell. A kedvenc bejegyzés rögzítéséhez a cím elég.
$field->choices = $choices;A ciklus végén a kész $choices tömböt hozzárendeljük a mező choices tulajdonságához.
Helykitöltő lehetőség
Szekció neve “Helykitöltő lehetőség”$field->placeholder = 'Válassz bejegyzést';A legördülő lista első lehetősége legyen útmutató szöveg, például „Válassz bejegyzést”. Ezt a mező placeholder tulajdonságával adod meg. A megjelenített listában a helykitöltő lehetőség értéke üres. Ha a mező kötelező, a látogatónak ettől eltérő lehetőséget kell választania, különben ellenőrzési hibát kap.
Jelölőnégyzetek
Szekció neve “Jelölőnégyzetek”A jelölőnégyzetek is kitölthetők dinamikusan, de több kezelés kell, mert szerkezetük beviteli mezők és lehetőségek csoportja: a choices mellett az inputs tulajdonsággal is dolgozni kell. A folyamat hasonló.
Készült: