Wp_redirect и отправка переменных

12

Как отправить некоторые переменные с помощью wp_redirect () из файла function.php в моей папке темы?

if ( $post_id ) {
    $variable_to_send = '1';
    wp_redirect( home_url(), $variable_to_send );
    exit;
}

И на домашней странице я поймаю переменную в условии if-else, чтобы показать какое-то подтверждение или нет в зависимости от того, $variable_to_send'= 1' или нет.

Как это сделать в WordPress?

Derfder
источник

Ответы:

10

Я боюсь, что вы не можете сделать это таким образом.

wp_redirectэто необычный способ отправки заголовка, Locationи вторым аргументом этой функции является статус запроса, а не пользовательская переменная. (404, 301, 302 и т. Д.).

Вы можете отправить некоторые переменные в качестве параметров получения. Так что вы можете сделать что-то вроде этого:

if ( $post_id ) {
        $variable_to_send = '1';
        wp_redirect( home_url() .'?my_variable='.$variable_to_send );
        exit;
}

Затем вы можете использовать эти переменные как $_GET['my_variable']или зарегистрировать их как пользовательскую переменную get.

Krzysiek Dróżdż
источник
1
Вы также можете установить печенье, я полагаю.
Бен Полинский
Вам нужно использовать add_query_arg, чтобы сделать это способом WordPress.
Шивананд Шарма
@ShivanandSharma вы можете, но нет необходимости использовать add_query_arg, чтобы добавить только один аргумент в URL без каких-либо других аргументов запроса.
Krzysiek Dróżdż
10

Опоздал на вечеринку с этим, но «Wordpress способ» сделать это будет add_query_argтак:

if ( $post_id ) {
    wp_redirect( esc_url( add_query_arg( 'variable_to_send', '1', home_url() ) ) );
    exit;
}

Это инициирует перенаправление на http://my.website/?variable_to_send=1. Затем вы сможете перехватить переменную на домашней странице (или странице блога, в зависимости от того, как вы home_url()ее настроите), открыв $_GET['variable_to_send']свой PHP-код.

Если вы собираетесь это functions.phpсделать, убедитесь, что вы зацепили initили аналогично раннюю зацепку, иначе вы получите ошибку «Заголовки уже отправлены».

Надеюсь, это поможет кому-то, кто наткнется на этот пост.

brianjohnhanna
источник
6
Если вы перенаправляете на локальный адрес, вы должны использовать wp_safe_redirect().
Натан Джонсон