繁体   English   中英

Woocommerce购物车中的“最小和步骤”数量和批发角色的单个产品页面

[英]Min and Steps quantity in Woocommerce cart and single product page for wholesale role

除购物车页面上的非批发用户外,我可以进行此工作。

要求:

  • 最少数量36
  • 间隔36
  • 适用于单一产品页面和购物车
  • current_user_can('wholesale')
  • has_term( 'mug', 'product_tag')

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

add_filter( 'woocommerce_quantity_input_args', 'jk_woocommerce_quantity_input_args', 10, 2 );
function jk_woocommerce_quantity_input_args( $args, $product ) {
    if ( is_cart() || is_checkout()  && has_term( 'mug', 'product_tag') && 
    current_user_can('wholesale') ) {
        $args['input_value'] = 36; // Start from this value (default = 1) 
        $args['min_value']   = 36; // Minimum value
        $args['step']        = 36; // Quantity steps
        return $args;
    } else {
        $args['input_value'] = 1; // Start from this value (default = 1) 
        $args['min_value']   = 1; // Minimum value
        $args['step']        = 1; // Quantity steps
        return $args;
    }
}

// Variations
add_filter( 'woocommerce_available_variation', 'jk_woocommerce_available_variation' );
function jk_woocommerce_available_variation( $args ) {
    if (  has_term( 'mug', 'product_tag') && 
    current_user_can('wholesale') ) {
        $args['input_value'] = 36; // Start from this value (default = 1) 
        $args['min_value']   = 36; // Min quantity (default = 1)
        $args['step']        = 36; // Increment/decrement by this value (default = 1)
        return $args;
    } else {
        $args['min_value']   = 1; // Minimum value
        $args['step']        = 1; // Quantity steps
        $args['input_value'] = 1; // Starting value (we only want to affect product pages, not cart)
        return $args;
    } 
}

更新:我已经测试了您的代码,并且存在一些故障和错误。

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

第二个功能'input_value'和'step'无效,因为它们在$args数组中不存在(请参见下面的官方代码段或此钩子的源代码) 有一些缺少的论点,例如$product

在这两种功能中,条件都有一些错误。 我已将条件is_checkout()替换为is_product()因为您要针对问题中提到的单个产品页面和购物车页面。

您应该检查并确保正确的批发用户角色信息是'wholesale' (例如,像这个问题一样,可能是'wholesale_customer'

您可以在此WooCommerce官方代码段上检查代码: 调整数量输入值

此修改后的代码现在也应该在购物车页面上起作用:

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;
}

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

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

似乎购物车页面中有错误。 即使您增加和更新简单和变动产品的数量,产品也会卡在36上…

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM