web-dev-qa-db-ja.com

リダイレクトを含むアクションを追加するためにどのフックを使用すべきですか?

私は同じページの新しいクエリ文字列を構築するためにクエリ文字列から特定のURLパラメータを取得するプラグインを構築したいです。私は優れたProfessional WordPress Plugin Developmentの本に従っていますが、このアクションにどのフックを使うべきかわかりません。これが私の行動関数です。

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

どのフックがヘッダーのリダイレクトに適していますか?

15
jnthnclrk

Kaiserが回答したように、template_redirectフックは確かにリダイレクトに適しています。

また、ヘッダーを設定するのではなく、 wp_redirect() functionを使用する必要があります。

12
Rarst

私はtemplate_redirectと言うでしょう。しかし、 Action Reference を見てください。

リダイレクト時にexit()を忘れないでください。

/**
 * 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' );
16
kaiser

しかし、この例では kaiser からは実行できません。リダイレクト後にこのフック template_redirect が何度も動作するため、 無限の転送 が発生するためです。

次のように、すでにホームページにアクセスしているかどうかを確認することをお勧めします。

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

私のためにうまく働きます。助言がありますか?よろしく!

8
Alex