在Woocommerce

时间:2018-06-18 12:48:24

标签: php wordpress woocommerce product price

我正在WooCommerce建立一个销售医用手套的网上商店。它们按单位,箱子或托盘出售。当您通过盒子或托盘购买时,您的单价会降低。

我已经玩了一段时间,但我似乎无法按照我想要的方式获得配置。

首先让我举一个例子 产品A:
单价:€1,90 购买盒子时的单价:1,76欧元(120个单位) 购买托盘时的单价:1,63欧元(2880单位)。

我想要的是以下内容:
- 在档案页面上,它应显示:从€1,63 - 在产品页面上,用户可以选择每单位/箱/托盘购买 - 根据选择,价格应自动计算。因此,如果用户选择1个托盘,价格应为2880 * 1,63 = 4694,40。或者,如果用户选择2个托盘,价格应为(2880 * 1,63)* 2

我一直在尝试最小的最大数量。我已在变体选项卡中输入单价并添加了最小数量和步骤。例如托盘最小2880单位和2880步。基本上它可以工作但是...我认为如果他们在订单中看到2880作为数量而不是仅仅1个托盘,那么客户会感到困惑。

其他可能性是,如果我直接将总价格添加到变化标签,那么托盘的价格为4694,40欧元。这也有效,但是......在它显示的存档页面上从€1,90起。因此他们不会直接看到他们可以从1,63购买单位,如果他们每托盘购买。

我考虑使用测量价格计算器,但这些插件只能用于体积和重量等测量,而不是数量。

任何人都有这方面的经验和可能的解决方案吗? 任何帮助将受到高度赞赏。谢谢!

1 个答案:

答案 0 :(得分:1)

您应该使用可变产品并为每种产品设置3种变体:

  • 每单位
  • 每箱
  • 每个托盘

1)在后端:仅对于可变产品,我们为" Min单价"添加自定义设置字段。要显示。

enter image description here

2)在前端:仅对于可变产品,我们会显示自定义"最低单价"在商店,档案馆和单品页面。

enter image description here

代码:

// Backend: Add and display a custom field for variable products
add_action('woocommerce_product_options_general_product_data', 'add_custom_product_general_field');
function add_custom_product_general_field()
{
    global $post;

    echo '<div class="options_group hide_if_simple hide_if_external">';

    woocommerce_wp_text_input(array(
        'id'          => '_min_unit_price',
        'label'       => __('Min Unit price', 'woocommerce') ,
        'placeholder' => '',
        'description' => __('Enter the minimum unit price here.', 'woocommerce'),
        'desc_tip'    => 'true',
    ));

    echo '</div>';
}

// Backend: Save the custom field value for variable products
add_action('woocommerce_process_product_meta', 'save_custom_product_general_field');
function save_custom_product_general_field($post_id)
{
    if (isset($_POST['_min_unit_price'])){
        $min_unit_price = sanitize_text_field($_POST['_min_unit_price']);
        // Cleaning the min unit price for float numbers in PHP
        $min_unit_price = str_replace(array(',', ' '), array('.',''), $min_unit_price);
        // Save
        update_post_meta($post_id, '_min_unit_price', $min_unit_price);
    }
}

// Frontend: Display the min price with "From" prefix label for variable products
add_filter( 'woocommerce_variable_price_html', 'custom_min_unit_variable_price_html', 30, 2 );
function custom_min_unit_variable_price_html( $price, $product ) {
    $min_unit_price = get_post_meta( $product->get_id(), '_min_unit_price', true );

    if( $min_unit_price > 0 ){
        $min_price_html = wc_price( wc_get_price_to_display( $product, array( 'price' => $min_unit_price ) ) );
        $price = sprintf( __( 'From %1$s', 'woocommerce' ), $min_price_html );
    }

    return $price;
}

代码放在活动子主题(或活动主题)的function.php文件中。经过测试和工作。