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

如何在WordPress钩子中设置延迟实现数秒后页面自动跳转

延迟重定向实现方案

首先明确核心注意点:

  • 不要使用PHP的sleep()函数实现该需求:sleep()会在服务端挂起程序,请求期间用户端会一直处于空白加载状态,无法感知到等待提示,体验极差。
  • 推荐使用浏览器端的延迟跳转机制实现,有两种成熟实现方式可选:

方案1:使用HTTP Refresh头实现(无额外页面提示)

直接修改原有redirect_page函数中跳转的逻辑即可,不需要用wp_redirect,改为发送Refresh响应头:

function redirect_page() {

     if (isset($_SERVER['HTTPS']) &&
        ($_SERVER['HTTPS'] == 'on' || $_SERVER['HTTPS'] == 1) ||
        isset($_SERVER['HTTP_X_FORWARDED_PROTO']) &&
        $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') {
        $protocol = 'https://';
        }
        else {
        $protocol = 'http://';
    }

    $currenturl = $protocol . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
    $currenturl_relative = wp_make_link_relative($currenturl);

    switch ($currenturl_relative) {
    
        case '[from slug]':
            $urlto = home_url('[to slug]');
            break;
        
        default:
            return;
    
    }
    
    if ($currenturl != $urlto) {
        // 10为延迟秒数,可自行修改
        header("Refresh: 10; url=$urlto");
        // 可选:输出提示文本给用户
        echo '页面将在10秒后自动跳转,若未跳转可<a href="'.esc_url($urlto).'">点击此处</a>';
        exit;
    }

}
add_action( 'template_redirect', 'redirect_page' );

方案2:使用Meta标签+JavaScript实现(兼容性更好,支持自定义倒计时展示)

如果需要更灵活的样式控制、动态倒计时显示,可以改为输出前端代码实现跳转:

function redirect_page() {

     if (isset($_SERVER['HTTPS']) &&
        ($_SERVER['HTTPS'] == 'on' || $_SERVER['HTTPS'] == 1) ||
        isset($_SERVER['HTTP_X_FORWARDED_PROTO']) &&
        $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') {
        $protocol = 'https://';
        }
        else {
        $protocol = 'http://';
    }

    $currenturl = $protocol . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
    $currenturl_relative = wp_make_link_relative($currenturl);

    switch ($currenturl_relative) {
    
        case '[from slug]':
            $urlto = home_url('[to slug]');
            break;
        
        default:
            return;
    
    }
    
    if ($currenturl != $urlto) {
        // 输出前端跳转代码,10秒后跳转
        ?>
        <!DOCTYPE html>
        <html>
        <head>
            <meta http-equiv="refresh" content="10; url=<?php echo esc_url($urlto); ?>">
            <title>页面跳转中</title>
        </head>
        <body>
            <p>页面将在 <span id="countdown">10</span> 秒后自动跳转,若未跳转可<a href="<?php echo esc_url($urlto); ?>">点击此处</a></p>
            <script>
                let countdown = 10;
                const countdownEl = document.getElementById('countdown');
                setInterval(() => {
                    countdown--;
                    countdownEl.textContent = countdown;
                    if (countdown <= 0) {
                        window.location.href = '<?php echo esc_url($urlto); ?>';
                    }
                }, 1000);
            </script>
        </body>
        </html>
        <?php
        exit;
    }

}
add_action( 'template_redirect', 'redirect_page' );

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 17:15:03