[编辑:它实际上是在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
我做错了什么?
我花了很长时间寻找答案,只是补充了我的答案,但这些答案都不适用于我。不管怎样-
我的解决方案是通过改变$变量来修改函数-
$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;
}
}
不要改变核心的任何东西。
该错误告诉您,您正试图调用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中使用了以下代码行: 在进行位置和名称排序时,缺货产品排在最后。但在进行价格排序时,缺货产品处于正常的顺序而不是持久的。 我怎样才能使缺货的产品在排序后的价格上保持持久呢?