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

GDPR合规插件开发:Contact Form 7表单检测与字段添加问题

解决方案:检测并修改Contact Form 7表单适配GDPR

刚帮客户处理过类似的GDPR适配需求,下面是针对你场景的完整代码实现,包含详细的逻辑注释,直接就能用到你的WordPress插件里:

// 确保加载插件检测所需的核心文件
include_once(ABSPATH . 'wp-admin/includes/plugin.php');

function juvo_gdpr_update_cf7_form() {
    // 第一步:检测Contact Form 7是否已激活
    if (!is_plugin_active('contact-form-7/wp-contact-form-7.php')) {
        return; // CF7未安装/激活,直接退出
    }

    // 第二步:查找标题为'Kontakt'的CF7表单
    $target_forms = get_posts(array(
        'post_type'      => 'wpcf7_contact_form',
        'post_title'     => 'Kontakt',
        'posts_per_page' => 1,
        'post_status'    => 'publish'
    ));

    if (empty($target_forms)) {
        return; // 找不到目标表单,退出
    }

    $cf7_post = $target_forms[0];
    $form_content = $cf7_post->post_content;

    // 检查是否已经处理过该表单,避免重复修改
    if (get_post_meta($cf7_post->ID, '_juvo_gdpr_updated', true)) {
        return;
    }

    // 第三步:检测表单内容中的关键字段
    $has_submit = strpos($form_content, '[submit') !== false; // 检测提交按钮短代码
    $has_acceptance = strpos($form_content, '[acceptance') !== false; // 检测同意字段短代码

    // 第四步:仅当有提交按钮但无同意字段时,修改表单
    if ($has_submit && !$has_acceptance) {
        // 定义GDPR同意字段的短代码,可根据需求调整文本和属性
        $gdpr_acceptance = '[acceptance gdpr required]我同意按照GDPR法规处理我的个人数据[/acceptance]';
        
        // 将同意字段插入到提交按钮之前(也可以改成插在之后,调整替换逻辑即可)
        $updated_content = str_replace('[submit', $gdpr_acceptance . '[submit', $form_content);

        // 更新表单内容
        wp_update_post(array(
            'ID'           => $cf7_post->ID,
            'post_content' => $updated_content
        ));

        // 添加标记,避免重复处理
        update_post_meta($cf7_post->ID, '_juvo_gdpr_updated', '1');

        // 调试用:可以在后台看到修改日志(上线后可删除)
        error_log("GDPR同意字段已添加到Kontakt表单,ID:{$cf7_post->ID}");
    }
}

// 选择合适的钩子触发逻辑,比如插件激活时执行一次,或者每次后台加载时检查
// 插件激活钩子:register_activation_hook(__FILE__, 'juvo_gdpr_update_cf7_form');
// 或者后台初始化时检查(适合需要定期同步的场景):
add_action('admin_init', 'juvo_gdpr_update_cf7_form');

关键逻辑说明

  • CF7激活检测:用is_plugin_active确保只有在CF7安装并激活时才执行后续逻辑,避免报错
  • 目标表单定位:通过get_posts精准筛选标题为Kontakt的CF7自定义文章类型
  • 重复修改防护:用自定义文章元字段_juvo_gdpr_updated标记已处理的表单,防止每次加载都重复修改
  • 字段检测:通过字符串匹配快速判断表单是否包含提交按钮和同意字段(CF7的短代码格式固定,这个方法高效可靠)
  • 内容修改:用str_replace把同意字段插入到提交按钮之前,你也可以根据需求调整插入位置(比如放在表单末尾)

注意事项

  • 你可以修改$gdpr_acceptance里的文本内容,或者调整required属性控制是否强制用户勾选
  • 测试前建议备份网站数据库,避免意外修改
  • 如果需要批量处理多个表单,可以调整get_posts的参数,或者遍历所有CF7表单进行检测
  • 若要在前端触发检测(比如用户访问时),可以把钩子改成init,但更推荐在后台执行,减少前端性能消耗

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:35:54