web-dev-qa-db-ja.com

送信前にContact Form 7に接続する方法

Contact Form 7とやり取りしたいプラグインを作成しています。プラグインに次のアクションadd_actionを追加しました

add_action("wpcf7_before_send_mail", "wpcf7_do_something_else");

function wpcf7_do_something_else(&$wpcf7_data) {

    // Here is the variable where the data are stored!
    var_dump($wpcf7_data);

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

}

問い合わせフォームを送信しましたが、add_actionは何もしませんでした。 Contact Form 7が何かを実行するときに、プラグインをインターセプトする方法や何かを行う方法がわかりません。何か、これを行う方法の助け?

11
Naterade

電子メールが送信されないようにするためにこれをしなければなりませんでした。それが役に立てば幸い。

/*
    Prevent the email sending step for specific form
*/
add_action("wpcf7_before_send_mail", "wpcf7_do_something_else");  
function wpcf7_do_something_else($cf7) {
    // get the contact form object
    $wpcf = WPCF7_ContactForm::get_current();

    // if you wanna check the ID of the Form $wpcf->id

    if (/*Perform check here*/) {
        // If you want to skip mailing the data, you can do it...  
        $wpcf->skip_mail = true;    
    }

    return $wpcf;
}

このコードは、数か月前にコードのリファクタリングを行ったときまで、上記のコードが動作していたCF7の最新バージョンを実行していることを前提としています。 [4月28日]

21
Musk

追加したいのは、wpcf7_skip_mailフィルター:

add_filter( 'wpcf7_skip_mail', 'maybe_skip_mail' );

function maybe_skip_mail( $skip_mail, $contact_form ) {

    if( /* your condition */ )
        $skip_mail = true;

    return $skip_mail;

}, 10, 2 );
9
d79

追加の設定でデモモードをオンにすると、メールが送信されなくなります。 CF7 Docsから以下を参照してください。

[追加設定]フィールドでdemo_mode: onを設定すると、お問い合わせフォームはデモモードになります。このモードでは、連絡先フォームはメールの送信プロセスをスキップし、応答メッセージとして「正常に完了しました」と表示します。

1
Dan Canetti