幽默解析: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小鸭子!”
MySQL连接就这么简单!本地远程、编程语言连接方法一网打尽
还在为MySQL日期计算头疼?这份加一天操作指南能解决90%问题
MySQL日志到底在哪里?Linux/Windows/macOS全平台查找方法在此
MySQL数据库管理工具全景评测:从Workbench到DBeaver的技术选型指南
MySQL密码忘了怎么办?这份重置指南能救急,Windows/Linux/Mac都适用
你的MySQL为什么经常卡死?可能是锁表在作怪!快速排查方法在此
MySQL单表卡爆怎么办?从策略到实战,一文掌握「分表」救命技巧
清空MySQL数据表千万别用错!DELETE和TRUNCATE这个区别可能导致重大事故
你的MySQL中文排序一团糟?记住这几点,轻松实现准确拼音排序!
别再混淆Hive和MySQL了!读懂它们的天壤之别,才算摸到大数据的门道