dra*_*035 1 product woocommerce
[编辑:它实际上在functions.php中添加代码并省略代码WC文件中的更改时有效.重要提示:它仅在存在ONE属性时有效.然而,当有2个属性(例如大小和颜色)时,它不起作用,因为它不再是缺货变化,而是变化组合,实际上WooCommerce在这种常见情况下完全无能为力.请注意,目前似乎没有可用的插件来解决这个非常明显的问题.大.]
由于2.0 WooCommerce要么隐藏缺货产品变量(一个明显的问题,因为客户无法知道它们的存在),或者将它们显示为库存变化(也是一个问题,因为客户随后系统地失望地发现单击购买后变化缺货).
该主题包括一个解决缺货产品变化的解决方案:
据推测可以添加到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;
}
Run Code Online (Sandbox Code Playgroud)
要完成plugins/woocommerce/includes/class-wc-product-variation.php:
更改:
return apply_filters( 'woocommerce_variation_is_active', true, $this->variation_id, $this->id );
Run Code Online (Sandbox Code Playgroud)
至:
return apply_filters( 'woocommerce_variation_is_active', true, $this );
Run Code Online (Sandbox Code Playgroud)
也改变:
return apply_filters( 'woocommerce_variation_is_visible', $visible, $this->variation_id, $this->id );
Run Code Online (Sandbox Code Playgroud)
至:
return apply_filters( 'woocommerce_variation_is_visible', $visible, $this->variation_id, $this->id, $this );
Run Code Online (Sandbox Code Playgroud)
然而,虽然它据报道有效,但在我的情况下,缺货的变化显示与其他变量相同,我也有一个警告:
Warning: Missing argument 3 for grey_out_variations_when_out_of_stock() in ...\functions.php on line 600
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
不要改变核心内容.
该错误告诉您正在尝试将3个变量作为函数的参数调用,但操作挂钩仅传递2,因此缺少第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;
}
Run Code Online (Sandbox Code Playgroud)
可以在变量产品类中找到.如果woocommerce_hide_out_of_stock_items在WooCommerce设置中设置了应自动处理此选项的选项.
UPDATE
我通读了你引用的github问题.由franticpsyx提交的提交后来被略微修改,因此franticpsyx发布的功能不起作用,因为他最初在那里发布它以及为什么你遇到变量数错误.在WooCommerce源中,woocommerce_variation_is_active现在只传递了2个变量.
public function variation_is_active() {
return apply_filters( 'woocommerce_variation_is_active', true, $this );
}
Run Code Online (Sandbox Code Playgroud)
所以我们需要修改代码以使用传递的变量:
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;
}
Run Code Online (Sandbox Code Playgroud)
这对我有用.我很确定在前端项目是通过Javascript灰显的,因为在后端这样做需要很多mods来核心.
| 归档时间: |
|
| 查看次数: |
8086 次 |
| 最近记录: |