You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用slug结合wp_redirect()实现用户重定向?解决带参数插件页面的重定向失效问题

解决WP后台插件页面的重定向问题

先直接回答你的两个问题,再给出修正后的完整代码:

问题1:如何正确判断当前页面为/wp-admin/admin.php?page=booknetic?

因为这是WordPress后台的插件页面,不能用前台的is_page()这类函数来判断,正确的判断逻辑应该是:

  • 先用is_admin()确认当前处于WP后台环境
  • 再检查$_GET['page']是否存在且等于booknetic(因为该页面的URL参数里page的值就是这个)

注意一定要加isset($_GET['page']),避免出现PHP未定义索引的警告。

问题2:重定向失效是否因为该页面是自定义链接指向的插件页面?

不是,自定义链接只是该插件页面的入口,本身不会导致重定向失效。真正的问题出在你原来代码的逻辑运算符优先级错误,以及页面判断的逻辑混乱:
你原来的条件写法是:

if ( is_front_page() || isset($_GET['page']) || is_page('profile') || is_page('account') && is_user_logged_in() && $count == 0)

由于&&的优先级高于||,这段代码实际的执行逻辑是:
is_front_page() || isset($_GET['page']) || is_page('profile') || (is_page('account') && is_user_logged_in() && $count == 0)
这意味着:只要是首页、任何带page参数的页面、profile页面,不管用户是否登录或是否填过表单,都会被重定向;只有account页面才会检查登录状态和表单提交情况——这完全不符合你的需求。

另外,template_redirect钩子虽然在后台也会触发,但针对后台页面,配合admin_init钩子一起使用会更稳妥。


修正后的完整代码

下面的代码会同时处理前台和后台页面,逻辑清晰且避免了优先级问题:

// 重定向已登录未填表单的用户到申请表单页面
add_action( 'template_redirect', 'redirect_to_application_form' );
add_action( 'admin_init', 'redirect_to_application_form' ); // 确保后台页面也能触发

function redirect_to_application_form() {
    // 声明全局变量$count(确保能正确获取表单提交记录数)
    global $count;

    // 先排除不需要重定向的情况:未登录 或 已填表单
    if ( !is_user_logged_in() || $count !== 0 ) {
        return;
    }

    // 判断当前是否是需要重定向的页面
    $needs_redirect = false;

    // 前台页面判断
    if ( is_front_page() || is_page('profile') || is_page('account') ) {
        $needs_redirect = true;
    }

    // 后台插件页面判断
    if ( is_admin() && isset($_GET['page']) && $_GET['page'] === 'booknetic' ) {
        $needs_redirect = true;
    }

    // 执行重定向
    if ( $needs_redirect ) {
        // 使用home_url生成绝对路径,避免后台环境下相对路径出错
        wp_redirect( home_url('/first-time-application-temp/') );
        exit; // 必须加exit终止后续代码执行
    }
}

额外注意事项

  1. 确保$count变量确实能准确反映用户的表单提交状态,比如当用户未提交表单时$count严格等于0
  2. 如果后台重定向仍然不生效,可以尝试提高钩子的优先级,比如把add_action的第三个参数设为1(让代码更早执行):
    add_action( 'admin_init', 'redirect_to_application_form', 1 );
    
  3. 调试时可以在函数里添加日志记录,确认页面是否被正确识别:
    error_log( 'Current request URI: ' . $_SERVER['REQUEST_URI'] );
    
    日志会出现在WP根目录的wp-content/debug.log(需要开启WP_DEBUG)

内容的提问来源于stack exchange,提问作者Dan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 22:34:05