如何通过编程方式获取Gravity Form表单提交的日期时间
Gravity Forms 获取表单提交时间的实现方案
你没在元数据表里找到提交时间字段是正常的——Gravity Forms的提交核心时间字段存在主提交表,不存在gf_entry_meta元数据表中,可通过以下两种方式获取:
方式一:通过GFAPI获取(官方推荐,兼容性最好)
所有提交记录的返回对象/数组中都自带date_created字段,存储的是UTC时区的提交时间,格式为Y-m-d H:i:s,直接调用即可,不需要额外关联查询元数据。
// 替换为你的学生同意表单实际ID $target_form_id = 5; // 查询条件:取当前登录用户的有效提交记录 $search_args = [ 'field_filters' => [ [ 'key' => 'created_by', 'value' => get_current_user_id(), ] ], 'status' => 'active' // 排除已标记为垃圾、回收站的提交 ]; // 排序规则:按提交时间倒序,只取最新1条即可判断是否需要年度更新 $sort_args = [ 'key' => 'date_created', 'direction' => 'DESC' ]; $paging_args = [ 'offset' => 0, 'page_size' => 1 ]; $entries = GFAPI::get_entries($target_form_id, $search_args, $sort_args, $paging_args); if (!is_wp_error($entries) && !empty($entries)) { $latest_consent = $entries[0]; // 取UTC格式的提交时间 $submit_time_gmt = $latest_consent['date_created']; // 转换为站点本地时间戳,用于判断是否超过1年有效期 $submit_timestamp = get_date_from_gmt($submit_time_gmt, 'U'); $need_renew_consent = (time() - $submit_timestamp) > YEAR_IN_SECONDS; }
如果你已经知道具体的提交记录ID,直接调用GFAPI::get_entry($entry_id)即可拿到单条记录的date_created值,不需要走列表查询。
方式二:直接查询数据库(适合高流量场景,减少API开销)
如果你的站点访问量较大,不想走GFAPI的多层逻辑,可以直接查询WordPress数据库获取时间,提交时间存储在{表前缀}gf_entry主表中,核心相关字段如下:
id:提交记录唯一IDform_id:关联的表单IDcreated_by:提交人关联的站点用户ID(游客提交时值为0)date_created:提交时间(UTC时区,datetime格式)date_updated:提交记录最后一次被编辑的时间(如果你的表单允许用户后续修改同意状态,优先取这个字段判断最新操作时间)
查询示例代码:
global $wpdb; $target_form_id = 5; $current_user_id = get_current_user_id(); $latest_submit_gmt = $wpdb->get_var($wpdb->prepare( "SELECT date_created FROM {$wpdb->prefix}gf_entry WHERE form_id = %d AND created_by = %d AND status = 'active' ORDER BY date_created DESC LIMIT 1", $target_form_id, $current_user_id ));
注意事项
- Gravity Forms存储的所有时间默认是UTC时区,不要直接用站点本地时间和该值做比对,必须先通过
get_date_from_gmt()转换为对应时区的时间再计算差值,否则年度有效期判断会出现时区偏差 - 你提到的提交时间merge tag,本质也是读取
gf_entry表的date_created字段做格式化输出,不存在单独的隐藏字段存储该值 - 做同意时间统计报表时,直接基于
gf_entry表的date_created字段聚合即可,不需要关联元数据表查询
内容的提问来源于stack exchange,提问作者kalber
相关产品推荐
相关产品推荐

