在 WooCommerce 购物车中显示所有交叉销售商品

Posted

技术标签:

【中文标题】在 WooCommerce 购物车中显示所有交叉销售商品【英文标题】:Display ALL cross-sell items in WooCommerce cart 【发布时间】:2022-01-21 06:04:10 【问题描述】:

我试图始终显示我购物车中的所有交叉销售商品。

位于文件class-wc-cart.php 中的函数get_cross_sells() 如下所示:

/**
 * Gets cross sells based on the items in the cart.
 *
 * @return array cross_sells (item ids)
 */
public function get_cross_sells() 
    $cross_sells = array();
    $in_cart     = array();
    if ( ! $this->is_empty() ) 
        foreach ( $this->get_cart() as $cart_item_key => $values ) 
            if ( $values['quantity'] > 0 ) 
                $cross_sells = array_merge( $values['data']->get_cross_sell_ids(), $cross_sells );
                $in_cart[]   = $values['product_id'];
            
        
    
    $cross_sells = array_diff( $cross_sells, $in_cart );
    return apply_filters( 'woocommerce_cart_crosssell_ids', wp_parse_id_list( $cross_sells ), $this );

$cross_sells = array_diff( $cross_sells, $in_cart ); 行删除了购物车中的所有交叉销售商品。


这个“有点”可以,但这样我就必须在添加或删除交叉销售项目时对主题进行更改。

add_filter( 'woocommerce_cart_crosssell_ids', 'my_custom_cross_sells' );
function my_custom_cross_sells( $cross_sell_ids ) 
    $cross_sell_ids = [4782, 4777, 4776, 4783]; 
    return $cross_sell_ids;

我将如何从我的子主题中覆盖此功能以始终显示所有项目?

【问题讨论】:

【参考方案1】:

woocommerce_cart_crosssell_ids 过滤器挂钩将允许您完全重写 get_cross_sells() 函数。

因此,要在 WooCommerce 购物车中显示所有交叉销售商品,您将获得:

function filter_woocommerce_cart_crosssell_ids( $cross_sells, $cart ) 
    // Initialize
    $cross_sells_ids_in_cart = array();
    
    // Loop through cart items
    foreach ( $cart->get_cart() as $cart_item_key => $values ) 
        if ( $values['quantity'] > 0 ) 
            // Merge one or more arrays
            $cross_sells_ids_in_cart = array_merge( $values['data']->get_cross_sell_ids(), $cross_sells_ids_in_cart );
        
    
    
    // Cleans up an array, comma- or space-separated list of IDs
    $cross_sells = wp_parse_id_list( $cross_sells_ids_in_cart );

    return $cross_sells;

add_filter( 'woocommerce_cart_crosssell_ids', 'filter_woocommerce_cart_crosssell_ids', 10, 2 );

【讨论】:

以上是关于在 WooCommerce 购物车中显示所有交叉销售商品的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Woocommerce 购物车小部件中显示商品的总价?

WooCommerce:还在购物车项目上显示产品变体描述

Woocommerce:在购物车、订单确认和订单电子邮件中显示变体名称 [重复]

WooCommerce ACF 在购物车和结帐页面上显示自定义元数据

在 Woocommerce 购物车、结帐页面、订单和电子邮件通知中的产品标题上方显示品牌名称

仅在特定产品变体属性中显示Woocommerce购物车中的消息