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

将操作添加到联系人表单7提交w/PHP钩子,php,jquery,ajax,wordpress,contact-form-7,Php,Jquery,Ajax,Wordpress,Contact Form 7,我在Wordpress的Contact Form 7插件中实现一些自定义功能时遇到了一些问题 我想做的很简单。讨论中的联系人表单是一个普通的联系人查询表单,因此我需要保留通常的功能(邮寄数据)。但是,我在表单上还有一个复选框,允许发件人选择是否订阅客户的邮件列表以及邮寄联系人查询 客户使用Bronto进行群发邮件(类似于CC或Mailchimp)。Bronto有一个“直接添加”功能(),允许您通过嵌入一个url包含必需参数(电子邮件地址、要订阅的列表等)的图像,向Bronto帐户发送参数以添加联

我在Wordpress的Contact Form 7插件中实现一些自定义功能时遇到了一些问题

我想做的很简单。讨论中的联系人表单是一个普通的联系人查询表单,因此我需要保留通常的功能(邮寄数据)。但是,我在表单上还有一个复选框,允许发件人选择是否订阅客户的邮件列表以及邮寄联系人查询

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

我可以用contact form参数构建图像url,这没有问题,但实际上发送图像请求是另一回事。在这里,我对PHP和JS都感到不知所措,不知道该上什么课

目前我正在使用内置于CF7中的
wpcf7\u-before\u-send\u-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;
}
这只是一个测试,看看echo是否工作——它不工作。相反,表单只是在提交时挂起,我看到了永远旋转的加载gif

我需要做的是使用来自cf7对象的参数构建图像url(我可以做得很好),然后以某种方式将该图像请求发送到Bronto服务器(这是我感到困惑的部分)。如果这是一个正常的表单,在提交时重定向到另一个php页面,我做这件事一点问题都没有,但它使用的是AJAX,我对它不太了解,所以我现在很迷茫


有人能帮你解释一下实现这一点的最佳方法是什么吗?

如果在附加函数后提交被挂起,至少你知道它有效果。我对联系人表单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错误日志中,该日志将告诉您如何访问不同的组件。

我遇到了您的线程,当时我正在寻找一个类似的解决方案,以解决cf7的同一问题—在尝试将信息传递到CRM后端的我自己的数据库时挂起提交

我在网上的任何地方都没有看到关于CF7集成的问题的答案,所以我想我会在这里发布我发现的问题以及它是如何解决的。我不是专业人士,但该解决方案在测试中有效,如果有人对此解决方案有任何补充,请插话

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

我使用了PHP4中一个不推荐使用的命令,该命令在PHP5 mysql\u connect中仍然有效:

mysql_connect('localhost', 'root', '', true);
通过将“true”作为第四个参数传递,您可以将连接与Wordpress站点运行的连接分开。这样做,CF7提交就不会挂起,它将提交给CRM并同时以电子邮件的形式发送出去,没有问题

不过也要注意,如果CRM数据提交的语法有问题,例如变量命名错误等。。它也会挂起来。如果传递“true”无效,请首先检查代码以确保其干净


如果有人读到这篇文章,有一个与“mysqli”命令相同的解决方案,我很想知道,我用mysqli尝试了一下,但没有成功

为什么不能在表名前加前缀并将它们添加到同一数据库中?这似乎是一个更好的解决方案,可以很好地与mysqli配合使用,而不是使用过时的、不安全的驱动程序

我想,我只是不明白在这种情况下使用两个数据库的意义。。。我会试着用一个