返回

WooCommerce 如何为可变商品设置批发价?

php

如何为 WooCommerce 可变商品设置批发价?

在 WooCommerce 中,针对不同用户群体设置差异化价格是商家运营中的常见需求。例如,给予批发客户比普通客户更优惠的批发价。然而, WooCommerce 默认功能难以直接实现可变商品的批发价设置。

本文将提供一种通过代码为 WooCommerce 可变商品添加批发价功能的解决方案,并确保不同用户角色看到对应的价格。

挑战分析

为可变商品设置批发价并实现用户角色差异化定价主要面临以下挑战:

  • 可变商品价格管理的复杂性 : WooCommerce 默认的批发插件或代码片段通常只针对简单商品有效,无法直接应用于结构更复杂的可变商品。
  • 用户角色与价格显示的关联 : 如何确保只有特定用户角色(例如“批发客户”)才能看到批发价,而普通客户看到的是正常零售价。

代码实现

为了解决上述问题,我们需要结合 WooCommerce 的钩子函数和自定义字段,具体步骤如下:

1. 添加自定义字段

首先,我们需要为可变商品添加一个自定义字段,用于存储每个变体的批发价。

add_action( 'woocommerce_product_after_variable_attributes', 'add_wholesale_price_field_to_variations', 10, 3 );

function add_wholesale_price_field_to_variations( $loop, $variation_data, $variation ) {
    woocommerce_wp_text_input( 
        array( 
            'id'          => 'wholesaler_price[' . $variation->ID . ']', 
            'label'       => __( 'Wholesale Price', 'woocommerce' ), 
            'placeholder' => '0',
            'desc_tip'    => true,
            'description' => __( 'Enter the wholesale price for this variation.', 'woocommerce' ),
            'value'       => get_post_meta( $variation->ID, 'wholesaler_price', true ),
            'custom_attributes' => array(
                'step' => 'any',
            ),
        )
    );
}

这段代码会在可变商品编辑页面的每个变体选项下方添加一个名为“Wholesale Price”的文本框,用于输入该变体的批发价。

2. 保存自定义字段

添加自定义字段后,需要在保存商品时将输入的批发价保存到数据库中。

add_action( 'woocommerce_save_product_variation', 'save_wholesale_price_field_variations', 10, 2 );

function save_wholesale_price_field_variations( $variation_id, $i ) {
    $wholesale_price = $_POST['wholesaler_price'][$variation_id];
    if ( ! empty( $wholesale_price ) ) {
        update_post_meta( $variation_id, 'wholesaler_price', esc_attr( $wholesale_price ) );
    }
}

这段代码会在保存可变商品时将每个变体的批发价保存到数据库对应的 wholesaler_price 自定义字段中。

3. 根据用户角色显示价格

最后,我们需要根据用户角色来显示不同的价格。

add_filter( 'woocommerce_product_get_price', 'custom_price_by_user_role', 10, 2 );

function custom_price_by_user_role( $price, $product ) {
    if ( current_user_can( 'wholesaler' ) ) { // 检查用户是否为批发客户
        if ( $product->is_type( 'variable' ) ) { // 检查是否为可变商品
            $variation_id = get_queried_object_id(); // 获取当前变体的 ID
            $wholesale_price = get_post_meta( $variation_id, 'wholesaler_price', true );
            if ( ! empty( $wholesale_price ) ) {
                return $wholesale_price;
            }
        } else {
            $wholesale_price = get_post_meta( $product->get_id(), 'wholesaler_price', true );
            if ( ! empty( $wholesale_price ) ) {
                return $wholesale_price;
            }
        }
    }
    return $price; // 如果用户不是批发客户,则返回默认价格
}

这段代码会检查当前用户是否为“wholesaler”角色(即批发客户)。如果是,则会获取当前商品(包括变体)的批发价,并将其作为商品价格返回;否则,返回默认价格。

常见问题解答

  1. 如何创建“wholesaler”用户角色?

    可以使用用户角色管理插件,例如“User Role Editor”,创建名为"wholesaler"的新角色,并根据需要配置其权限。

  2. 如何将用户添加到“wholesaler”角色?

    在 WordPress 后台的“用户”管理页面,编辑目标用户,在“角色”部分选择“wholesaler”并保存即可。

  3. 代码应该添加到哪个文件中?

    可以将代码添加到当前主题的 functions.php 文件中,或者创建一个自定义插件来存放代码。

  4. 这段代码是否适用于所有 WooCommerce 主题?

    这段代码使用了 WooCommerce 的核心钩子函数和 API,理论上适用于所有 WooCommerce 主题。但建议在测试环境中进行充分测试,确保代码与您的主题兼容。

  5. 如何进一步扩展此功能?

    可以根据实际需求对代码进行扩展,例如:

    • 设置不同批发用户角色的折扣力度。
    • 根据购买数量设置阶梯批发价。
    • 在商品页面上显示批发价和零售价,并突出显示折扣信息。

通过以上步骤,我们成功地为 WooCommerce 可变商品添加了批发价功能,并实现了根据用户角色显示不同价格。这段代码提供了一个基本的框架,您可以根据自己的实际需求进行修改和扩展。