我已经定制了WooCommerce产品查询,以包含具有特定自定义字段值的产品,例如external_id = 1234或production_year = 2017.这符合预期,WooCommerce仅显示具有正确自定义字段值的产品 .

接下来,我想隐藏产品类别小部件中的空产品类别,因为我不想向用户显示空类别 . 产品查询仍使用自定义字段值来过滤掉任何不需要的产品 .

似乎解决方案是添加

$list_args['hide_empty'] = 1;

到woocommerce_product_categories_widget_args过滤器钩子 . 但遗憾的是,即使空的产品类别是空的,它们仍会显示出来 . 似乎小部件不使用相同的产品查询来检查类别是否包含任何产品 . 因此小部件仍然显示类别 .

那么如何隐藏产品查询没有结果的产品类别呢?

更新:

自定义查询代码:

public function vehicle_model_query($q)
{
    $id = self::get_current_vehicle_model_id();

    if (isset($id) && !empty($id)) {

        $meta_query = $q->get('meta_query');

        $meta_query[] = array(
            array(
                'key' => 'wcwb_product_vehicle_models',
                'value' => $id
            )
        );

        $q->set('meta_query', $meta_query);
    }
}