Ninjaforms按用户查询提交记录 如何在前端展示登录用户的表单提交内容
Ninja Forms 前端用户提交记录实现方案
前置准备
你需要提前获取两个核心配置值,后续代码中需要替换为你自己的实际值:
- 文件上传表单的ID(可在Ninja Forms表单列表页查看)
- 表单内文件上传字段的KEY(可在表单编辑页点击对应上传字段,在「高级」设置tab中查看)
核心实现逻辑
不要直接通过 Ninja_Forms()->form( $form_id ) 方法拉取提交,该方法默认无用户维度过滤,且返回数据结构冗余,推荐直接使用Ninja Forms官方提供的提交查询函数 nf_get_submissions() 实现过滤查询。
完整示例代码
你可以将以下代码插入到你的用户仪表盘模板对应位置即可:
// 校验用户登录状态 if ( ! is_user_logged_in() ) { echo '请先登录后查看提交记录'; return; } $current_user_id = get_current_user_id(); // 替换为你实际的表单ID $target_form_id = 2; // 替换为你实际的文件上传字段KEY $upload_field_key = 'file_upload_123456'; // 按用户ID过滤查询提交记录 $submissions = nf_get_submissions( [ 'form_id' => $target_form_id, 'user_id' => $current_user_id, 'orderby' => 'date_submitted', 'order' => 'DESC', // 可自定义返回条数,-1为返回所有 'numberposts' => 20 ] ); if ( empty( $submissions ) ) { echo '暂无提交的文件记录'; return; } ?> <!-- 输出记录列表 --> <ul class="user-file-submissions"> <?php foreach ( $submissions as $sub ) : $submit_time = $sub->get_date_submitted(); $file_data = $sub->get_field_value( $upload_field_key ); // 兼容多文件上传场景返回的数组结构 $file_list = is_array( $file_data ) ? $file_data : [ $file_data ]; ?> <li class="submission-item"> <p>提交时间:<?php echo esc_html( $submit_time ); ?></p> <p>上传文件:</p> <ul> <?php foreach ( $file_list as $file ) : if ( empty( $file ) ) continue; $file_info = explode( '/', $file ); $file_name = end( $file_info ); ?> <li><a href="<?php echo esc_url( $file ); ?>" target="_blank"><?php echo esc_html( $file_name ); ?></a></li> <?php endforeach; ?> </ul> </li> <?php endforeach; ?> </ul>
常见问题排查
- 如果返回数据为空,先确认表单ID和字段KEY是否填写正确,再检查对应测试用户是否确实有提交记录
- 单文件上传场景下,字段返回值为字符串类型,多文件上传返回为数组结构,上述代码已经做了兼容处理
内容的提问来源于stack exchange,提问作者Bill Burke
相关产品推荐
相关产品推荐

