Столкнулся с простой казалось бы проблемой. Хочу управлять порядком в товарах апсейл без дополнительных плагинов и функционалом WooCommerce.
Итак, вы хотите, чтобы порядок апсейл товаров сохранялся в том порядке, в котором вы их выбираете при настройке продукта. Вот решение:

Вставьте этот код в файл function.php дочерней темы WordPress
get_id() : 0;
}
// Получаем сохраненный порядок
$saved_order = get_post_meta($product_id, '_upsell_display_order', true);
if (!empty($saved_order) && is_array($saved_order)) {
// Сортируем массив ID в соответствии с сохраненным порядком
$sorted_ids = array();
foreach ($saved_order as $ordered_id) {
if (in_array($ordered_id, $ids)) {
$sorted_ids[] = $ordered_id;
}
}
// Добавляем продукты, которые есть в $ids, но отсутствуют в сохраненном порядке
foreach ($ids as $id) {
if (!in_array($id, $sorted_ids)) {
$sorted_ids[] = $id;
}
}
return $sorted_ids;
}
return $ids;
}
add_filter('woocommerce_product_get_upsell_ids', 'custom_upsell_display_order', 10, 2);
add_filter('woocommerce_product_upsell_ids', 'custom_upsell_display_order', 10, 2);
/**
* Добавляем JavaScript для сохранения порядка выбора
*/
function add_upsell_order_script() {
if (get_post_type() !== 'product') {
return;
}
?>
Что делает этот код:
- Сохраняет порядок апсейл продуктов именно в том порядке, в котором вы их выбираете
- Поддерживает этот порядок при отображении на фронтенде
Как это работает:
- При выборе апсейл продуктов в админке, порядок выбора автоматически сохраняется
- Этот порядок сохраняется в специальном мета-поле продукта
- При отображении на сайте, продукты показываются в том же порядке, в котором были выбраны
- Код подробно прокомментирован
Как использовать:
- Добавьте этот код в файл functions.php вашей темы или в плагин для кастомизации
- Перейдите к редактированию продукта
- Добавьте апсейл продукты в том порядке, в котором хотите их видеть
- Сохраните продукт
Этой статьей хочу начать цикл маленьких лайфхаков для работы с Wordpress и интернет-магазинами в частности.


