Взлом кода «Контактная форма 7» для добавления поля «По ссылке» - PullRequest
0 голосов
/ 03 апреля 2010

У меня есть около 6 поддоменов, которые имеют ссылку «связаться с нами», и я отправляю все эти ссылки в одну форму, которая использует «Контактную форму 7». Я добавляю? From = site-name к каждой из ссылок, чтобы я мог установить переменную $ referFrom в контактной форме.

Мне не хватает только двух вещей: (1) возможность вставить эту переменную referFrom в электронное письмо, которое я получаю всякий раз, когда кто-то отправляет форму, и (2) возможность перенаправить пользователя обратно на сайт, с которого он пришел (хранится в $ ReferFrom)

Есть идеи?

Вот небольшой фрагмент кода из include / classes.php, который, как я думал, может быть частью вставки по электронной почте, но он мало что делает ...

function mail() {
    global $referrer;
    $refferedfrom = $referrer; //HERE IS MY CUSTOM CODE
    $fes = $this->form_scan_shortcode();

    foreach ( $fes as $fe ) {
        $name = $fe['name'];
        $pipes = $fe['pipes'];

        if ( empty( $name ) )
            continue;

        $value = $_POST[$name];

        if ( WPCF7_USE_PIPE && is_a( $pipes, 'WPCF7_Pipes' ) && ! $pipes->zero() ) {
            if ( is_array( $value) ) {
                $new_value = array();
                foreach ( $value as $v ) {
                    $new_value[] = $pipes->do_pipe( $v );
                }
                $value = $new_value;
            } else {
                $value = $pipes->do_pipe( $value );
            }
        }

        $this->posted_data[$name] = $value;
        $this->posted_data[$refferedfrom] = $referrer; //HERE IS MY CUSTOM CODE
    }

Я также думаю, что я мог бы вставить куда-нибудь код из этой функции в эту функцию ...

function compose_and_send_mail( $mail_template ) {
    $regex = '/\[\s*([a-zA-Z][0-9a-zA-Z:._-]*)\s*\]/';
    $callback = array( &$this, 'mail_callback' );

    $mail_subject = preg_replace_callback( $regex, $callback, $mail_template['subject'] );
    $mail_sender = preg_replace_callback( $regex, $callback, $mail_template['sender'] );
    $mail_body = preg_replace_callback( $regex, $callback, $mail_template['body'] );
    $mail_recipient = preg_replace_callback( $regex, $callback, $mail_template['recipient'] );

    $mail_headers = "From: $mail_sender\n";

    if ( $mail_template['use_html'] )
        $mail_headers .= "Content-Type: text/html\n";

    $mail_additional_headers = preg_replace_callback( $regex, $callback,
        $mail_template['additional_headers'] );
    $mail_headers .= trim( $mail_additional_headers ) . "\n";

    if ( $this->uploaded_files ) {
        $for_this_mail = array();
        foreach ( $this->uploaded_files as $name => $path ) {
            if ( false === strpos( $mail_template['attachments'], "[${name}]" ) )
                continue;
            $for_this_mail[] = $path;
        }

        return @wp_mail( $mail_recipient, $mail_subject, $mail_body, $mail_headers,
            $for_this_mail );
    } else {
        return @wp_mail( $mail_recipient, $mail_subject, $mail_body, $mail_headers );
    }
}

Ответы [ 3 ]

1 голос
/ 12 декабря 2013

Я нашел плагин, который отлично работает для этого, плюс немного больше:

http://wordpress.org/plugins/contact-form-7-leads-tracking/

Который добавит всю информацию в конец вашего письма при отправке

0 голосов
/ 21 апреля 2011

Вставьте в functions.php или создайте простой плагин ...

1.

function custom_wpcf7_special_mail_tag( $output, $name  ) {
    if ( 'from' == $name ) {
        $referredFrom = ( isset($_GET["from"]) && !empty($_GET["from"]) ) ? $_GET["from"] : '';
        $output =  $referredFrom;
    }

    return $output;
}
add_filter( 'wpcf7_special_mail_tags', 'custom_wpcf7_special_mail_tag', 10, 2 );

Используйте тег [from] в своем шаблоне электронной почты.

2.

function add_custom_js_cf7() {
    $referredFrom = ( isset($_GET["from"]) && !empty($_GET["from"]) ) ? $_GET["from"] : '';
    if ( $referredFrom ) {
    ?>
        <script type="text/javascript">
        var from = "<?php echo $referredFrom; ?>";
        </script>
<?php }
}
add_action( 'wpcf7_enqueue_scripts', 'add_custom_js_cf7' );

И добавьте эту строку в «дополнительные настройки» в настройках формы:

on_sent_ok: "location = from;"

http://contactform7.com/blog/2010/03/27/redirecting-to-another-url-after-submissions/


Вы также можете использовать global $referredFrom;, если вы его где-то объявили.

0 голосов
/ 04 апреля 2010

Прежде всего, чтобы получить переменную from, нужно вставить

$referrer = $_GET['from'];

где-то в верхнем скрипте, по крайней мере, до последней вставленной строки.

Кроме того, во втором сценарии вы должны как-то добавить значение к $ mail_body, но, поскольку я не знаю, как это значение составлено, я не могу с этим ничего поделать. Код этой формы доступен где-нибудь онлайн?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...