我正在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相关问答推荐

在特定日期之间使用特定的元密钥销售产品

WooCommerce:在 checkout 审核单和发票中显示定制产品数据

在WooCommerce我的帐户部分添加带有自定义链接的自定义菜单项

为什么在我的PHP联系人脚本中开机自检后出现未定义变量错误?

Sylius php -如何将购物车传递到小枝模板(Sylius模板事件)

当主页和帖子的缩略图相同时,如何减少主页和帖子的缩略图

添加并显示单价字段到WooCommerce产品变化

我有一个显示记录的表格,每行在最右边有两个按钮.如何才能以正确的顺序获得表的值?

如何在Laravel Model中自定义多个日期属性的日期格式?

在PHP项目中安装OpenAI PHP SDK时出现问题

PHP 8.2 弃用日志(log)存储在 Laravel 10.22.0 中的哪里?

奇怪的 preg_match_all() 行为

如何判断php中wordpress路径之外的文件夹是否存在?

使用 Spomky Labs JWT 框架中的 verifyWithKey 验证 id_token JWT 的签名需要 30 秒以上

添加产品标签以通过 WooCommerce 邮箱通知订购商品

如何使用相同的变量使函数参数对于数组和字符串都是可选的

如何将子查询结果添加到学说 2 中主查询的末尾?

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

如何在 php/laravel 中获取元素在数组中的位置

成员变量不接受带有元素的数组