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

Вам понадобится хук 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 из браузера и покажет соответствующее сообщение о том, что страница недоступна напрямую.

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

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

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