我正在try 创建一个自定义的WooCommerce短码(在短码中有一个‘产品id’属性),它将显示客户当前在其购物车中拥有的该特定项目的当前数量.

我有一个很好的开始,我的短码对于单一/简单的产品可以正确显示,但当涉及到具有多种变体的产品时,就会有一个问题.我想用短码来显示母公司产品的总数;没有必要显示每个变种的数量.

例如,如果客户的购物车具有:

  • 产品-小型(购物车中的x2)
  • 产品-中等(购物车中的x1)
  • 产品-大型(购物车中的x3)

我希望短码显示为6.

我想我可以通过使用WC()->cart->get_cart()并确保使用$cart_item['product_id']而不是$cart_item['variation_id']来做到这一点,但尽管我使用了'product id'并且shortcode属性是父产品的id,但它只显示最近添加到购物车中的任何变化的购物车数量.

你有什么 idea ,我可以调整它,以显示所有变化下的父产品的购物车总和?

以下是我到目前为止拥有的代码:

 if( !function_exists('in_cart_product_quantity') ) {
    function in_cart_product_quantity( $atts ) {

        $atts = shortcode_atts(array('id' => ''), $atts, 'cart_qty_badge');
        if( empty($atts['id'])) return; 

        if ( WC()->cart ) { 
           $qty = 0; 
            foreach (WC()->cart->get_cart() as $cart_item) {
                if($cart_item['product_id'] == $atts['id']) {
                    $qty =  $cart_item['quantity'];
                   
                }
            }
            return $qty;
        }
        return;
    }
    add_shortcode( 'cart_qty_badge', 'in_cart_product_quantity' );
}

推荐答案

当购物车中的特定变量产品有多个变体时,使用以下代码可以解决您的问题:

if( ! function_exists('get_product_quantity_in_cart') ) {
    function get_product_quantity_in_cart( $atts ) {
        // Extract shortcode attributes
        extract( shortcode_atts( array(
            'id' => '',
        ), $atts, 'cart_qty_badge' ) );
        
        if( empty($id) || WC()->cart->is_empty() ) return; 

        $total_qty = 0; 
        
        foreach ( WC()->cart->get_cart() as $cart_item ) {
            if( $cart_item['product_id'] == $id ) {
                $total_qty += $cart_item['quantity'];
            }
        }
        return $total_qty > 0 ? $total_qty : '';
    }
    add_shortcode( 'cart_qty_badge', 'get_product_quantity_in_cart' );
}

应该能行得通.

Php相关问答推荐

Symfony Monolog:使用多个格式化程序

如何使用PHP停止foreach循环中的重复项?

如何在数据库中添加注册表单中的动态新行?

如何使用`preg_replace`删除重复的空格字符

PHP中冒号的奇怪用例

PHP MySQL求和子树并与父树累加

这是在可召回的背景下吗?

筛选器具有多个查询之一

在PHP 8.2 Gloogle云引擎上加载大型php文件速度缓慢

如何使用索引加速和优化MySQL搜索

在WooCommercestore 页面上显示库存产品属性的值

Laravel 10.x在到达控制器之前将查询参数强制转换为正确的类型

在具有Angular 的 Laravel 应用程序中,不显示图像

服务器升级到新的mysql版本8.0.34后查询错误

如果在 APIPlatform 3.1 中的同一资源上使用处理器,Messenger 将无法工作

如何更新 Laravel Eloquent 列强制转换为集合

Composer自动加载器重复了子类的类文件路径

symfony/notifier + twig/inky-extra 在 dunglas/symfony-docker 中缺少 ext-xsl.

正则表达式抓取递归括号的内容

使用 GROUP_CONCAT 规范化/转置来自查询的数据