我找到了以下代码,该代码根据WooCommerce单个产品的数量计算分类总数:

add_action( 'woocommerce_after_add_to_cart_button', 'bbloomer_product_price_recalculate' );
function bbloomer_product_price_recalculate() {
   global $product;
   echo '<div id="subtot" style="display:inline-block;">Total: <span></span></div>';
   $price = $product->get_price();
   $currency = get_woocommerce_currency_symbol();
   wc_enqueue_js( "     
      $('[name=quantity]').on('input change', function() { 
         var qty = $(this).val();
         var price = '" . esc_js( $price ) . "';
         var price_string = (price*qty).toFixed(2);
         $('#subtot > span').html('" . esc_js( $currency ) . "'+price_string);
      }).change();
   " );
}

然而,它仅适用于简单产品,而不适用于可变产品上的产品变体.我需要帮助修改代码,以准确计算变体产品的汇总.

下面,我对代码进行了一些更改,以处理可变产品的选定产品变体:

add_action( 'woocommerce_after_add_to_cart_button', 'bbloomer_product_price_recalculate' );
function bbloomer_product_price_recalculate() {
   global $product;

   // Check if the product is variable or not
   if ( $product->is_type( 'variable' ) ) {
       // For variable products, get the default variation price
       $default_variation = $product->get_default_attributes();
       $variation_id = $product->get_matching_variation( $default_variation );
       $variation = wc_get_product( $variation_id );
       $price = $variation->get_price();
   } else {
       // For simple products, get the regular price
       $price = $product->get_price();
   }

   echo '<div id="subtot" style="display:inline-block;">Total: <span></span></div>';
   $currency = get_woocommerce_currency_symbol();
   wc_enqueue_js( "     
      $('[name=quantity]').on('input change', function() { 
         var qty = $(this).val();
         var price = '" . esc_js( $price ) . "';
         var price_string = (price*qty).toFixed(2);
         $('#subtot > span').html('" . esc_js( $currency ) . "'+price_string);
      }).change();
   " );
}

但它不起作用.如何使其也适用于可变产品?

推荐答案

要显示简单产品和可变产品的格式化产品分类汇总,请使用以下内容:

add_action( 'woocommerce_after_add_to_cart_button', 'display_product_subtotal_html' );
function display_product_subtotal_html() {
    global $product;

    $price    = wc_get_price_to_display( $product );
    $currency = get_woocommerce_currency_symbol();
    $variable = $product->is_type('variable');

    echo '<div id="subtot" style="display:inline-block;">Total: <span></span></div>';

    if ( $product->is_type('variable') )
    wc_enqueue_js("var qty = 1, price = 0, subtotal = 0;  
    $('[name=quantity]').on('input change', function() { 
        qty = $(this).val();
        if ( price > 0 ) {
            subtotal = price*qty;
            $('#subtot > span').html('".esc_js($currency)." '+subtotal.toFixed(2));
        } else {
            $('#subtot > span').html('');
        }
    });

    $('form.variations_form').on('show_variation', function(event, data){
        price = data.display_price;
        subtotal = price*qty;
        $('#subtot > span').html('".esc_js($currency)." '+subtotal.toFixed(2));
    }).on('hide_variation', function(){
        $('#subtot > span').html('');
    });");
    else
    wc_enqueue_js("const price = ".floatval($price).";
    var subtotal = $('[name=quantity]').val()*price;
    $('#subtot > span').html('".esc_js($currency)." '+subtotal.toFixed(2));

    $('[name=quantity]').on('input change', function() { 
        subtotal = $(this).val()*price;
        $('#subtot > span').html('".esc_js($currency)." '+subtotal.toFixed(2));
    });");
}

代码保存在您的子主题的functions.php文件中(或插件中).经过测试并工作.

Php相关问答推荐

使用PHP和WebSockets或SSE实现实时通知

PHP中的圆生成器在国际日期变更线上失败

如何修复条带元素中的错误&&客户端_机密&

Laravel关系-为用户获取属于组织的所有团队

Php解压缩deflate64

如何将WooCommerce产品属性术语名称显示为链接术语?

由于某种原因,FILE_GET_CONTENTS从一天到另一天停止工作,并在PHP 7.2.34中返回一条&http/1.1 406不能接受&的错误

如何在PHP中出现弃用警告时触发错误?

只收取WooCommerce中最高的运费

shell_exec运行大型数据处理

Regex|PHP捕获json字符串中的每个非法双引号

htaccess 配置提供静态文件和动态文件

在 WooCommerce 中何时何地执行 woocommerce_order_status_completed_notification 挂钩?

将产品数量、名称和结帐链接添加到 WooCommerce 添加到购物车消息

Firefox 115 会话行为:为什么页面无法找到要加载的现有会话 ID?

从插件更改主题功能,function_exists 不起作用

我的功能以舒适的方式显示数组 struct

Laravel Docker 几个数据库

Laravel Websockets 错误:(WebSocket 在建立连接之前关闭)

Eloquent 的模型更新了它应该 laravel php 的更多行