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

WordPress钩子重定向时无法显示登录提示的问题求助

解决方案

你的echo语句无法显示是因为wp_redirect会立即发送HTTP重定向响应头,浏览器收到后会直接跳转到目标页面,根本不会渲染你输出的文本;甚至如果echo在wp_redirect之前执行,还可能触发"Headers already sent"的错误(因为输出内容会提前发送HTTP头)。

要实现重定向后显示提示信息,推荐以下两种方案:

方案1:通用WordPress实现(无需依赖WooCommerce)

通过PHP Session存储提示信息,重定向后在目标页面读取并显示:

function my_redirect() {  
    if( !is_user_logged_in() && is_page('shop')){
        // 初始化Session(如果未启动)
        if ( ! session_id() ) {
            session_start();
        }
        // 存储提示信息到Session
        $_SESSION['shop_access_notice'] = '必须登录才能访问商店';
        
        // 执行重定向
        wp_redirect( get_permalink(2604) );
        exit;
    }
}
add_action( 'template_redirect', 'my_redirect' );

// 在前台页面显示提示信息
function display_shop_access_notice() {
    if ( ! session_id() ) {
        session_start();
    }
    
    if ( isset( $_SESSION['shop_access_notice'] ) ) {
        // 输出带样式的提示框(可根据主题调整样式)
        echo '<div class="woocommerce-error" style="padding: 1em; background: #fef0f0; border: 1px solid #fcc; margin: 1em 0;">';
        echo '<p>' . esc_html( $_SESSION['shop_access_notice'] ) . '</p>';
        echo '</div>';
        // 清除Session,避免重复显示
        unset( $_SESSION['shop_access_notice'] );
    }
}
add_action( 'wp_footer', 'display_shop_access_notice' );

方案2:WooCommerce专属实现(如果你的Shop是WooCommerce页面)

直接使用WooCommerce内置的通知函数,它会自动处理消息的存储和显示:

function my_redirect() {  
    if( !is_user_logged_in() && is_page('shop')){
        // 添加错误提示
        wc_add_notice( '必须登录才能访问商店', 'error' );
        // 执行重定向
        wp_redirect( get_permalink(2604) );
        exit;
    }
}
add_action( 'template_redirect', 'my_redirect' );

说明

  • 方案2更简洁,因为WooCommerce会自动将提示信息存入Session,并重定向后在目标页面的通知区域显示(样式和WooCommerce默认提示保持一致)。
  • 方案1适用于非WooCommerce场景,样式可根据你的主题自定义调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 19:20:24