会员标记显示已经过期三天,前台付费文章还是全篇可见,手动把角色改回去才恢复限制,用户自己也不知道。碰到这种情况,我一般先确认改动有没有真的生效。
原因不复杂,到期时间只存在用户字段里,没有任何环节去比对,角色一直停在付费会员那一档,时间到了也没人处理,时间久了才发现。
「WordPress 会员到期降级」这类改动最怕改一半,回滚脚本先准备好,再动生产。报错里带路径的,先去看那个路径在不在、权限对不对。
add_action('wp_login', function ($l, $u) {
$end = get_user_meta($u->ID, 'vip_expire', true);
if (!$end || strtotime($end) > time()) return;
$u->set_role('subscriber');
}, 10, 2);
同一份配置存在多处的,先确认改的是被加载的那一份。新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。
具体做法是,用户登录的时候比对到期字段与当前时间的先后;确认过期就把角色改回默认档并清掉会员标记;再用定时任务兜住长期不登录的那一批老用户。
最后用这个标准收尾,把到期时间改到昨天再重新登录,角色自动降为订阅者,付费内容随即关闭。
