Я работаю на многоязычном сайте Wordpress с голландскими и французскими страницами. На обеих этих страницах я добавил форму, используя Gravity Forms. После отправки формы данные должны быть отправлены в API, после чего происходит перенаправление на страницу благодарности. Для этого я использовал действие GF gform_after_submission
;
add_action( 'gform_after_submission', 'subscribe_in_api', 10, 2 );
/**
* Subscribes the user to newsletter in API.
*
* @param array $entry
*/
function subscribe_in_api( $entry, $form ) {
if ( 'Form Name' === $form['title'] ) {
$credentials = 'credentials';
$url = "https://{$credentials}@api.url";
$first_name = rgar( $entry, 1 );
$last_name = rgar( $entry, 2 );
$email = rgar( $entry, 4 );
$locale = substr( get_locale(), 0, 2 );
$timestamp = date( 'dmY' );
$newsletter_page = $_SERVER['REQUEST_URI'];
$thank_you_page = 'nl' === $locale ? '/bedankt' : '/merci';
$body = wp_json_encode(
[
'email' => $email,
'firstname' => $first_name,
'lastname' => $last_name,
'fields' => [
[
'id' => 'id',
'value' => $locale
],
[
'id' => 'id',
'value' => 'value
],
[
'id' => 'id,
'value' => 'YES'
]
],
'lists' => [
[
'id' => newsletter_id
]
]
]
);
$request = new WP_Http();
$response = $request->post( $url, [ 'body' => $body ] );
$code = $response['response']['code'];
if ( 200 === $code ) {
$location = "/{$locale}{$thank_you_page}";
wp_safe_redirect( $location );
} else {
$location = "/${locale}{$newsletter_page}";
wp_safe_redirect( $location );
}
}
}
Это работает на голландском сайте, но не на французском. На французском сайте весь код по-прежнему выполняется, и выполняется вызов API, но wp_safe_redirect()
никогда не происходит. Добавление операторов die()
(для отладки) также работает по-другому. На голландском сайте все, что я die()
печатает на странице, однако на французской странице я должен посмотреть на вкладку сети, нажать на вызов и посмотреть ответ, чтобы увидеть то, что было напечатано (это также, как я Я знаю, что вызов API работает, как если бы die( $code );
после вызова давал мне код состояния).
Я пробовал перенаправления на разные страницы (как на голландском, так и на французском) и разными способами (header( 'Location: ...')
, wp_redirect('...')
и wp_safe_redirect('...')
, но ни одна из них не работает. Я проверил, что все настройки формы одинаковы, и что одинаковые плагины работают на обоих сайтах.
Честно говоря, у меня нет идей, где искать, есть ли языковые настройки, запрещающие перенаправления в Wordpress?