2

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

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

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

我可以用联系表单参数构造图像 url 没有问题,但实际上发送图像请求是另一回事。我在这里对 PHP 和 JS 都束手无策,不知道该选什么课。

目前我正在使用wpcf7_before_send_mailCF7 中内置的 php 挂钩,这似乎允许我收集表单数据并构建 URL。但是,由于该插件使用 AJAX 并且实际上并没有在表单提交时重定向到另一个页面,因此我似乎无法成功使用任何类型的 php 输出(回声、警报甚至 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,所以我现在很迷茫。

任何人都可以帮助阐明实现这一目标的最佳方法可能是什么?

4

3 回答 3

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 错误日志中,它将告诉您如何访问不同的组件。

于 2012-11-01T14:53:21.537 回答
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 进行了尝试,但无法让它工作。

于 2013-03-05T19:09:08.240 回答
0

有什么理由不能只为表名添加前缀并将它们添加到同一个数据库中吗?这似乎是一个更好的解决方案,并且可以与 mysqli 一起正常工作,而不是使用过时的、不安全的驱动程序.....

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

于 2013-03-12T20:11:18.230 回答