Kait mana yang harus digunakan untuk menambahkan tindakan yang berisi arahan ulang?

16

Saya ingin membuat plugin yang mengambil parl url tertentu dari string kueri untuk membuat string kueri baru untuk halaman yang sama. Saya mengikuti buku Pengembangan Plugin WordPress Profesional yang bagus, tetapi saya tidak yakin hook mana yang digunakan untuk tindakan ini. Inilah fungsi tindakan saya:

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

Kait mana yang cocok untuk arahan ulang header?

jnthnclrk
sumber
Apakah Anda benar-benar ingin mengubah URL akhir atau hanya variabel yang digunakan di WP_Query?
scribu
Kode yang Anda posting pada dasarnya akan mengarahkan ulang setiap halaman, apakah itu yang Anda inginkan? Dalam kondisi apa seharusnya pengalihan ini terjadi? CATATAN: Saya sudah memberi +1 pada kaiser, template_redirectjuga akan menjadi saran saya.
t31os
scribu, saya ingin mengubah url akhir dan string kueri.
jnthnclrk
t31os, saya menyederhanakan kode saya untuk pertanyaan itu. Hal yang sebenarnya mengandung lebih banyak kondisi.
jnthnclrk
Apa hasilnya? Tandai sebuah solusi, mohon.
kaiser

Jawaban:

17

Saya akan mengatakan template_redirect. Tetapi lihat Referensi Tindakan .

Contoh

Jangan lupa untuk exit()mengarahkan ulang.

/**
 * 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' );
kaisar
sumber
8

Tetapi saya akan mengatakan contoh ini dari kaiser tidak dapat bekerja, karena setelah redirect, kail ini template_redirect bekerja berulang kali, Anda akan memiliki penerusan tanpa akhir !

Lebih baik memeriksa, jika Anda sudah ada di beranda, seperti ini:

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

Bekerja untuk saya baik-baik saja. Ada saran? Salam!

Alex
sumber