如何通过编程实现WooCommerce Memberships将2年以上内容设为公开
实现WooCommerce Memberships旧帖子开放访问的方案
完全可以通过编程实现你想要的需求!核心思路就是在会员权限判断的基础上,叠加帖子发布时间的校验逻辑,让发布超过2年的内容自动对所有用户开放。下面是具体的实现方法:
推荐方案:使用插件钩子(更优雅,无模板修改)
WooCommerce Memberships提供了wc_memberships_user_can_access_post过滤器,专门用来修改用户对单篇帖子的访问权限。我们可以利用这个钩子,在原有会员判断的基础上,加入旧帖子的放行逻辑:
add_filter( 'wc_memberships_user_can_access_post', 'allow_old_posts_for_all_users', 10, 3 ); function allow_old_posts_for_all_users( $can_access, $user_id, $post ) { // 如果用户已经是活跃会员(原本就有权限),直接放行 if ( $can_access ) { return true; } // 获取帖子的发布时间戳(基于服务器时间) $post_publish_timestamp = get_post_time( 'U', true, $post ); // 计算2年前的时间戳 $two_years_past_timestamp = strtotime( '-2 years' ); // 对比:如果帖子发布时间早于2年前,所有用户都能访问 if ( $post_publish_timestamp < $two_years_past_timestamp ) { return true; } // 其他情况保持原权限判断结果 return $can_access; }
代码说明:
- 这个钩子会拦截WooCommerce Memberships的权限判断流程,先检查用户是否已经是会员(
$can_access为true时直接返回) - 对于非会员用户,我们获取帖子的发布时间,和当前时间往前推2年的时间戳做对比
- 满足发布超2年条件的帖子,直接返回
true放行所有用户访问 - 不满足条件的帖子,依然遵循原有的会员权限规则
使用注意:
- 把这段代码添加到你的WordPress主题的
functions.php文件中,或者创建一个简单的自定义插件来存放(更推荐后者,避免主题更新导致代码丢失) - 测试时记得验证两种场景:刚发布的帖子仅会员可见,发布超过2年的帖子所有人都能打开
- 确保你的服务器时间设置正确,否则时间对比会出现偏差
- 该代码适用于所有文章类型(包括自定义文章类型),无需额外修改
备选方案:直接修改模板中的条件判断
如果你需要在特定模板文件中单独控制,也可以直接修改原有的会员判断条件,把旧帖子的逻辑加进去:
// 获取当前用户ID和帖子发布时间 $current_user_id = get_current_user_id(); $post_publish_time = get_post_time( 'U', true ); $two_years_ago = strtotime( '-2 years' ); // 合并条件:会员 或 帖子发布超2年 if ( wc_memberships_is_user_active_member( $current_user_id ) || $post_publish_time < $two_years_ago ) { // 这里放置要显示的内容 the_content(); } else { // 非会员且帖子未满2年时,显示会员邀请/登录提示 echo '请成为会员以访问此内容'; }
这种方式适合需要在特定页面做定制化显示的场景,但缺点是需要修改模板文件,后续主题更新时需要注意备份。
内容的提问来源于stack exchange,提问作者dungey_140
相关产品推荐
相关产品推荐

