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

如何在WordPress后台筛选仅显示含Active分类的自定义产品列表?

解决方案

核心逻辑

利用WordPress的pre_get_posts钩子,在后台产品列表的主查询执行前,自动过滤掉关联了禁用分类的产品。

代码实现(需根据实际配置调整)

假设你给分类加的启用状态自定义字段键是category_active,启用值为active,产品分类的taxonomy是product_category,把以下代码加到主题functions.php或自定义插件中:

add_action('pre_get_posts', 'filter_active_category_products');
function filter_active_category_products($query) {
    // 仅在后台产品列表的主查询中生效
    if (is_admin() && $query->is_main_query() && $query->get('post_type') === 'products') {
        // 获取所有标记为启用的分类ID
        $active_category_ids = get_terms([
            'taxonomy' => 'product_category', // 替换为你的产品分类taxonomy名称
            'meta_key' => 'category_active', // 替换为你的分类启用状态字段键
            'meta_value' => 'active', // 替换为你的启用状态值
            'fields' => 'ids',
            'hide_empty' => false // 即使分类下无产品也获取,避免漏判
        ]);

        if (!empty($active_category_ids)) {
            // 给查询添加分类过滤条件
            $query->set('tax_query', [
                [
                    'taxonomy' => 'product_category',
                    'field' => 'term_id',
                    'terms' => $active_category_ids,
                    'operator' => 'IN' // 只要关联一个启用分类就显示
                ]
            ]);
        } else {
            // 无启用分类时返回空列表
            $query->set('post__in', [0]);
        }
    }
}

必做调整项

  • 将product_category替换为你实际创建的产品分类的taxonomy名称;
  • 将category_active替换为你用来标记分类启用/禁用的自定义字段键;
  • 将active替换为你设置的启用状态对应的字段值。

特殊场景适配

如果需要产品关联的所有分类都必须是启用状态才显示,只需把tax_query中的operator参数从IN改成AND即可。

内容的提问来源于stack exchange,提问作者Full Stop

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 13:20:29