is_user_logged_in与wp_redirect冲突:自定义文章类型单页重定向异常求助
解决特定Property自定义文章登录后仍被重定向的问题
你遇到的这个个别文章异常重定向的情况挺常见的,咱们从几个方向排查和解决:
1. 先查目标文章的权限与状态
首先去后台打开那个abc对应的property文章,检查两个点:
- 发布状态是不是设成了私有?如果是私有,即使用户登录了,没有对应权限(比如不是文章作者、不是管理员)也会被系统拦截,触发重定向。
- 看看当前登录用户有没有访问该文章的权限,比如文章是不是其他用户的私有内容,当前用户没有查看权限。
2. 优化代码逻辑,避免误拦截
你的基础代码没问题,但可以加一层权限判断,防止有权限的用户被误挡:
add_action('template_redirect','hide_single_property'); function hide_single_property() { // 未登录用户直接重定向 if( (is_singular('property') || is_page('dashboard')) && !is_user_logged_in() ){ wp_redirect(get_permalink(103),302); exit; } // 针对登录用户,额外检查私有文章的访问权限 if( is_singular('property') && is_user_logged_in() ){ $current_post = get_post(); // 如果文章是私有,且当前用户没有编辑权限(可根据需求调整权限) if( get_post_status($current_post->ID) === 'private' && !current_user_can('edit_post', $current_post->ID) ){ wp_redirect(get_permalink(103),302); exit; } } }
这样既保留了对未登录用户的拦截,又不会误伤有权限查看私有文章的用户。
3. 清除缓存(大概率是这个问题)
很多时候这种“登录后依然重定向”的异常是缓存搞的鬼:
- 先清掉WordPress缓存插件(比如WP Rocket、W3 Total Cache)的缓存。
- 如果服务器有CDN或者Nginx静态缓存,也需要同步清除。
- 最后用浏览器无痕模式测试,避免本地缓存影响结果。
4. 排查插件冲突
暂时禁用所有其他插件,只保留你的这段自定义代码,测试该文章能不能正常访问。如果好了,再逐个启用插件,找到冲突的那个。
5. 检查Slug是否重复
确认abc这个文章slug有没有和其他页面、分类、自定义文章类型的slug重复?Slug冲突会导致WordPress路由判断出错,进而触发错误的重定向。
按上面的步骤走,应该能搞定这个特定文章的重定向问题。
内容的提问来源于stack exchange,提问作者Davinder Singh
相关产品推荐
相关产品推荐

