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



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

位于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;
}

如何从我的子主题覆盖此函数以始终显示所有项目?

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 );

最新更新