向联系表单7添加操作提交w / PHP钩子

时间:2012-11-01 13:47:39

标签: php jquery ajax wordpress contact-form-7

我在使用Wordpress的Contact Form 7插件中实现一些自定义功能时遇到了一些麻烦。

我想做的事情非常简单。有问题的联系表格是一个正常的联系查询表格,所以我需要保留通常的功能(邮寄数据)。但是,我在表单上还有一个复选框,允许发件人选择是否订阅客户的邮件列表以及邮寄联系人查询。

客户使用Bronto进行群发邮件(类似于CC或Mailchimp)。 Bronto有一个“直接添加”功能(more info here),允许您通过嵌入其网址包含必需参数(电子邮件地址,要订阅的列表等)的图像来发送参数以向Bronto帐户添加联系人。

我可以使用联系表单参数构建图像URL没问题,但实际上获取发送的图像请求是另一回事。我在PHP和JS这里都很头脑,不知道要采取什么方法。

目前我正在使用内置于CF7中的wpcf7_before_send_mail php挂钩,这似乎允许我收集表单数据并构建URL。但是,由于插件使用AJAX并且实际上没有重定向到表单提交上的另一个页面,似乎我无法成功使用任何类型的php输出(echo,alert,甚至error_log),大概是因为服务器不知道是什么它应该写给。

在functions.php中:

add_action( 'wpcf7_before_send_mail', 'bronto_contact_add' );
function bronto_contact_add( $cf7 ) {
    $emailcf = $cf7->posted_data['email'];
    echo $emailcf;
}

这只是一个测试,看看回声是否有效 - 但事实并非如此。相反,表单只是挂起提交,我看到旋转加载gif永远。

我需要做的是使用cf7对象中的参数构建图像URL(我可以毫无问题),然后以某种方式将该图像请求发送到Bronto服务器(这是我感到困惑的部分)。如果这是一个正常的表单,在提交时重定向到另一个php页面,我会毫无疑问地执行此操作,但它使用了我不太了解的AJAX,所以我现在很迷失。

任何人都可以帮助阐明如何实现这一目标的最佳方法吗?

3 个答案:

答案 0 :(得分:3)

如果在您附加功能后提交暂停,至少您知道它有效。我对Contact Forms 7并不十分熟悉,但这可能不是回音的正确位置,我的猜测是因为你正在写入缓冲区然后它正在尝试进行重定向(检查你的错误日志)。如果您想查看$cf7的内容,更好的方法是:

// first option, using print_r()
error_log(print_r($cf7, true));

// second option, using var_dump() if you need the additional output
ob_start();                    // start buffer capture
var_dump($cf7);                // dump the values
$contents = ob_get_contents(); // put the buffer into a variable
ob_end_clean();                // end capture
error_log($contents);          // log contents of $cf7

$cf7变量的内容将出现在PHP错误日志中,该日志将告诉您如何访问不同的组件。

答案 1 :(得分:2)

我在寻找与CF7相同问题的类似解决方案时遇到了您的问题 - 在尝试将信息传递到CRM后端的我自己的数据库时暂停提交。

我在网上的任何地方都没有看到与CF7集成相关的问题的答案,所以我想在这里发布我发现的问题及其修复方法。我不是专业人士,但该解决方案适用于测试,如果有人有任何要添加到此解决方案,请加入

基本上,如果您正在使用Wordpress并尝试将信息传递到CRM数据库,我将假设您的数据库表与Wordpress站点数据库不在同一个数据库中。您接下来要做的是同时建立两个数据库连接,但在尝试连接到您的CRM时,您的Wordpress数据库将重用参考ID。我发现这是测试期间提交挂起的根本原因。

我使用了PHP 4中不推荐使用的命令,该命令仍可在PHP 5中运行,mysql_connect,:

mysql_connect('localhost', 'root', '', true);

通过传递'true'作为第四个参数,您可以将连接与运行Wordpress站点的连接分开。这个和CF7提交没有挂起,它提交给CRM并同时作为电子邮件发送,没问题。

另请注意,如果您的CRM数据提交语法出现问题,即错误名称变量等,它也会挂起。如果传递'true'不起作用,请首先检查您的代码以确保它是干净的。

如果有人在阅读本文时使用'mysqli'命令有相同的解决方案,我有兴趣知道它,我尝试使用mysqli并且无法使其正常工作。

答案 2 :(得分:0)

是否有一些理由不能只为表名加前缀并将它们添加到同一个数据库中?看起来这将是一个更好的解决方案,并且可以与mysqli一起使用,而不是使用过时的,不安全的驱动程序......

我想,在这种情况下我没有看到使用两个数据库的意义......我会尝试使用一个。