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


16

我想构建一个从查询字符串中获取某些url参数的插件,以为同一页面构建一个新的查询字符串。我遵循的是《专业WordPress插件开发》这本出色的书,但是我不确定该操作使用哪个钩子。这是我的动作函数:

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

哪些挂钩适合头重定向?


您实际上是要更改最终URL还是仅更改WP_Query中使用的变量?
scribu

您发布的代码基本上会重定向每个页面,这就是您想要的吗?在什么情况下应该发生这种重定向?注意:无论如何,我已经为kaiser +1了,template_redirect这也是我的建议。
t31os 2011年

scribu,我想更改最终URL和查询字符串。
jnthnclrk 2011年

t31os,我简化了该问题的代码。真实的事物包含更多的条件。
jnthnclrk 2011年

结果是什么?标记解决方案。
kaiser

Answers:



17

我会说template_redirect。但是,请参阅“动作参考”

不要忘记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

但是我会说来自kaiser的这个示例无法正常工作,因为重定向后,此hook 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');

对我来说很好。有什么建议么?问候!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.