Php 将父产品名称添加到WooCommerce中的每个购物车项目名称中

Php 将父产品名称添加到WooCommerce中的每个购物车项目名称中,php,wordpress,woocommerce,cart,product,Php,Wordpress,Woocommerce,Cart,Product,我想在购物车页面中显示我的分组产品的父产品名称和子产品名称(购物车项目)。 我正在链接产品->分组产品添加子产品下选择父产品数据作为分组产品 模板中的代码cart.php: echo apply_filters( 'woocommerce_cart_item_name', sprintf( '<a href="%s">%s</a>', esc_url( $product_permalink ), $_product->get_name() ), $cart_item

我想在购物车页面中显示我的分组产品的父产品名称和子产品名称(购物车项目)。 我正在链接产品->分组产品添加子产品下选择父产品数据作为分组产品

模板中的代码
cart.php

echo apply_filters( 'woocommerce_cart_item_name', sprintf( '<a href="%s">%s</a>', esc_url( $product_permalink ), $_product->get_name() ), $cart_item, $cart_item_key )
echo应用过滤器('woocommerce\u cart\u item\u name',sprintf('',esc\u url($product\u permalink),$\u product->get\u name()),$cart\u item,$cart\u item\u key)
这是我对每个购物车项目的要求:

父产品>子产品


于2018-02更新

无法以传统方式获取父分组产品名称或分组产品ID,因为它们不存在于购物车对象中

方法是当使用
woocommerce\u add\u cart\u item\u data
操作钩子中的自定义函数将产品添加到购物车时,在购物车对象中包含分组的产品id
(只有分组的产品id将作为购物车对象中的自定义数据添加)

然后,为了使用当前购物车项目名称显示父分组产品名称,我们使用另一个自定义函数,该函数挂接在
woocommerce\u cart\u item\u name
过滤器钩子中

请参阅此更新:

最后的代码是:

// Adding the grouped product ID custom hidden field data in Cart object
add_filter( 'woocommerce_add_cart_item_data', 'save_custom_fields_data_to_cart', 10, 2 );
function save_custom_fields_data_to_cart( $cart_item_data, $product_id ) {

    if( ! empty( $_REQUEST['add-to-cart'] ) && $product_id != $_REQUEST['add-to-cart'] ) {
        $cart_item_data['custom_data']['grouped_product_id'] = $_REQUEST['add-to-cart'];
        $data['grouped_product_id'] = $_REQUEST['add-to-cart'];

        // below statement make sure every add to cart action as unique line item
        $cart_item_data['custom_data']['unique_key'] = md5( microtime().rand() );
        WC()->session->set( 'custom_data', $data );
    }
    return $cart_item_data;
}


// Add the parent grouped product name to cart items names
add_filter( 'woocommerce_cart_item_name', 'custom_product_title_name', 10, 3 );
function custom_product_title_name( $cart_item_name, $cart_item, $cart_item_key ){
    // Only in cart and checkout pages
    if ( is_cart() || is_checkout() )
    {
        // The product object from cart item
        $product = $cart_item['data'];
        $product_permalink = $product->is_visible() ? $product->get_permalink( $cart_item ) : '';

        // The parent product name and data
        if( ! empty( $cart_item['custom_data']['grouped_product_id'] ) ){
            $group_prod_id = $cart_item['custom_data']['grouped_product_id'];
            $group_prod = wc_get_product($group_prod_id);
            if ( ! $group_prod->is_type( 'grouped' ) ) return $cart_item_name;
            $parent_product_name = $group_prod->get_name();
            $group_prod_permalink = $group_prod->is_visible() ? $group_prod->get_permalink() : '';

            if ( ! $product_permalink )
                return $parent_product_name . ' > ' . $product->get_name();
            else
                return sprintf( '<a href="%s">%s</a> > <a href="%s">%s</a>', esc_url( $group_prod_permalink ), $parent_product_name, esc_url( $product_permalink ), $product->get_name() );
        }
        else
            return $cart_item_name;
    }
    else
        return $cart_item_name;
}
//在购物车对象中添加分组的产品ID自定义隐藏字段数据
添加过滤器('woocommerce\u add\u cart\u item\u data','save\u custom\u fields\u data\u to\u cart',10,2);
功能保存\自定义\字段\数据\到\购物车($cart\项目\数据,$product\ id){
如果(!empty($\u请求['add-to-cart'])和&$product\u id!=$\u请求['add-to-cart']){
$cart_item_data['custom_data']['grouped_product_id']=$\u请求['add-to-cart'];
$data['grouped_product_id']=$_请求['add-to-cart'];
//下面的语句确保每个“添加到购物车”操作都是唯一的行项目
$cart_item_data['custom_data']['unique_key']=md5(microtime().rand());
WC()->session->set('custom_data',$data);
}
返回$cart\u item\u数据;
}
//将父分组产品名称添加到购物车项目名称
添加过滤器('woocommerce\u cart\u item\u name','custom\u product\u title\u name',10,3);
功能自定义商品标题名称($cart\u item\u name、$cart\u item、$cart\u item\u key){
//仅在购物车和结帐页面中
if(is_cart()| | is_checkout())
{
//购物车项目中的产品对象
$product=$cart_项目['data'];
$product\u permalink=$product->is\u visible()?$product->get\u permalink($cart\u item):“”;
//父产品名称和数据
如果(!empty($cart\u item['custom\u data']['grouped\u product\u id'])){
$group_prod_id=$cart_item['custom_data']['grouped_product_id'];
$group\U prod=wc\U get\U product($group\U prod\U id);
如果(!$group\U prod->是类型('GROUBLED'),则返回$cart\U item\U名称;
$parent_product_name=$group_prod->get_name();
$group\u prod\u permalink=$group\u prod->is\u visible()?$group\u prod->get\u permalink():'';
如果(!$product\U permalink)
返回$parent_product_name.'>'.$product->get_name();
其他的
返回sprintf('>',esc_url($group_prod_permalink),$parent_product_name,esc_url($product_permalink),$product->get_name());
}
其他的
返回$cart\u item\u name;
}
其他的
返回$cart\u item\u name;
}
代码位于活动子主题(或主题)的function.php文件或任何插件文件中

此代码经过测试,适用于WooCommerce版本3+

您将获得以下信息:

注意:分组的产品名称有自己的永久链接

@Asher新版本: