web-dev-qa-db-ja.com

CF7フォームの値を動的に変更する

CF7フォームフィールドを動的に変更しようとしていますContact Form 7 Dynamic Text Extensionを使用せずに。既存の値を上書きする方法だけでなく、投稿されたデータを取得する方法についての記事をたくさん見てきました。私の目標は、添付ファイルを動的に変更し、各投稿に関連付けられた他のメタデータを追加することです。これはできますか?ありがとうございました!

これが私がこれまでに持っているものです:

function wpcf7_custom_before_send(&$cf7) {
    if ( $cf7->id == 4 ) {
        $submission = WPCF7_Submission::get_instance();
        if ( $submission ) {
            $data =& $submission->get_posted_data();
            // how do I overwrite posted data?
        }
    }
}
add_action("wpcf7_before_send_mail", "wpcf7_custom_before_send");
11
DeFeNdog

私のコードを使用してこれを行うことができます。あなたのコードのいくつかの説明:

1)id _$cf7->id_プロパティにアクセスできなくなったため。代わりにid()メソッドを使用してください$cf7->id()

2)コールバック_&_および_$cf7_に_$submission_を使用する必要はありません。このreturnに使用します。

_add_action("wpcf7_before_send_mail", "wpcf7_do_something");

function wpcf7_do_something($WPCF7_ContactForm)
{

    if (224 == $WPCF7_ContactForm->id()) {

        //Get current form
        $wpcf7      = WPCF7_ContactForm::get_current();

        // get current SUBMISSION instance
        $submission = WPCF7_Submission::get_instance();

        // Ok go forward
        if ($submission) {

            // get submission data
            $data = $submission->get_posted_data();

            // nothing's here... do nothing...
            if (empty($data))
                return;

            // extract posted data for example to get name and change it
            $name         = isset($data['your-name']) ? $data['your-name'] : "";

            // do some replacements in the cf7 email body
            $mail         = $wpcf7->prop('mail');

            // Find/replace the "[your-name]" tag as defined in your CF7 email body
            // and add changes name
            $mail['body'] = str_replace('[your-name]', $name . '-tester', $mail['body']);

            // Save the email body
            $wpcf7->set_properties(array(
                "mail" => $mail
            ));

            // return current cf7 instance
            return $wpcf7;
        }
    }
}
_

これで、いくつかのタグが変更され、変更されたタグが付いたメールが送信されます;-)

38
Brotheryura