Jak v Ninja Forms přidat do formuláře variabilní symbol

Ninja Forms je skvělý modul pro vytváření formulářů. Obsahuje několik typů polí, ale není mezi nimi možnost generovat např. variabilní symbol. Napadlo mě řešení.

Mezi poli jsem nenašel žádné, které by mohlo být skryté a zároveň generovalo hodnotu nebo ji aspoň mohlo nést. Všechna pole slouží pro vstup uživatele, nebo přímo zobrazují obsah, nebo mají jiný účel (výpočetní, bezpečnostní).

Modul je profesionálně napsaný, to znamená, že mi nedalo moc práce najít hook, který se volá před a po zpracování formuláře (je jich několik). Vytvořil jsem skryté pole a snažil se mu přiřadit hodnotu (kód je níže). To se ale ukázalo jako nefunkční . Zbývala druhá varianta – použít klasický <input type=“text“> a pomocí CSS ho skrýt. To samozřejmě fungovalo.

Jak vytvořit variabilní symbol

Další úkolem bylo určit formát variabilního symbolu. Slouží k odlišení jednotlivých objednávek a jejich párování s platbami na bankovním účtu. Musí se jednat o vzestupnou číselnou řadu, která neměla začínat jedničkou, a unikátní řetězec, u nějž nebyl počet číslic  omezen. Jako vždy, když chci věci dělat jednoduše, nechci vymýšlet nic složitého a zatěžovat databázi, sáhl jsem i tentokrát po aktuálním čase. Není to tedy originální, ale účel to také podle zákazníka splnilo. Variabilní symbol dostal tvar yyyymmddhhmmss (tedy celé datum a celý čas v okamžiku odeslání formuláře).

Jak poslat symbol zákazníkovi mailem

Formulář funguje, v systému se objednávky ukládaly. Zbývalo vyřešit odesílání mailem, ale to už bylo celkem jednoduché. Správcům chodí výpis všech polí automaticky. Do šablony pro zákazníka stačilo přidat [ninja_forms_field id=37] (kde 37 je číslo pole).

A to je vše.

add_action( 'ninja_forms_post_process', 'nfoi_add_order_id' );

function nfoi_add_order_id(){
    global $ninja_forms_processing;
    $form_id = $ninja_forms_processing->get_form_ID();
    if ( $form_id == 1 ) {
        $d = date('YmdHis');
        $ninja_forms_processing->update_field_value( 37, $d ); 
    }
}