
本文旨在提供一种解决方案,通过点击定价表中的按钮,自动在 Contact Form 7 表单的下拉菜单中选择相应的值。核心思路是利用Session存储用户在定价页面选择的套餐信息,并在Contact Form 7所在的页面读取Session,动态设置下拉菜单的默认选项。
实现方案
该方案的核心在于利用 PHP 的 Session 功能,在用户点击定价表按钮时,将所选套餐的信息存储到 Session 中。然后在 Contact Form 7 所在的页面,读取 Session 中的数据,并根据该数据动态修改下拉菜单的选项。
1. 定价页面 (例如: pricing.php)
首先,在定价页面,我们需要为每个套餐按钮添加一个点击事件,该事件会将套餐信息通过 POST 方法发送到 session.php 页面。
注意:这里使用了
2. Session 处理页面 (session.php)
这个页面负责接收来自定价页面的 POST 数据,并将数据存储到 Session 中。
关键点:
- session_start() 必须放在脚本的最前面,用于启动 Session。
- $_POST['value'] 获取通过 POST 方法传递的套餐信息。
- $_SESSION['package'] = $_POST['value']; 将套餐信息存储到名为 package 的 Session 变量中。
- header("Location: contact.php"); 将用户重定向回Contact Form 7所在的页面。
3. Contact Form 7 页面 (contact.php)
在 Contact Form 7 所在的页面,我们需要读取 Session 中的数据,并根据该数据动态生成下拉菜单。 由于 Contact Form 7 本身不支持直接在表单中使用 PHP 代码动态生成选项,因此需要借助一些插件或自定义代码来实现。 这里提供一种使用 Contact Form 7 的动态文本扩展 (Dynamic Text Extension) 的方法,并结合自定义 PHP 代码来实现:
a. 安装并启用 "Contact Form 7 - Dynamic Text Extension" 插件。
b. 在 Contact Form 7 表单中使用动态文本标签:
[text your-company placeholder "Firma"]
[text* your-name placeholder "Name*"]
[email* your-email placeholder "Email-Adresse*"]
[select* menu-892 "Allgemeine Anfrage" "{package}"]
[textarea your-message placeholder "Nachricht" ]
[submit "Senden"]注意:{package} 是一个动态文本标签,它将被替换为实际的套餐名称。
c. 在 functions.php 文件或者自定义插件中添加以下代码:
add_filter( 'wpcf7_form_tag_data_option', 'my_wpcf7_form_tag_data_option', 10, 3 );
function my_wpcf7_form_tag_data_option( $options, $tag, $WPCF7_Form ) {
if ($tag->name == 'menu-892') {
session_start();
if (isset($_SESSION['package'])) {
$package = $_SESSION['package'];
// 构建选项数组,确保选中的套餐在最前面
$new_options = array("Allgemeine Anfrage", $package);
if($package != "Starter Paket") $new_options[] = "Starter Paket";
if($package != "Business Paket") $new_options[] = "Business Paket";
if($package != "Professional Paket") $new_options[] = "Professional Paket";
// 确保数组唯一
$options = array_unique($new_options);
// 清除session,避免重复选择
unset($_SESSION['package']);
}
}
return $options;
}关键点:
- add_filter 函数用于挂钩 Contact Form 7 的表单标签数据选项。
- $tag->name == 'menu-892' 确保我们只修改特定的下拉菜单。
- session_start() 启动 Session。
- isset($_SESSION['package']) 检查 Session 中是否存在套餐信息。
- $package = $_SESSION['package']; 获取 Session 中的套餐信息。
- 构建选项数组,并将选中的套餐放置在数组的第二个位置,这样 Contact Form 7 会默认选中该选项。
- unset($_SESSION['package']); 清除 Session 中的套餐信息,避免用户刷新页面时重复选择。
注意事项
- 确保 PHP Session 功能已启用。
- Contact Form 7 和 "Contact Form 7 - Dynamic Text Extension" 插件已正确安装并启用。
- 根据实际情况修改代码中的表单标签名称和套餐名称。
- 出于安全考虑,建议对 Session 数据进行验证和过滤。
- 完成操作后清除Session数据,避免影响后续操作。
- 可以根据实际需求,将 Session 存储方式修改为 Cookie 或其他方式。
总结
通过以上步骤,我们可以实现通过点击定价表按钮,自动在 Contact Form 7 表单的下拉菜单中选择相应的值。该方案利用 PHP 的 Session 功能,实现了跨页面的数据传递和动态表单生成。 这种方法可以提高用户体验,简化表单填写流程。










