Wp_redirect i wysyłanie zmiennych

12

Jak wysłać niektóre zmienne za pomocą wp_redirect () z pliku function.php w folderze motywu?

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

A na stronie głównej złapię zmienną w stanie „jeśli”, aby pokazać potwierdzenie lub nie, w zależności od tego, czy $variable_to_send= „1”, czy nie.

Jak to zrobić w WordPress?

Derfder
źródło

Odpowiedzi:

10

Obawiam się, że nie możesz tego zrobić w ten sposób.

wp_redirectto fantazyjny sposób wysyłania nagłówka, Locationa drugim argumentem tej funkcji jest status żądania, a nie zmienna niestandardowa. (404, 301, 302 itd.).

Możesz wysłać niektóre zmienne jako parametry pobierania. Możesz więc zrobić coś takiego:

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

Następnie możesz użyć tych zmiennych jako $_GET['my_variable']lub zarejestrować je jako niestandardową zmienną get.

Krzysiek Dróżdż
źródło
1
Przypuszczam, że możesz też ustawić ciasteczko.
Ben Polinsky,
1
Musisz użyć add_query_arg, aby zrobić to w sposób WordPress.
Shivanand Sharma
@ShivanandSharma możesz, ale nie musisz używać add_query_arg, aby dodać tylko jeden argument do adresu URL bez żadnych innych argumentów zapytania.
Krzysiek Dróżdż
10

Późno na imprezę z tym, ale „sposób Wordpressa” użyłby w ten add_query_argsposób:

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

To zainicjuje przekierowanie do http://my.website/?variable_to_send=1. Będziesz mógł przechwycić zmienną na stronie głównej (lub stronie blogu, w zależności od home_url()konfiguracji), uzyskując dostęp $_GET['variable_to_send']do kodu PHP.

Jeśli masz zamiar to zrobić functions.php, upewnij się, że zaczepiłeś się initlub podobnie wcześnie zaczepiłeś, inaczej pojawi się błąd „Nagłówki już wysłane”.

Mam nadzieję, że pomoże to komuś, kto natknie się na ten post.

brianjohnhanna
źródło
7
Jeśli przekierowujesz na adres lokalny, powinieneś użyć wp_safe_redirect().
Nathan Johnson