wordpress联系表单7禁用电子邮件

时间:2013-11-16 08:04:59

标签: php wordpress

我遇到Contact Form 7 for Wordpress的问题。我想禁用我使用

执行的电子邮件通知
demo_mode: on

同时我想重定向提交,我过去常常使用

on_sent_ok: "location = 'http://domain.com/about-us/';" 

单独使用时两者都有效。但我想同时使用两者。

我试过

    on_sent_ok: "location = 'http://domain.com/about-us/';" 
demo_mode: on

似乎不起作用。请建议。

7 个答案:

答案 0 :(得分:10)

插件作者至少再次改变了4.0的方式。 skip_mail属性现在是私有的:

class WPCF7_Submission {
    private $skip_mail = false;
    ...
}

您应该使用此过滤器:wpcf7_skip_mail

例如:

function my_skip_mail($f){
    $submission = WPCF7_Submission::get_instance();
    if(/* YOUR TEST HERE */){
        return true; // DO NOT SEND E-MAIL
    }
}
add_filter('wpcf7_skip_mail','my_skip_mail');

答案 1 :(得分:4)

插件Contact Form 7的作者为其版本3.9重构了一些代码,从那时起,钩子wpcf7_before_send_mail的回调函数必须以不同的方式编写。

为防止联系表单7在提交表单后发送电子邮件并强制其重定向,请查看以下代码(版本> = 3.9):

add_action( 'wpcf7_before_send_mail', wpcf7_disablEmailAndRedirect );

function wpcf7_disablEmailAndRedirect( $cf7 ) {
    // get the contact form object
    $wpcf7 = WPCF7_ContactForm::get_current();

    // do not send the email
    $wpcf7->skip_mail = true;

    // redirect after the form has been submitted
    $wpcf7->set_properties( array(
        'additional_settings' => "on_sent_ok: \"location.replace('http://example.com//');\"",
    ) );
}

答案 2 :(得分:2)

挂钩wpcf7_before_send_mail而不是使用旗帜。

 add_action("wpcf7_before_send_mail", "wpcf7_disablemail");  

    function wpcf7_disablemail(&$wpcf7_data) {  

        // this is just to show you $wpcf7_data and see all the stored data ..!  
        var_dump($wpcf7_data);  // disable this line

        // If you want to skip mailing the data..  
        $wpcf7_data->skip_mail = true;  

    }  

答案 3 :(得分:1)

contact-form-7可能已发生变化,因为我无法访问WPCF7_Submission对象中的$ skip_mail变量。我查看了\ wp-content \ plugins \ contact-form-7 \ includes \ submission.php文件中的submission.php对象,发现了这个:

private $skip_mail = false;

由于变量是私有的,并且文件中没有getter或setter,因此您无法在外部更改它。只需将其更改为:

public $skip_mail = false;

然后你可以在functions.php文件中更改这样的变量:

add_filter('wpcf7_before_send_mail', 'wpcf7_custom_form_action_url');

function wpcf7_custom_form_action_url( $form)
{
    $submission = WPCF7_Submission::get_instance();

    $submission->skip_mail = true;

}

提醒一下,如果您更新contact-form-7插件,它可能会使您的更改无效,请记住这一点。

答案 4 :(得分:0)

只是一个更新。以下内容适用于4.1.1。

 on_sent_ok: "location = 'http://domain.com/about-us/';" 
 demo_mode: on

答案 5 :(得分:0)

设置skip_mail: on可以解决问题。

答案 6 :(得分:0)

更新WPCF7版本。 7.5:现在有一个专门用于处理此问题的过滤器。

function my_skip_mail($f){
    $submission = WPCF7_Submission::get_instance();
    $data = $submission->get_posted_data();

    if (/* do your testing here*/){
        return true; // DO NOT SEND E-MAIL
    }
}
add_filter('wpcf7_skip_mail','my_skip_mail');