联系表 7:wpcf7_form_response_output 过滤器

Contact Form 7: wpcf7_form_response_output filter

请问wpcf7_form_response_output过滤器(在includes/contact-form.php中找到)如何使用?

以下是我试过但无济于事的方法。

============== 案例一 ============

函数 1:

$wpcf7->skip_mail = true;
$content = __('You have already subscribed to our Events.',CURRENT_THEME);
$class = 'wpcf7-validation-errors';
custom_wpcf7_form_response_output_filter('', $class, $content, '');

函数 2

if(!function_exists('custom_wpcf7_form_response_output_filter')){
    function custom_wpcf7_form_response_output_filter($output, $class, $content, $this){
        return '<div class="' . $class . ' ">' . $content . '</div>';
    }
    add_filter( 'wpcf7_form_response_output', 'custom_wpcf7_form_response_output_filter', 10, 4);
}

========== 案例2 ==============

$wpcf7->skip_mail = true;
$class = 'wpcf7-validation-errors';
$error = __('You have already subscribed to our Events.',CURRENT_THEME);
$output = '<div class="' . $class . ' ">' . esc_html( $error ) . '</div>';
$omsg = 'return "'. $output .'";';
add_filter('wpcf7_form_response_output', create_function('$a', $omsg));

案例2:另一种方法也不行。使用时出现 500 Internal Server Error。

这里有什么帮助吗?

看起来钩子没有附加/未在正确的时间触发。

编辑

此线程中描述的挂钩在进行 AJAX 调用时不会可靠地触发。我们决定改用 JS 来做。这里有一些代码可以帮助其他人looking/facing解决类似的问题

$( document ).ajaxComplete(function() {
    str=$(".wpcf7-response-output").html();
    if (str.indexOf("error") >= 0)
        $(".wpcf7-response-output")
            .removeClass("wpcf7-mail-sent-ok")
            .addClass("wpcf7-validation-errors");
    });