如何限制My Subscriptions页面仅显示active或pending-cancel状态的订阅?
解决方案:筛选「我的订阅」页面仅显示指定状态的订阅
WooCommerce Subscriptions插件的「我的订阅」页面使用自定义查询而非主查询,你之前基于pre_get_posts针对主查询的修改自然不会生效。正确的做法是使用插件官方提供的专属钩子来调整订阅查询参数。
将以下代码添加到主题的functions.php文件或自定义插件中:
add_filter( 'woocommerce_my_account_my_subscriptions_query', 'filter_my_subscriptions_query_status' ); function filter_my_subscriptions_query_status( $query_args ) { // 仅保留active和pending-cancel状态的订阅 $query_args['post_status'] = array( 'wc-active', 'wc-pending-cancel' ); return $query_args; }
代码说明
woocommerce_my_account_my_subscriptions_query是WooCommerce Subscriptions官方提供的钩子,专门用于修改「我的订阅」页面的查询逻辑,会自动继承当前用户的订阅权限筛选,无需额外处理用户验证。- 直接修改
post_status参数为目标状态数组即可,WooCommerce订阅状态统一以wc-为前缀,对应状态值为wc-active和wc-pending-cancel。
原方案无效的原因
- 主查询判断不适用:「我的订阅」页面的订阅列表是通过插件自定义的
WP_Query实例加载的,并非页面的主查询,所以$query->is_main_query()的条件无法命中目标查询。 - 参数判断错误:
$_GET['view-subscription']是单个订阅详情页的参数,订阅列表页的URL通常为/my-account/subscriptions/,不会携带该参数,导致条件不成立。
内容的提问来源于stack exchange,提问作者Norm Sash
相关产品推荐
相关产品推荐

