应该使用哪个挂钩来添加包含重定向的操作?

时间:2011-03-20 作者:jnthnclrk

我想构建一个插件,从查询字符串中获取某些url参数,以便为同一页面构建新的查询字符串。我正在学习优秀的专业WordPress插件开发书籍,但我不确定该使用哪个钩子来完成此操作。以下是我的动作功能:

add_action( \'init\', \'tccl_redirect\' );
function tccl_redirect() {
    header ( "Location: http://www.mysite.com/$mypage?$newparam=$newvalue" );
?>
哪些挂钩适合标头重定向?

3 个回复
最合适的回答,由SO网友:Rarst 整理而成

就像凯撒回答的那样template_redirect 钩子确实适合重定向。

您还应该使用wp_redirect() 函数,而不是设置标题。

SO网友:kaiser

我会说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\' );

SO网友:Alex

但我想说这个例子kaiser 无法工作,因为重定向后此挂钩template_redirect 一次又一次地工作,你会有endless forwarding !

如果您已经在主页上,最好检查一下,如下所示:

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\');
对我来说很好。有什么建议吗?当做

结束

相关推荐

我应该在‘admin_init’挂钩回调中使用is_admin()吗

我添加了一个操作,其中包含以下行:add_action( \'admin_init\', \'fb_init_scripts\');我的函数如下所示: function fb_init_scripts() { //Only use these scripts in admin interface if (is_admin() ) { wp_enqueue_script(\'jquery-ui\',\'http://ajax.googleapis.c