You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用do_shortcode调用表单时,无法触发update_user_meta更新用户元数据

解决Contact Form 7短代码调用时update_user_meta不生效的问题

问题场景

我需要在用户提交Contact Form 7表单后更新用户元数据,单独调用包含update_user_meta的updateUserType函数可以正常工作,但通过do_shortcode调用表单时,该函数完全不生效。当前代码如下:

echo do_shortcode('[contact-form-7 id="031c4e8" title="Dosya"]');
add_action( 'wpcf7_before_send_mail', 'updateUserType');
function updateUserType() {
    $user_idd = get_current_user_id();
    update_user_meta( $user_idd, '_user_type', 'general' ) ;}

问题原因

核心问题是钩子注册时机过晚:当你通过do_shortcode调用CF7表单时,CF7的初始化逻辑已经在短代码执行过程中完成,而你在调用短代码之后才注册wpcf7_before_send_mail钩子,此时钩子已经错过了触发时机,导致函数无法执行。

解决方案

方案1:调整钩子注册顺序

将add_action代码移到do_shortcode之前,确保钩子在CF7初始化前完成注册,同时增加用户登录状态检查,避免无效操作:

add_action( 'wpcf7_before_send_mail', 'updateUserType');
function updateUserType() {
    $user_idd = get_current_user_id();
    // 仅当用户已登录时执行更新
    if ( $user_idd ) {
        update_user_meta( $user_idd, '_user_type', 'general' );
    }
}

echo do_shortcode('[contact-form-7 id="031c4e8" title="Dosya"]');

方案2:使用更稳定的钩子

如果调整顺序后仍有问题,可以尝试CF7的wpcf7_submit钩子,该钩子在表单提交流程的后期触发,适配场景更广泛:

add_action( 'wpcf7_submit', 'updateUserType');
function updateUserType( $contact_form ) {
    $user_idd = get_current_user_id();
    if ( $user_idd ) {
        update_user_meta( $user_idd, '_user_type', 'general' );
    }
}

echo do_shortcode('[contact-form-7 id="031c4e8" title="Dosya"]');

内容的提问来源于stack exchange,提问作者user17890799

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 02:52:08