Tovább a tartalomhoz

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.

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.

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.

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:

  1. állítsd a mező láthatóságát Adminisztratív értékre;
  2. 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.

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 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.

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.

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.

$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.

$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.

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:

Tiszteletben tartjuk a magánszférádat

Sütiket használunk a böngészési élmény javítására és a forgalom elemzésére. Az analitika csak akkor indul, ha engeded. Adatvédelmi irányelvek, Sütitájékoztató.

Sütibeállítások