发送表单时,WordPress 联系表单插件永远无法加载

WordPress Contact Form plugin stuck loading forever when sending a form

在此页面中,我使用的是 Contact Form 7 插件(位于最底部)。

当我填写表格并按下发送表格时,将永远保持加载状态。

有什么建议吗?

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
<p>您的姓名 〈需填寫〉<br />
    [text* your-name] </p>

<p>您的電子郵件信箱 〈需填寫〉<br />
    [email* your-email] </p>

<p>主旨<br />
    [text your-subject] </p>

<p>您的信件內容<br />
    [textarea your-message] </p>

<p>[submit"傳送"]</p>

(实际上没有太多代码,因为它是一个 WordPress 插件)。

我正在使用 WordPress 3.0.1 和 Contact Form 7 (3.3.1)


步骤:1

转到 ftp:

wp-content/plugins/contact-form-7/contact-form-7.php

contact-form-7.php

步骤:2

查找:

1
2
3
4
5
if ( ! defined( 'WPCF7_LOAD_JS' ) )
    define( 'WPCF7_LOAD_JS', true);
Replace:
if ( ! defined( 'WPCF7_LOAD_JS' ) )
    define( 'WPCF7_LOAD_JS', false );

上传您的文件并尝试完成。


尝试另一个联系表单插件,看看您是否可以发送任何电子邮件。检查您的 webhost 错误日志中是否存在 php 错误。

使用浏览器中的开发者工具检查 Javascript 错误。 Contact Form 7 使用 javascript 进行某些表单处理,您可能会遇到 Javascript 冲突。

问题可能是服务器问题。如果使用 php 邮件有问题,请询问您的虚拟主机。尝试使用 php mail 手动发送电子邮件;请参阅如何使用 PHP 发送电子邮件?

另外,试试 WordPress 吗? WP 邮件 SMTP ? WordPress 插件可让您测试通过 SMTP 发送电子邮件,并显示服务器操作日志,让您可能发现问题。


因为我不想编辑任何插件文件,所以我选择了过滤器选项:

1
2
3
// WPC7 forms were not submitting, this fixes that
add_filter( 'wpcf7_verify_nonce', '__return_true' );
add_filter( 'wpcf7_load_js', '__return_false' );


如上所述编辑 contact-form-7.php 有所帮助,但我的电子邮件无法到达我的收件箱,但它们在我的已发送邮箱中。

和我的配置类似:

  • 用于托管 WordPress (WP) 的 Google Cloud
  • 用于电子邮件的 Google G Suite (smtp.gmail.com)
  • 联系表格 7 - WP 插件
  • 邮递员 SMTP - WP 插件
  • 主要电子邮件 - [email protected]
  • 别名电子邮件 - [email protected]

我能够通过使用 Postman SMTP 中"发件人"位置中的主电子邮件帐户而不是 gmail 别名将电子邮件发送到我的收件箱,因为身份验证需要主电子邮件帐户。

工作:发件人:[email protected] 收件人:[email protected]
无效:发件人:[email protected] 收件人:[email protected]

以下文字来自与 Google 支持人员的聊天会话。
您必须使用不同域的原因是因为网络表单会混淆并尝试在您的网络主机而不是您的邮件主机发送电子邮件,他们在收件人中看到您的域并说"嘿,这是同一个域该站点托管在,它应该是相同的,让我们节省一些精力来查看域的 MX 记录,然后将其留在此处"。
From: 字段需要是您的主电子邮件地址,因为它需要身份验证(别名无法进行身份验证),TO: 字段最好是不是来自您的域名的电子邮件,例如测试别名 example.com.test-google-a.com
如果您从网站发送邮件则不同,当您使用 Gmail 网络邮件或邮件客户端时,邮件被丢弃时的行为。对于 Web 表单,将电子邮件发送到测试 example.com.consulting.test-google-a.com.

中的别名


可能与其他插件冲突,例如其他联系表格?在我的情况下,我使用的是 MMForms-Community 和联系表 7 是原因..所以换句话说,我不能同时使用它们,因为它们从 WP 版本 3.0 及更高版本开始相互冲突。


通常无限加载是由您的主题中的问题引起的。您可以使用 javascript 和一段 css 覆盖 Contact Form 7 的样式/代码。
您可以使用以下 javascript 解决此问题:

1
2
3
4
5
6
7
document.addEventListener( 'wpcf7submit', function( event ) {
   jQuery('head').append('<style type="text/css">.aw-no-spinner:before{display:none!important}</style>');
   jQuery('body').find('.processing').addClass('aw-no-spinner');
}, false );
jQuery('.wpcf7-submit').on('click', function( event ) {
   jQuery('body').find('.processing').removeClass('aw-no-spinner');
});

在本例中,我们使用联系表格 7 的内置钩子:wpcf7submit

当这个事件被触发时,我们的代码就会被执行。这段代码为联系表单 7 的加载package添加了一个额外的类。我们还在头部添加了一段 css,因此我们不必将它放在单独的 CSS 文件中。

我们还将这个解决方案整合到一个 WordPress 插件中,供那些不想在他们的网站上添加代码或没有子主题的用户使用。

这是插件的链接,但您也可以使用上述代码。
https://wordpress.org/plugins/awcf7-stop-spinning/


我想补充一下 VijaiJerald 的答案。该特定解决方案对我不起作用,但是当我按照他的建议进行更改时它确实起作用了:

1
2
3
if ( ! defined( 'WPCF7_LOAD_JS' ) ) {
    define( 'WPCF7_LOAD_JS', true);
}

替换为:

1
2
3
if ( ! defined( 'WPCF7_LOAD_JS' ) ) {
    define( 'WPCF7_LOAD_JS', false );
}

还有下面一行:

1
2
3
if ( ! defined( 'WPCF7_VERIFY_NONCE' ) ) {
    define( 'WPCF7_VERIFY_NONCE', false);
}

替换为:

1
2
3
if ( ! defined( 'WPCF7_VERIFY_NONCE' ) ) {
    define( 'WPCF7_VERIFY_NONCE', true );
}

我还想指出,实际上没有其他解决方案对我有用(禁用所有插件、更改 WP_DEBUG 值、重置浏览器、重新安装 WordPress、更新和升级所有插件、禁用所有自定义 CSS 和 JavaScript 等... ) 所以这可能会帮助有这个问题的人。我还想指出,虽然它不能在我的笔记本电脑上运行(尝试了多种浏览器),但我的手机根本没有这个问题。