Ninja 使用 get_user_meta 形成隐藏字段的渲染值

Ninja Forms Rendering Values to Hiden Field with get_user_meta

我正在尝试为必须使用 Zapier 进行文件同步的第三方应用程序获取客户端 ID,这与使用 WordPress 创建的用户 ID 是分开的。我需要根据表单的名字创建一个特定的客户端 ID。例如:client-123.

我正在从我的 Ninja 表单中获取我的表单字段值,如下所示:


add_action( 'eks_ninja_forms_processing', 'my_ninja_forms_processing_callback');

function my_ninja_forms_processing_callback( $form_data ){

    $user_id = get_current_user_id();
    $form_id = $form_data[ 'form_id' ];
    $form_fields = $form_data[ 'fields' ];

    foreach( $form_fields as $field ){
        $field_id    = $field[ 'id' ];
        $field_key   = $field[ 'key' ];
        $field_value = $field[ 'value' ];
        if( 'firstname_1603293500271' == $field[ 'key' ] )
            update_user_meta( $user_id, 'child_name', $field_value );   
        }
    }
}

然后我想做的是将用户元内容传递到隐藏字段,如下所示:

function nf_hidden_field_values( $value, $field_type, $field_settings ) {
    global $post;
    $value = '';
    $user_id = get_current_user_id();
    
    if ( $field_settings['key'] == 'hidden_1603696346151' ) {
    
        $client_name = get_user_meta( $user_id, 'child_name', true )

        $num = wp_rand( 1, 100 );
        $value = $client_name.$num;
    }

    return $value;
}
add_filter( 'ninja_forms_render_default_value', 'nf_hidden_field_values', 9999, 3 );

隐藏字段作为客户端 ID 发送到 Zapier 以同步到另一个应用程序。问题是 ninja_forms_render_default_value 过滤器似乎在代码的第一部分更新用户元数据之前执行。如果用户元数据为空,则 'child_name' 元数据为空。如果它有一个值并且我想更新它它是旧值。所以我总是落后一步。

理想情况下,过滤器将最后执行,但我不确定这是否可能。我尝试了一个包装函数,但这没有用,我很确定这不是一个好的方法。

我可以跳过尝试使用 'child_name' 元和硬编码的东西,但这并不理想。

非常感谢任何帮助。

克里斯

看看 'ninja_forms_submit_data'-过滤器,您可以在那里更改 field-data 以及 user_meta_data。

https://developer.ninjaforms.com/codex/submission-processing-hooks/