Многоязычный сайт Wordpress: перенаправление после отправки формы Gravity не работает на одном из двух языков - PullRequest
0 голосов
/ 05 марта 2019

Я работаю на многоязычном сайте 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?

...