Не удается отправить значения POST за пределы Wordpress из контактной формы 7 Форма - PullRequest
0 голосов
/ 18 октября 2018

Моя цель - отправить значения через POST контактной формы 7 на перенаправленную внешнюю страницу php и отобразить эти значения.

Проблема заключается в том, что когда страница перенаправляется после отправки, значения кажутсяпотеряно, если я не удаляю JS и не изменяю URL-адрес действия формы, заканчивая тем, что удаляю все функции контактной формы 7, которые мне требуются (проверка, электронное письмо отправлено и т. д.).

Я пробовал несколько плагинов, таких как контактФорма 7 для API, и он работает только через метод GET, который я не хочу.Я попытался получить объявленные значения и преобразовать их в сеанс, но это не работает, потому что я, вероятно, что-то делаю не так.

Вот форма: введите описание изображения здесь

Вот результат, который необходимо показать: введите описание изображения здесь

ОБНОВЛЕНИЕ:

Хорошо, поэтому я разместил функцию для полученияопубликованные данные и отсутствующая переменная var_dump в файле php результата.

Вот файл fucntions.php

add_action( 'wpcf7_before_send_mail', 'send_post_values' );


  if ($form_id == 7627) {

    $user      = $cf7->posted_data["user"];
    $email = $cf7->posted_data["email"];
    $country  = $cf7->posted_data["country"];

    //any code missing??

  }

}

Вот файл show-values.php

<?php
var_dump($_POST);
print_r($_POST);
echo "Name: " . $_POST["user"] . "<br>"; 
echo "Email: " . $_POST["email"] . "<br>";
echo "Country: " . $_POST["country"] . "<br>";
?>

И вотJS, который я поместил на страницу редактирования WordPress для перенаправления

document.addEventListener( 'wpcf7mailsent', function( event ) {
    location = 'https://www.xxxxx.xxx/forms/show-values.php';
}, false );

Вывод по-прежнему отсутствует: введите описание изображения здесь

Не используйте дополнительный плагин, кроме cf7на данный момент.

Ответы [ 4 ]

0 голосов
/ 18 октября 2018

Проблема в том, что при перенаправлении запроса на стороне браузера вы в основном запускаете совершенно новый запрос, который будет запросом GET.Вот некоторые из вещей, которые вы можете попробовать:

  1. Передача данных в виде параметров GET.Простейший, но не тот, который вам нужен.
  2. Используйте Javascript для повторной отправки формы после первой отправки, но на этот раз по необходимому URL.
  3. Сохраняйте данные после отправки и извлекайте их на правильной странице после перенаправления.В основном то, что вы пытались сессией, но вы сказали, что это не сработало.Вы использовали session_start()?Также это работает, только если обе страницы являются частью одной веб-страницы.Вы также можете попытаться сохранить эти данные в файле / базе данных / где-то еще и, возможно, передать какой-то идентификатор в качестве параметра GET, чтобы найти эти данные после перенаправления.
0 голосов
/ 18 октября 2018

Для этого можно использовать крючок контактной формы 7.

попробуйте это:

add_action( 'wpcf7_before_send_mail', 'do_your_task' );

function do_your_task($cf7) {
  $form_id = $cf7->id();

  // Do some task only for specific form
  if ($form_id == 123) { // 123 => Your Form ID.

    $email      = $cf7->posted_data["your-email"]; // Update "your-email" to the actual field name you have given in the form
    $first_name = $cf7->posted_data["your-firstname"];
    $last_name  = $cf7->posted_data["your-lastname"];


    //pass data to 3'rd party API

  }

}

См. Все крючки, предоставленные контактной формой 7

Обновление: По мере обновления вопроса.для вашего случая вы можете попробовать это: Вы можете отправлять значения через строку запроса через URL или путем создания переменной сеанса.

Добавьте этот код в functions.php

add_action( 'wpcf7_before_send_mail', 'send_form_data' );

function send_form_data($cf7) {
  $form_id = $cf7->id();

  // Do some task only for specific form
  if ($form_id == 123) { // 123 => Your Form ID.    
    $posted_data_str = http_build_query( array("data" => $cf7->posted_data ) );
    $location =  "https://www.xxxxx.xxx/forms/show-values.php?" . $posted_data_str;
    wp_redirect( $location );
    die();
  }
}

Теперь нет необходимостиперенаправьте через js

в ваш файл show-values.php и добавьте следующий код.

$get_data = $_GET['data'];
if ( !empty($get_data)) {
  var_dump($get_data);

  echo "Name: " . $get_data["your-name"] . "<br>";  // Change "your-name"
}

Однако другой способ заключается в создании переменной SESSION.

0 голосов
/ 18 октября 2018

Другой ответ здесь в основном правильный, он предполагает, что вы знаете, как работает WordPress.Есть файл с именем functions.php, в который вы обычно хотите добавить любой php-код, который вам нужен.Взаимодействие с ним состоит из двух частей: сначала вы объявляете функцию, как обычно:

function what_I_wanna_do {
    // stuff
}

Затем вы объявляете триггер, который вызывает функцию:

add_action( 'wpcf7_before_send_mail', 'what_I_wanna_do' );

В этом триггереплагин контактной формы позволяет вам подключиться к нему, чтобы вы могли запустить что-то, в этом случае, до того, как произойдут основные функции плагинов.По сути, эта строка говорит, что перед тем, как приступить к работе с контактной формой, запустите функцию "what_I_wanna_do".Поместите все, что вы хотите, в what_I_wanna_do, затем выйдите из \ redirect так, как вы хотите в конце.Вы можете объявить все эти вещи в functions.php (или создать свой собственный плагин, чтобы было легче вставлять и выгружать код \ update WP).

0 голосов
/ 18 октября 2018

Попробуйте сделать это вместо перенаправления на ваш код:

funtionThatCallsMyHandler() {
    //yourcode
}

Поместите это в functions.php, тогда в месте, где вы вызываете свой код перенаправления, выполните:

funtionThatCallsMyHandler();
redirect
exit

Таким образом, он по-прежнему имеет данные о почтовых отправлениях, а не цепочки перенаправлений.

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