Yönlendirme içeren bir eylem eklemek için hangi kanca kullanılmalıdır?


16

Aynı sayfa için yeni bir sorgu dizesi oluşturmak için sorgu dizesinden belirli URL parametrelerini kapmak bir eklenti oluşturmak istiyorum. Mükemmel Profesyonel WordPress Eklenti Geliştirme kitabını takip ediyorum, ancak bu eylem için hangi kancayı kullanacağımdan emin değilim. İşte benim eylem fonksiyonu:

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

Hangi kancalar başlık yönlendirmeleri için uygundur?


Nihai URL'yi mi yoksa sadece WP_Query'de kullanılan değişkenleri mi değiştirmek istiyorsunuz?
scribu

Gönderdiğiniz kod temel olarak her sayfayı yeniden yönlendirir, istediğiniz şey bu mu? Bu yönlendirme hangi koşullarda gerçekleşmelidir? NOT: Yine de + 1'edim kaiser, template_redirectbenim önerim de olurdu.
t31os

scribu, son url ve sorgu dizesini değiştirmek istiyorum.
jnthnclrk

t31os, soru için kodumu basitleştirdim. Gerçek olan daha fazla koşul içeriyor.
jnthnclrk

Sonuç neydi? Bir çözümü işaretleyin pls.
kaiser

Yanıtlar:



17

Ben söylerdim template_redirect. Ancak Eylem Referansına bir göz atın .

Misal

exit()Yönlendirmeyi unutmayın .

/**
 * 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

Ama kaiser'den bu örneğin çalışamayacağını söyleyebilirim , çünkü bir kancadan sonra bu kanca template_redirect tekrar tekrar çalışıyor, sonsuz bir yönlendirme olacak !

Daha iyisi, zaten ana sayfada olup olmadığınızı kontrol etmektir:

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');

Benim için iyi çalışıyor. Herhangi bir öneri? Saygılarımızla!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.