web-dev-qa-db-ja.com

忍者フォームを介してユーザーと管理者に表示される一意の識別子を作成します

私は、フォームの送信後にユーザーに表示できる一意の識別子の作成方法と、その送信を受信する管理者にドキュメントを提供しようとしています。

  1. ユーザーがフォームを送信する
  2. ユーザーは「あなたのコードは2290です」という確認メールを受け取ります
  3. 管理者はフォーム確認「ユーザーが注文Xとコード2290でサインアップしました」を受け取ります

送信順から連番をつかむ方法を見つけましたが、それはその特定のユーザーに固有のコードである必要があります

私が考えた唯一のことはそれらのIPと名前のある種の中継を追加することだろう

HashidsのようなものはそれらのIPを小さなユニークな識別子に変換することができますが、私は本当にこの複雑なものを実装する方法がわからないので、忍者フォームが許可/提供することを見落とした簡単なものが必要です

1
Tom Hutchison

このコードをテーマのfunctions.php:に入れてください(Ninja Forms 2.9.xの場合)。

function unique_code_submission( $data, $field_id ) {
    global $uniqueCode;

    if ( "string" !== gettype( $uniqueCode ) )
        $uniqueCode = uniqid();

    /* here goes your code to populate a field */

    return $data;
}
add_filter( 'ninja_forms_field', 'unique_code_submission', 10, 2 );

上記の関数内では、$uniqueCodeグローバル変数に13文字のユニークな長さのコードがあります。このコードは、フィルタが最初に起動されたときに1回だけ生成されます。 ninja_forms_fieldfilterに関するさらに詳しい情報: ここ

更新:Ninja Forms 3.0以降の場合:

function unique_code_submission( $fields ) {
    $uniqueCode = uniqid();

    /*  here goes your code to populate a field. For example:
        let's populate hidden field, which has key value of
        'hidden_1492812363939' */

    $index = 0;
    while ( 0 <= $index ) {
        ++$index;
        if ( 'hidden_1492812363939' == $fields[ $index-1 ][ 'key' ] ) {
            $fields[ $index-1 ][ 'value' ] = $uniqueCode;
            $index = -1;
        }
    }

    return $fields;
}
add_filter( 'ninja_forms_display_fields', 'unique_code_submission', 10, 1 );