You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何限制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。

原方案无效的原因

  1. 主查询判断不适用:「我的订阅」页面的订阅列表是通过插件自定义的WP_Query实例加载的,并非页面的主查询,所以$query->is_main_query()的条件无法命中目标查询。
  2. 参数判断错误:$_GET['view-subscription']是单个订阅详情页的参数,订阅列表页的URL通常为/my-account/subscriptions/,不会携带该参数,导致条件不成立。

内容的提问来源于stack exchange,提问作者Norm Sash

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 08:34:54