Напомню, кросселлы — это то, что идет в дополнение к товару (с этим товаром покупают), апселлы — похожие товары (аналогичный, но подороже например). Стояла задача вывести кросселлы не на странице корзины, как это стандартно происходит, а на странице карточки товара.
Понятно, что кросселлы предварительно нужно добавить в админке в карточке товара во вкладке «Сопутствующие».
Нашла такое решение.
Создаем свою функцию.
function nogtishop_crossels( $limit = 2, $columns = 2, $orderby = 'rand', $order = 'desc') {
global $product;
$cross_sells = array_filter( array_map( 'wc_get_product', $product->get_cross_sell_ids() ), 'wc_products_array_filter_visible' );
wc_set_loop_prop( 'name', 'cross-sells' );
wc_set_loop_prop( 'columns', apply_filters( 'woocommerce_cross_sells_columns', $columns ) );
// Handle orderby and limit results.
$orderby = apply_filters( 'woocommerce_cross_sells_orderby', $orderby );
$order = apply_filters( 'woocommerce_cross_sells_order', $order );
$cross_sells = wc_products_array_orderby( $cross_sells, $orderby, $order );
$limit = apply_filters( 'woocommerce_cross_sells_total', $limit );
$cross_sells = $limit > 0 ? array_slice( $cross_sells, 0, $limit ) : $cross_sells;
wc_get_template(
'cart/cross-sells.php',
array(
'cross_sells' => $cross_sells,
// Not used now, but used in previous version of up-sells.php.
'posts_per_page' => $limit,
'orderby' => $orderby,
'columns' => $columns,
)
);
}
Добавляем эту функцию через хук woocommerce_after_single_product_summary
add_action( 'woocommerce_after_single_product_summary', 'nogtishop_crossels', 20 );
Всё это прописала в functions.php дочерней темы. Предварительно убрала через отключение хука блок «Похожие товары» на этой же странице карточки товара.
remove_action( 'woocommerce_after_single_product_summary', 'woocommerce_output_related_products', 20 );