リダイレクトを含むアクションを追加するには、どのフックを使用する必要がありますか?


16

同じページの新しいクエリ文字列を構築するために、クエリ文字列から特定のURLパラメータを取得するプラグインを構築したいと思います。Professional WordPressプラグイン開発の優れた本をフォローしていますが、このアクションにどのフックを使用すべきかわかりません。ここに私のアクション関数があります:

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

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


実際に最終URLまたはWP_Queryで使用される変数のみを変更しますか?
スクリブ

投稿したコードは基本的にすべてのページをリダイレクトしますが、それはあなたが望むものですか?このリダイレクトはどのような状況で発生するのでしょうか?注:とにかくカイザーを+1しましたtemplate_redirect。これも私の提案です。
t31os

scribu、最終的なURLとクエリ文字列を変更したい。
-jnthnclrk

t31os、質問のコードを単純化しました。本物にはより多くの条件が含まれています。
-jnthnclrk

結果はどうでしたか?ソリューションをマークしてください。
kaiser

回答:



17

私は言うだろう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' );

8

しかし、リダイレクト後、このフック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');

私にとってはうまくいく。助言がありますか?よろしく!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.