wp_redirect出错

时间:2018-03-27 16:37:40

标签: wordpress url-redirection

我想将管理员用户重定向到维护页面(https://mysite/maintenance/),但firefox告诉我重定向未正确制作

    add_action( 'template_redirect', 'custom_redirect' );
function custom_redirect()
{
    if (current_user_can('administrator')) {
        wp_redirect( home_url('/maintenance/') );
        exit;
    }
}

有你的想法吗?

2 个答案:

答案 0 :(得分:0)

您应该使用template_include过滤器:

add_filter('template_include', 'wpse_44239_template_include', 1, 1);
function wpse_44239_template_include($template){
    if (current_user_can('administrator')) {
        wp_redirect( home_url('/maintenance/') );
        exit;
    }
    return $template;
}

template_redirect是在为渲染模板的输出发送标头之前直接调用的操作。它是一个方便的钩子来做404重定向等...但不应该用于包含其他模板路径,因为WordPress使用'template_include'过滤器固有地这样做。

template_includesingle_template挂钩仅处理用于呈现内容的模板的路径。这是调整模板路径的适当位置。

答案 1 :(得分:0)

Firefox报告的具体错误是什么?听起来它可能是一个无限重定向循环。我建议添加一张支票,以确保您不在维护页面上,即:

add_action( 'template_redirect', 'custom_redirect' );
function custom_redirect()
{
    if (current_user_can('administrator')) 
    {
         global $wp;
         $current_url =  home_url( $wp->request );
         $position = strpos( $current_url , '/maintenance/' );
         if ($position===FALSE) {
          wp_redirect( home_url('/maintenance/') );
          exit;
         }
    }
}