如何在Ultimate Member账户页显示Contact Form 7表单注册状态?
解决方案:在Ultimate Member账户页显示Contact Form 7报名状态
方法1:自定义字段+CF7提交更新(新手友好,稳定)
通过给用户添加自定义状态字段,让CF7提交时自动更新字段值,再在账户页展示,逻辑清晰易维护。
步骤1:创建Ultimate Member用户自定义字段
- 进入WordPress后台 → Ultimate Member → 自定义字段
- 点击「添加新字段」,为每个俱乐部/赛事单独创建:
- 字段类型选「单选按钮」或「下拉菜单」,选项设为「已注册」「未注册」,默认值设为「未注册」
- 字段标签填「俱乐部1注册状态」这类名称,字段key设为
club1_status(务必记好这个key,后面要用) - 保存字段后,把它拖到你的账户页模板对应的区域(在Ultimate Member的表单设置里操作)
步骤2:让CF7提交时更新用户字段
编辑目标CF7表单,切换到「其他设置」标签,添加以下代码(替换对应字段key):
on_sent_ok: " jQuery.post( um_ajax_url, { action: 'update_user_club_status', user_id: um_user_id, status_key: 'club1_status', status_value: '已注册' } ); "
- 俱乐部2的表单就把
status_key改成club2_status,和你创建的字段key对应 - 接下来用Code Snippets插件(比直接改
functions.php安全,避免主题更新丢代码)新建代码片段,粘贴以下代码并激活:
add_action('wp_ajax_update_user_club_status', 'update_user_club_status'); add_action('wp_ajax_nopriv_update_user_club_status', 'update_user_club_status'); function update_user_club_status() { if (!is_user_logged_in()) { wp_send_json_error('请先登录'); } $user_id = get_current_user_id(); $status_key = sanitize_text_field($_POST['status_key']); $status_value = sanitize_text_field($_POST['status_value']); update_user_meta($user_id, $status_key, $status_value); wp_send_json_success('状态已更新'); }
步骤3:在账户页展示状态
因为你已经把自定义字段添加到账户页模板,登录用户刷新后就能看到状态。如果想更灵活,还可以在账户页的「自定义内容」里加短代码:
[um_user_meta key="club1_status"]
重复添加club2_status的短代码,就能分别显示不同俱乐部的状态。
方法2:直接检测CF7提交记录(无需自定义字段)
如果不想加自定义字段,可直接查询用户是否提交过指定CF7表单,再输出状态。
步骤1:获取CF7表单ID
编辑CF7表单时,浏览器地址栏里的post=xxx,xxx就是表单ID(比如俱乐部1的表单ID是123)。
步骤2:添加代码到Code Snippets
新建代码片段,粘贴以下代码并激活:
add_shortcode('cf7_registration_status', 'cf7_registration_status_shortcode'); function cf7_registration_status_shortcode($atts) { extract(shortcode_atts(array( 'form_id' => '', 'label' => '' ), $atts)); if (!is_user_logged_in() || empty($form_id) || empty($label)) { return ''; } $user_id = get_current_user_id(); // 查询用户是否提交过目标CF7表单 $submissions = get_posts(array( 'post_type' => 'wpcf7_contact_form', 'meta_query' => array( array( 'key' => '_user_id', 'value' => $user_id, 'compare' => '=' ), array( 'key' => '_wpcf7_form_id', 'value' => $form_id, 'compare' => '=' ) ), 'posts_per_page' => 1 )); $status = !empty($submissions) ? '已注册' : '未注册'; return "$label:$status"; }
步骤3:在账户页添加短代码
进入Ultimate Member账户页设置,在「自定义内容」里添加:
[cf7_registration_status form_id="123" label="俱乐部1"] [cf7_registration_status form_id="456" label="俱乐部2"]
替换form_id为你实际的CF7表单ID,label为显示的名称即可。
注意事项
- 之前ChatGPT代码失效大概率是因为CF7的
on_sent_ok兼容性问题,或者钩子调用错误,以上两种方法都做了兼容处理 - 优先用Code Snippets插件管理代码,避免修改主题文件导致的问题
- 测试时,登录用户提交表单后刷新账户页,确认状态是否更新
内容的提问来源于stack exchange,提问作者leandro otero
相关产品推荐
相关产品推荐

