忍者使用get_user_meta

问题描述

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

我从忍者表单中获取表单字段值,如下所示:


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,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”过滤器,您可以在其中更改字段数据以及user_meta_data。

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