幽默解析:WordPress页面跳转技巧
wordpress判断页面跳转

首页 2025-09-02 21:32:54

各位观众,先别急着鼓掌,我不是来讲历史的,我是来讲“跳”的——不是跳广场舞,而是页面跳。话说WordPress这座大宫殿里,住着一位皇帝,他最大的烦恼不是没衣服穿,而是穿了衣服却不知道往哪儿跳。于是,他下了一道圣旨:谁能告诉我,何时该跳、跳去哪儿、跳得优雅,我就赐他一只会唱歌的404小鸭子。
圣旨一出,殿前立马排起了长队。第一位选手是“wp_redirect”,这哥们儿穿着一身红衣,出场自带BGM:“跳!我让你跳!”他嗓门大,动作快,皇帝刚一点头,他就把人一脚踹到隔壁页面,连“再见”都不说。皇帝摸了摸下巴:“跳是跳了,就是有点粗鲁,像被保安架出去。”
第二位选手叫“wp_safe_redirect”,听名字就知道是个保险推销员。他先递上一张免责条款:“本跳转仅限站内,外站恕不奉陪。”皇帝点点头:“嗯,安全套……套跳转,不错。”可这家伙太慢,皇帝喝了三杯茶,他还在验证域名是不是亲生的。
第三位选手是个神秘女子,身披template_redirect钩子,走路带风。她轻轻在皇帝耳边说:“陛下,何不等页面准备就绪,再优雅地跳?就像跳探戈,前奏不能省。”皇帝眼睛一亮:“好!那就跳得像个贵族!”于是,她在functions.php里写下:
php
复制
add_action( 'template_redirect', function() {
    if ( is_page( 'secret-room' ) && ! is_user_logged_in() ) {
        wp_redirect( home_url( '/login/?please=comeback' ) );
        exit; // 跳完记得关门,不然风会灌进来
    }
} );
皇帝看完,龙颜大悦:“这才叫跳转!既不鲁莽,也不拖沓,还附带礼貌用语‘please=comeback’。”于是,404小鸭子唱着“嘎嘎跳转成功”被赐给了她。
故事讲完,诸位看官,您若也想在自家WordPress里当回皇帝,请接着往下看——真正的教程这就端上来,热乎的。
——— 教程分割线:如何优雅地“判断页面并跳转” ———
第一步:挑钩子
WordPress里钩子分两种:action和filter。跳转属于“时机到了就做事”,所以用action。常用的是template_redirect,它在主题文件加载前触发,既不早(变量已准备好)也不晚(还没输出HTML)。
第二步:写函数
在子主题的functions.php里加代码,别去改父主题,不然升级会被打回原形。
第三步:判断页面
WordPress自带一堆“判官”:
  • is_page('slug') 判断固定链接slug
  • is_page(42) 判断页面ID
  • is_single() 判断文章页
  • is_category('news') 判断分类
  • is_user_logged_in() 判断登录状态
第四步:执行跳转
wp_redirect( $url, 302 ); 302表示临时跳转,SEO友好。后面立刻跟exit;,防止后面代码继续跑,像相声演员说完“谢谢大家”不鞠躬就跑。
完整示例:把未登录用户从“VIP专区”踢到登录页
php
复制
add_action( 'template_redirect', 'my_ninja_redirect' );
function my_ninja_redirect() {
    // 如果当前是页面slug叫vip-zone且用户没登录
    if ( is_page( 'vip-zone' ) && ! is_user_logged_in() ) {
        // 把当前网址当参数带过去,方便登录后回来
        $redirect_to = urlencode( $_SERVER'REQUEST_URI' );
        wp_redirect( home_url( "/login/?back=$redirect_to" ) );
        exit;
    }
}
第五步:测试
  1. 先建一个页面,固定链接填vip-zone
  2. 退出登录,访问yoursite.com/vip-zone,应瞬间跳到yoursite.com/login/?back=/vip-zone
  3. 登录后再访问,页面正常显示。
第六步:防呆补丁
  • 跳转前别输出任何HTML,不然会报“headers already sent”——翻译话就是:皇帝已经裸奔了,你才想起给他穿衣服,晚了。
  • 如果跳转地址是变量,用esc_url()包一层,防止被坏人注入。
第七步:彩蛋
想让跳转延迟3秒,给用户一个“正在传送中”的动画?把wp_redirect换成前端JS:
php
复制
add_action( 'wp_head', function() {
    if ( is_page( 'loading' ) ) {
        echo '. esc_url( home_url( '/destination/' ) ) . '">';
    }
} );
皇帝听完教程,拍着龙椅大笑:“原来跳转也能玩出花!来呀,赐作者一只会跳霹雳舞的404小鸭子!”
nat123映射怎么用?超详细步骤,外网访问内网轻松搞定
nat123域名怎么用?两种方式轻松搞定
nat123怎么用?简单几步实现内网穿透
内网穿透工具对比:nat123、花生壳与轻量新选择
远程访问内网很简单:用对工具,一“箭”穿透
ngrok下载完全指南:从入门到获取客户端
内网远程桌面软件:穿透局域网边界的数字窗口
从外网远程访问内网服务器的完整方案
Windows Server 2008端口转发完全教程:netsh命令添加/查看/删除/重置
为什么三层交换机转发比Linux服务器快?转发表硬件加速的秘密