Как выполнить серверный скрипт при отправке Contact Form 7?

20 авг. 2013 г., 07:02:05
Просмотры: 21.9K
Голосов: 5

Я новичок в WordPress и пытаюсь создать простую форму. В настоящее время я использую Contact Form 7, и пока он мне нравится. Но теперь я пытаюсь выполнить серверный код при отправке формы. По сути, я просто хочу получить переменные post из формы после её отправки, чтобы использовать эти данные в скрипте. При этом я хочу сохранить функционал отправки email на указанный адрес при отправке формы.

Есть ли простой и эффективный способ сделать это без необходимости менять что-либо в коде?

1
Комментарии

Что означает "серверный скрипт"? Речь идет о PHP, который может выполняться в контексте WordPress? О bash/Perl/другом скрипте? О чем именно? И что должен делать этот скрипт?

s_ha_dum s_ha_dum
20 авг. 2013 г. 07:51:16
Все ответы на вопрос 1
6

Вам понадобится хук wpcf7_before_send_mail, который срабатывает после успешной отправки письма. Просто добавьте этот код в ваш файл functions.php.

add_action( 'wpcf7_before_send_mail', 'process_contact_form_data' );
function process_contact_form_data( $contact_data ){

    var_dump($contact_data->posted_data);
            $name = $contact_data->posted_data["your-name"];
    $email = $contact_data->posted_data["your-email"];

    echo $name ;
    echo $email;                
}

Вы можете получить доступ к полям формы по их имени в массиве $contact_data->posted_data.


Да. Вы можете перенаправить на другую страницу либо с помощью JavaScript, либо из упомянутой выше функции. С JavaScript вам нужно добавить следующую строку в Дополнительные настройки созданной контактной формы.

on_sent_ok: "location = 'http://вашдомен.com/thankyou.php';"

Но этот способ не позволит вам использовать значения, отправленные из формы. Поэтому лучше использовать альтернативный метод.

Перенаправьте на страницу thankyou из упомянутой выше функции. Но перед перенаправлением сохраните информацию, которую хотите показать на странице thankyou, в переменные SESSION (например, имя, email, тему из формы). Затем на странице thankyou получите эти значения и отобразите их. Позже вы можете уничтожить переменные сессии и проверять каждый раз, установлены ли определенные переменные. Это даст контроль над прямым доступом к URL thankyou из браузера и покажет соответствующее сообщение о том, что страница недоступна напрямую.

20 авг. 2013 г. 07:55:37
Комментарии

Спасибо за ваш ответ, @Phobos. Возможно ли сделать так, чтобы после отправки формы происходил редирект на страницу с благодарностью, где я смогу использовать переменные post из только что отправленной формы Contact 7?

Atasha Atasha
20 авг. 2013 г. 15:58:33

@drifter проверьте обновленный ответ.

SachinGutte SachinGutte
20 авг. 2013 г. 18:39:27

это не работает. Помимо отсутствия редиректа, пользователь не получает обратной связи после отправки формы (несмотря на то, что email отправляется) и остается с бесконечной анимацией загрузки. Кстати, авторы официально не рекомендуют использовать хук on_sent_ok (который реально работает) и предлагают решение, которое, к сожалению, не работает

zok zok
17 авг. 2017 г. 12:36:42

Так как прошло много времени, автор мог изменить API и хуки.

SachinGutte SachinGutte
17 авг. 2017 г. 13:07:42

on_sent_ok устарел и больше не доступен

kanlukasz kanlukasz
18 мая 2020 г. 20:24:08

БОЛЬШЕ НЕ РАБОТАЕТ, данные теперь должны обрабатываться с использованием $submission = WPCF7_Submission::get_instance(); и $posted_data = $submission->get_posted_data();, как указано в этом ответе

rAthus rAthus
17 дек. 2020 г. 12:18:57
Показать остальные 1 комментариев