Getting the list of cross-sells for a WooCommerce product is actually super easy (yes, it’s one line of PHP). But what if you need to “calculate” the list of cross-sells for an entire order, made of different products?
In this short tutorial for developers we’ll see both: how to get the cross-sell IDs for a product, and how to get the entire range of cross-sells based on what’s been purchased in a given order. Enjoy!
PHP Snippet 1: Get Product Cross-Sells
/**
* @snippet Get Product Cross-Sell IDs
* @how-to businessbloomer.com/woocommerce-customization
* @author Rodolfo Melogli, Business Bloomer
* @compatible WooCommerce 7
* @community https://businessbloomer.com/club/
*/
$product->get_cross_sell_ids();
PHP Snippet 2: Get Order Cross-Sells
This is as easy as looping through the order items, adding the cross sell IDs to an array, and remove the duplicates from the final array.
/**
* @snippet Get Order Cross-Sell IDs
* @how-to businessbloomer.com/woocommerce-customization
* @author Rodolfo Melogli, Business Bloomer
* @compatible WooCommerce 7
* @community https://businessbloomer.com/club/
*/
$items = $order->get_items();
$cross_sells = array();
foreach ( $items as $item ) {
$cross_sells = array_merge( $item->get_product()->get_cross_sell_ids(), $cross_sells );
}
$cross_sells = array_unique( $cross_sells );