Woocommerce购物车中的最小和步数以及批发角色的单个产品页面

时间:2018-01-13 00:20:30

标签: php wordpress woocommerce cart product

除了购物车页面上的非批发用户外,我的工作正常。

要求:

  • 最小数量36
  • 间隔为36
  • 适用于单品页面&购物车
  • at seminair.SendMail.send(SendMail.java:55) at seminair.UserInfo.getDefaultUserInJSON(UserInfo.java:18)
  • current_user_can('wholesale')

这应该可以,但是,当我需要它来影响批发用户时,它会将购物车中的规则应用于所有用户。

has_term( 'mug', 'product_tag')

1 个答案:

答案 0 :(得分:2)

更新:我已经测试了您的代码,并且有一些陈词滥调和错误。

第一个函数似乎有效,但存在一些错误,建议不要对用户角色使用current_user_can()条件函数。您不需要else中的所有属性键,因为大多数默认值已经 1 ......

第二个功能'input_value'和“步骤”没有任何效果,因为 $args 数组中不存在(请参阅下面的官方代码段或此挂钩的源代码)。有一些缺少的参数,如$product

在两个函数中都存在一些错误。我已将is_checkout()替换为is_product(),因为您定位的是单个产品页面和购物车页面。正如您在问题中提到的那样。

  

您应该检查并确保正确的批发用户角色slug是'wholesale' (例如'wholesale_customer'} 中可能是add_filter( 'woocommerce_quantity_input_args', 'custom_quantity_input_args', 10, 2 ); function custom_quantity_input_args( $args, $product ) { $user = wp_get_current_user(); // Get current WP_User if ( ! ( is_cart() || is_product() ) ) return $args; if ( ! in_array( 'wholesale', $user->roles ) ) return $args; $product_id = $product->is_type('variation') ? $product->get_parent_id() : $product->get_id(); if ( ! has_term( 'mug', 'product_tag', $product_id ) ) return $args; // $args['input_value'] = 36; // Start from this value (default = 1) $args['min_value'] = 36; // Min value (default = 0) $args['step'] = 36; // Quantity steps (default = 1) return $args; } add_filter( 'woocommerce_available_variation', 'custom_qty_available_variation_args', 10, 3 ); function custom_qty_available_variation_args( $data, $product, $variation ) { $user = wp_get_current_user(); // Get current WP_User if ( ! ( is_cart() || is_product() ) ) return $data; if ( ! in_array( 'wholesale', $user->roles ) ) return $data; $product_id = $product->is_type('variation') ? $product->get_parent_id() : $product->get_id(); if ( ! has_term( 'mug', 'product_tag', $product_id ) ) return $data; $data['min_qty'] = 36; // Minimum value (default = 1) $args['input_value'] = 36; // Start from this value (default = 1) $args['min_value'] = 36; // Min value (default = 0) $args['step'] = 36; // Quantity steps (default = 1) return $data; }

您可以查看此官方WooCommerce代码段中的代码:this question ...

此修改后的代码现在也可以在购物车页面上使用:

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    collectionView.touchesBegan(touches, with: event)
}
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
    collectionView.touchesEnded(touches, with: event)
}
override func touchesCancelled(_ touches: Set<UITouch>?, with event: UIEvent?) {
    collectionView.touchesCancelled(touches!, with: event)
}
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
    collectionView.touchesMoved(touches, with: event)
}

代码放在活动子主题(或活动主题)的function.php文件中。

经过测试,几乎正常工作。

  

似乎购物车页面中存在错误。即使您增加和更新简单产品和变体产品的数量,产品也会被困在36上......