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

如何将API响应$body填充到Contact Form 7的$posted_data隐藏字段

问题根因
  • WPCF7_Submission::get_posted_data() 方法返回的是提交数据的副本,直接修改赋值后的$posted_data变量不会同步到提交对象本身,因此后续钩子读取到的仍然是原始提交值
  • 你现有代码的else分支中,获取到$body后直接return结束了函数,没有执行写入提交对象的操作,也是赋值不生效的原因之一
解决方法

修改$posted_data后调用$submission->set_posted_data()方法,将修改后的数据写回提交对象即可,修改后的代码如下:

add_action( 'wpcf7_before_send_mail', 'Kiri_cf7_api_sender' );
function Kiri_cf7_api_sender( $contact_form ) {

    if ( $contact_form->title === 'Quote_form' ) {
        $submission = WPCF7_Submission::get_instance();

        if ( $submission ) {
            $posted_data = $submission->get_posted_data();

            $name    = $posted_data['your-name'];
            $surname = $posted_data['your-name2'];
            $phone   = $posted_data['tel-922'];
            $urltest = $posted_data['dynamichidden-739'];
            $body    = $posted_data['dynamichidden-458'];

            if ( strpos( $urltest, '?phone' ) !== false ) {
                $url = 'api string';
                // 该分支如果需要请求API,逻辑和下方else分支一致即可
            } elseif ( strpos( $urltest, '?email' ) !== false ) {
                $url = 'api string';
                // 该分支如果需要请求API,逻辑和下方else分支一致即可
            } else {
                $url = 'api string';
                $response = wp_remote_post( $url );
                $body     = wp_remote_retrieve_body( $response );

                // 调试日志可以保留,不要提前return中断流程
                ob_start();
                var_dump( $name, $surname, $phone, $url, $urltest, $body );
                $contents = ob_get_contents();
                ob_end_clean();
                error_log( $contents );

                // 给posted_data副本赋值
                $posted_data["dynamichidden-458"] = $body;
                // 将修改后的数据写回提交对象,后续钩子就能读到新值
                $submission->set_posted_data( $posted_data );
            }
        }
    }
}
后续取值说明

在wpcf7_mail_sent钩子中,只要通过WPCF7_Submission::get_instance()->get_posted_data()获取提交数据,就能拿到你修改后的dynamichidden-458字段值。

注意事项
  • 确保你使用的CF7版本支持set_posted_data方法,该方法在CF7 4.6+版本中已稳定支持
  • 确保dynamichidden-458字段确实在你的CF7表单配置中存在,否则CF7会自动过滤不存在的字段

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 20:45:03