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
相关产品推荐
相关产品推荐

