Którego haka należy użyć, aby dodać akcję zawierającą przekierowanie?


16

Chcę zbudować wtyczkę, która pobiera niektóre parametry adresu URL z ciągu zapytania, aby utworzyć nowy ciąg zapytania dla tej samej strony. Postępuję zgodnie z doskonałą książką Professional WordPress Plugin Development, ale nie jestem pewien, jakiego haka użyć do tego działania. Oto moja funkcja akcji:

add_action( 'init', 'tccl_redirect' );
function tccl_redirect() {
    header ( "Location: http://www.mysite.com/$mypage?$newparam=$newvalue" );
?>

Które haki nadają się do przekierowań nagłówka?


Czy naprawdę chcesz zmienić końcowy adres URL, czy tylko zmienne użyte w WP_Query?
scribu

Kod, który opublikowałeś, zasadniczo przekierowałby każdą stronę, czy tego właśnie chcesz? Na jakich warunkach powinno nastąpić to przekierowanie? UWAGA: Zresztą i tak mam +1 kaiser, template_redirectbyłbym również moją sugestią.
t31os

scribu, chcę zmienić końcowy adres URL i ciąg zapytania.
jnthnclrk

t31os, uprościłem swój kod dla pytania. Rzeczywistość zawiera więcej warunków.
jnthnclrk

Jaki był wynik? Zaznacz rozwiązanie pls.
kaiser

Odpowiedzi:



17

Powiedziałbym template_redirect. Ale spójrz na Action Reference .

Przykład

Nie zapomnij exit()o przekierowaniu.

/**
 * This example redirects everything to the index.php page
 * You can do the same for the dashboard with admin_url( '/' );
 * Or simply base the redirect on conditionals like 
 * is_*() functions, current_user_can( 'capability' ), globals, get_current_screen()...
 * 
 * @return void
 */
function wpse12535_redirect_sample() {

    exit( wp_redirect( home_url( '/' ) ) );

}

add_action( 'template_redirect', 'wpse12535_redirect_sample' );

8

Ale powiedziałbym, że ten przykład od kaisera nie działa, ponieważ po przekierowaniu ten hook szablon_redirect działa wielokrotnie, będziesz mieć niekończące się przekazywanie !

Lepiej jest sprawdzić, czy jesteś już na stronie głównej, w ten sposób:

function wpse12535_redirect_sample() {

    $current_url = 'http://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
    $site_url = get_bloginfo('siteurl') . "/";

    if($current_url != $site_url)       
      exit( wp_redirect( home_url( '/' ) ));    

}
add_action( 'template_redirect', 'wpse12535_redirect_sample');

Działa dla mnie dobrze. Jakieś sugestie? Pozdrowienia!

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.