1

我只是使用 w3 总缓存插件来加速我的网站。它在许多方面都非常有效,例如页面缓存、数据库缓存、对象缓存、js&css 缩小,并且它还减少了 FBR(第一个字节请求)所花费的时间。

但是当我在 tools.pingdom.com 中检查 pagespeed 测试时,它显示了一些不需要的 url(www.mydomain.com/?_wpcf7_is_ajax_call=1&_wpcf7=63)需要大量时间来完成影响性能的请求。

停用 w3 缓存插件后,不需要的 url 消失了。我知道这个问题的原因 - 因为使用了 ajax 调用的 contactform7 插件。但它需要 w3 totalcache 来消除缓存 contactform7



设置已更改:
w3 pagecache 选项卡-> 高级设置-> 从不缓存以下页面:

  1. /。[]。
  2. /?_wpcf7_is_ajax_call=1&_wpcf7=63/

但没有用。任何帮助!

4

4 回答 4

6

W3TotalCache 通过将其添加到 wp-config.php 将“WP_Cache”常量设置为 true:

/** Enable W3 Total Cache */
define('WP_CACHE', true); // Added by W3 Total Cache

当 WP_Cache 设置为 true 时,Contact Form 7 将进行您描述的 Ajax 调用。

这发生在 script.js 中:

if (_wpcf7.cached)
  this.wpcf7OnloadRefill();

似乎只有在您使用验证码或测验时才需要该功能,如此处所指出:https ://wordpress.org/support/topic/plugin-contact-form-7-wpcf7onloadrefill-not-useful-and-引起负荷

为避免 ajax 调用,您可以将以下代码放在您的 functions.php 中:

// Hack Contact Form 7 to avoid unwanted ajax calls
// see http://stackoverflow.com/questions/19632244/is-w3-total-cache-compatible-with-contact-form-7
add_action('wpcf7_enqueue_scripts', 'hack_cf7');
function hack_cf7() {
    $_wpcf7 = array(
        'loaderUrl' => wpcf7_ajax_loader(),
        'sending' => __( 'Sending ...', 'contact-form-7' ) 
    );
    wp_localize_script( 'contact-form-7', '_wpcf7', $_wpcf7 );
}

解释:

联系表格 7 添加了一些带有 wp_localize_script 的内联 javascript,当设置了 WP_CACHE 时看起来像这样:

var _wpcf7 = {
    "loaderUrl":"http:\/\/elsassfonden.dk\/wp-content\/plugins\/contact-form-7\/images\/ajax-loader.gif",
    "sending":"Sender ...",
    "cached":"1"
};

当 WP_CACHE 未设置时,“缓​​存”属性将被忽略。这发生在 controller.php 中的函数 wpcf7_enqueue_scripts()

我提供的代码在 wpcf7_enqueue_scripts() 运行之后调用 wp_localize_script。这实际上插入了相同的内联代码,但没有“缓存”属性,就在联系表单 7 生成的内联代码下方。

享受!

于 2016-02-17T21:21:21.417 回答
3

我刚刚通过rosell.dk尝试了上面的修复,但是我得到了一个错误,说函数“wpcf7_ajax_loader()”没有找到。

我猜这个插件最近改变了结构,或者其他一些原因。

尽管如此,根据他的解决方案,我做了一点改动以检查它是否是正确的句柄,然后取消设置“缓存”键。这样可以保留数组中的任何其他键。

class Filterable_Scripts extends WP_Scripts {
function localize( $handle, $object_name, $l10n ) {

    $l10n = apply_filters( 'script_l10n', $l10n, $handle, $object_name );
    if ('contact-form-7' === $handle) {
            unset($l10n['cached']); // This is where we remove the problem.
        }
        return parent::localize($handle, $object_name, $l10n);
    }
}

add_action( 'wp_loaded', function() {
    $GLOBALS['wp_scripts'] = new Filterable_Scripts;
});

只需放入您的functions.php 文件或特定于站点的插件中。

于 2017-03-27T20:49:20.327 回答
1

您还可以在客户端禁用这些调用,例如在页脚中:

<script type="text/javascript">
    $.fn.wpcf7OnloadRefill=function(){};
</script>

这实质上使重新填充表单的 JS 函数空白。

于 2016-06-24T00:25:10.783 回答
0

已知WP Super Cache与 Contact Form 7 冲突。它经常在Contact Form 7 支持论坛中讨论并在其他地方提到 - 请参阅http://ocaoimh.ie/wp-super-cache/

于 2014-01-05T22:32:48.390 回答