- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
[编辑:在 functions.php 中添加代码并省略代码 WC 文件中的更改时,它实际上起作用了。重要提示:它仅在 ONE 属性存在时有效。但是,当有 2 个属性(例如尺寸和颜色)时,它就不起作用了,因为它不再是关于缺货的变体,而是关于变体组合,事实上 WooCommerce 在这种常见情况下是完全无能为力的。请注意,目前似乎也没有可用的插件来解决这个非常明显的问题。太好了。]
自 2.0 以来,WooCommerce 要么隐藏缺货产品变体(这是一个明显的问题,因为客户无法知道它们的存在),要么将它们显示为有货变体(这也是一个问题,因为客户随后会系统地感到失望点击购买后发现变体缺货)。
This thread包括将缺货产品变体变灰的解决方案:
大概要添加到functions.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;
}
在 plugins/woocommerce/includes/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
我做错了什么?
最佳答案
不要更改核心中的任何内容。
该错误告诉您您正在尝试调用 3 个变量作为函数的参数,但操作 Hook 仅传递 2 个,因此缺少第三个。这是因为您修改了 core 以删除第三个参数。
还要注意
// 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_hide_out_of_stock_items
选项,应该会自动处理此问题。
更新
我通读了您提到的 github 问题。 franticpsyx 所做的提交已被略微修改,因此 franticpsyx posted 的功能没有像他最初发布的那样工作,以及为什么你会遇到变量号错误。在 WooCommerce 源中 woocommerce_variation_is_active
现在只有 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 变灰的,因为在后端这样做需要大量的 mods 才能成为核心。
关于woocommerce - 将缺货的产品变体变灰(WooCommerce),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29879413/
COW 不是奶牛,是 Copy-On-Write 的缩写,这是一种是复制但也不完全是复制的技术。 一般来说复制就是创建出完全相同的两份,两份是独立的: 但是,有的时候复制这件事没多大必要
我是一名优秀的程序员,十分优秀!