问题描述
我正在尝试为第三方应用程序获取客户端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/