我遇到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
似乎不起作用。请建议。
答案 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');