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

如何隐藏WooCommerce可变产品页面下拉菜单特定变体,仅显示低价有库存变体

WooCommerce可变产品页面隐藏特定变体的解决方案

要实现仅显示价格最低且库存>0的变体,你之前的方法无法生效,因为variation_is_visible是WooCommerce动态计算的属性,并非直接存储的元数据,直接修改变体对象的属性不会影响最终的可用变体列表。

正确的做法是使用WooCommerce的钩子来过滤可用变体,以下是完整代码:

add_filter( 'woocommerce_get_available_variations', 'filter_only_cheapest_in_stock_variation', 10, 2 );
function filter_only_cheapest_in_stock_variation( $available_variations, $product ) {
    // 仅针对可变产品
    if ( ! $product->is_type( 'variable' ) ) {
        return $available_variations;
    }

    // 筛选出库存>0的变体
    $in_stock_variations = array_filter( $available_variations, function( $variation ) {
        return $variation['is_in_stock'] === true;
    } );

    // 如果没有有库存的变体,直接返回
    if ( empty( $in_stock_variations ) ) {
        return $available_variations;
    }

    // 找到价格最低的变体
    usort( $in_stock_variations, function( $a, $b ) {
        return $a['display_price'] - $b['display_price'];
    } );
    $cheapest_variation = reset( $in_stock_variations );

    // 仅保留价格最低的那个变体
    return array( $cheapest_variation );
}

代码说明:

  • 钩子woocommerce_get_available_variations会在WooCommerce准备可用变体列表时触发,我们在这里过滤掉不符合要求的变体。
  • 先筛选出所有有库存的变体,再通过排序找到价格最低的那个,最后只保留这个变体返回。
  • 将代码添加到你的主题functions.php文件,或者自定义插件中,不要直接修改WooCommerce核心文件。

为什么之前的方法无效:

variation_is_visible是WooCommerce在生成$available_variations数组时,根据变体的库存、可见性设置等动态计算出来的临时属性,并非存储在数据库中的元数据。直接调用set_catalog_visibility或修改variation_is_visible元数据,不会影响这个动态生成的属性值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 02:52:30