Как отобразить только товары с заполненными вариациями в списке товаров?

Как настроить отображение товаров и их вариаций на магазине Woocommerce таким образом, чтобы вариации с нулем в остатках получали класс "disabled", а товары в product-loop отображались с классом "outofstock", не скрываясь из каталога?
  • 6 февраля 2024 г. 15:00
Ответы на вопрос 2
Чтобы отобразить только товары с заполненными вариациями и управлять классами в зависимости от состояния остатков на WooCommerce, вам нужно будет воспользоваться хуками и функциями WordPress и WooCommerce.

Отобразить только товары с заполненными вариациями:

В WooCommerce вариации являются собственными типами постов, поэтому они не отображаются прямо в категориях или списках товаров по умолчанию. Тем не менее, если вы хотите обеспечить, чтобы товар со взрослыми вариациями отображался, нужно будет написать собственный код для фильтрации таких товаров.

Добавление классов для различного отображения:

1. Добавить класс "disabled" вариациям с нулевым остатком:

```php
add_filter('woocommerce_post_class', 'custom_variation_post_class', 10, 2);

function custom_variation_post_class($classes, $product) {
    if ($product->is_type('variable')) {
        foreach ($product->get_available_variations() as $variation) {
            $variation_obj = wc_get_product($variation['variation_id']);
            if (!$variation_obj->is_in_stock()) {
                $classes[] = 'disabled';
                break;
            }
        }
    }

    return $classes;
}
```

2. Отображение товаров с классом "outofstock" без скрытия из каталога:

```php
add_filter('woocommerce_product_class', 'add_outofstock_class', 10, 4);

function add_outofstock_class($classname, $product_type, $post_id, $product) {
    if (!$product->is_in_stock()) {
        $classname .= ' outofstock';
    }

    return $classname;
}

add_action('woocommerce_product_query', 'show_outofstock_products');

function show_outofstock_products($q) {
    $q->set('meta_query', array(array(
        'key' => '_stock_status',
        'value' => 'outofstock',
        'compare' => '=='
    )));
}
```

Обратите внимание, что эти куски кода представляют собой примеры, которые могут потребовать дополнительной настройки с учетом вашей темы и специфики WooCommerce. Примеры кода следует добавлять в файл functions.php вашей активной темы или через плагин для собственных сниппетов кода.

Перед тем, как применять изменения на живом сайте, рекомендуется тестировать их на локальной копии сайта или на staging-сайте. Убедитесь, что вы понимаете, что делает код и отслеживайте изменения, чтобы избежать потенциальных проблем с работоспособностью сайта.
Найдено решение: 

- убираем галочку "Спрятать отсутствующие товары из каталога "
- добавляем в functions
Похожие вопросы