当前位置: 首页 > 知识库问答 >
问题:

灰色显示缺货产品变化(WooCommerce)

蔺劲
2023-03-14

[编辑:它实际上是在functions.php中添加代码并省略代码WC文件中的更改时工作的。重要提示:它只在ONE属性存在时起作用。然而,当有2个属性(大小

由于2.0 WooCommerce要么隐藏缺货的产品变体(一个明显的问题,因为客户没有办法知道它们的存在),要么将它们显示为库存变体(也是一个问题,因为客户会系统地失望地发现变体是缺货的-点击购买后的股票)。

线程包括一个灰色解决方案,以消除缺货的产品变化:

可能要添加到函数中。php

add_filter( 'woocommerce_variation_is_active', 'grey_out_variations_when_out_of_stock', 10, 3 );

function grey_out_variations_when_out_of_stock( $grey_out, $variation_id, $id ) {

    $variation = get_product( $variation_id );

    if ( ! $variation->is_in_stock() )
        return false;

    return true;
}

要做的插件/wooCommerce/包括/class-wc-product-variation.php

更改:

return apply_filters( 'woocommerce_variation_is_active', true, $this->variation_id, $this->id );

致:

return apply_filters( 'woocommerce_variation_is_active', true, $this );

也改变了:

return apply_filters( 'woocommerce_variation_is_visible', $visible, $this->variation_id, $this->id );

致:

return apply_filters( 'woocommerce_variation_is_visible', $visible, $this->variation_id, $this->id, $this );

然而,尽管据说它是有效的,在我的情况下,缺货的变化与其他变化显示相同,我也有一个警告:

Warning: Missing argument 3 for grey_out_variations_when_out_of_stock() in ...\functions.php on line 600

我做错了什么?

共有2个答案

索和璧
2023-03-14

我花了很长时间寻找答案,只是补充了我的答案,但这些答案都不适用于我。不管怎样-

我的解决方案是通过改变$变量来修改函数-

$variation-

add_filter( 'woocommerce_variation_is_active', 'my_jazzy_function', 10, 2 );

function my_jazzy_function( $active, $variation ) {

    $var_stock_count = $variation->get_stock_quantity();

    // if there are 5 or less, disable the variant, could always just set to 0.
    if( $var_stock_count <= 6 ) {
       return false;
    }
    else {
       return true;
    }
}
暴英达
2023-03-14

不要改变核心的任何东西。

该错误告诉您,您正试图调用3个变量作为函数的参数,但操作挂钩仅传递2,因此缺少第三个变量。这是因为您修改了core以删除第3个参数。

还要注意

   // Hide out of stock variations if 'Hide out of stock items from the catalog' is checked
    if ( empty( $variation->variation_id ) || ( 'yes' === get_option( 'woocommerce_hide_out_of_stock_items' ) && ! $variation->is_in_stock() ) ) {
        continue;
    }

可以在变量产品类中找到。如果在woocommerce设置中设置了woocommerce\u hide\u out\u of\u stock\u items选项,则应自动处理此问题。

更新

我通读了您提到的github问题。franticpsyx所做的提交后来被稍微修改了一下,因此franticpsyx发布的函数不能像他最初发布的那样工作,以及为什么会出现变量号错误。在WooCommerce源代码中,WooCommerce\u变体\u处于活动状态现在只有2个变量传递给它。

public function variation_is_active() {
    return apply_filters( 'woocommerce_variation_is_active', true, $this );
}

因此,我们需要修改代码以使用正在传递的变量:

add_filter( 'woocommerce_variation_is_active', 'grey_out_variations_when_out_of_stock', 10, 2 );

function grey_out_variations_when_out_of_stock( $grey_out, $variation ) {

    if ( ! $variation->is_in_stock() )
        return false;

    return true;
}

这对我有用。我很确定在前端,项目通过Javascript变灰,因为在后端这样做需要大量的mod来核心。

 类似资料:
  • 我有一个问题与Magento(CE1.9.0.1)和缺货产品显示在类别页面。配置看起来很好,我已经刷新了缓存,索引也是最新的。有一个配置,其中有一个简单的产品分配。可配置产品设置为管理库存,简单产品也设置为管理库存,数量为0,缺货。我有同样的设置在另一个Magento网站,当一个简单的产品被设置为0和缺货,可配置的产品将成为缺货,并不显示在类别上。 null null 简单产品(截图) 所有内容都

  • 与随机显示产品的客户网站存在问题 “此产品目前缺货且不可用。” 问题是我们没有打开库存跟踪,所有的产品都应该一直有库存。 当我进入WordPress管理员并单击产品的更新按钮(不做任何更改)时,消息就会消失,“添加到购物车”按钮会按原样显示。不幸的是,这个问题在将来会在这些项目上重复出现,为了解决这个问题,我必须再次更新产品(同时在WooCommerce设置中单击update可以暂时解决这个问题)

  • 在Woocommerce中,我试图使一个定制的div容器在可变产品的变体缺货时可见,但在缺货时可用。

  • 我想在单产品页面上显示运输类,在从可变产品中选择一个产品之后。例如:我有一辆自行车有三种颜色(红、蓝、绿): 自行车红有航运类“免费送货” 蓝色自行车的运输类别为“额外交付” 绿色自行车的运输等级为“正常交付” 我感谢你的任何想法。

  • 所以我的木业商店发生了一件奇怪的事情。 现在,当一个单一的产品(没有变种)缺货,“数量”和“添加到购物车”按钮消失-这是我想要的。上面只显示“缺货”的标签。

  • 我使用的是Magento 1.7.0.2,我在/app/code/core/mage/catalog/block/product/list.php中使用了以下代码行: 在进行位置和名称排序时,缺货产品排在最后。但在进行价格排序时,缺货产品处于正常的顺序而不是持久的。 我怎样才能使缺货的产品在排序后的价格上保持持久呢?