Показать только сгруппированные товары в Woocommerce - PullRequest
0 голосов
/ 01 октября 2018

В Woocommerce, из-за проблемы инвентаря с размером одежды, у нас есть два разных продукта для одного и того же продукта.Давайте назовем это синей рубашкой, но это 2 разных товара в нашем магазине из-за решения о заказе.Я создал сгруппированный продукт для обработки этого отображения.
Однако я не могу скрыть связанные продукты из своего магазина.Когда я использую класс WC_Product_query и функцию get_products, кажется, что он не возвращает все 46 запрашиваемых продуктов.Мне интересно, что именно, я делаю неправильно и / или если есть лучшее решение.

Поместил следующее в мою дочернюю тему functions.php:

add_action( 'woocommerce_product_query', 'only_grouped_products_query' );
function only_grouped_products_query( $q ) {
    $query = new WC_Product_Query(array($q));   

    $products = $query->get_products();

    $linked_array = array();
    $i = 0;
    foreach($products as $product){     
        $i++;
        /*
        echo $product->get_name() .' - ' . $product->product_type .'<br>';
        $is_grouped = $product->product_type;
        if ( $is_grouped == 'grouped' )
        {
            // echo $product->get_name() .' - ' . $product->product_type;
            $get_child_id = $product->get_children();
            if (is_array($get_child_id)){
                foreach($get_child_id as $child_id){
                    $linked_array[] = $child_id;
                }
            } else {
                $linked_array[] = $get_child_id;
            }
        }
        */
    }
    echo $i;
    // $q->set( 'post__not_in', $linked_array );
}

Вышефрагмент кода работает, но он не извлекает все 46 результатов, которые показывает запрос, когда я сбрасываю исходную переменную $ query.$ i возвращает только 10 результатов.

1 Ответ

0 голосов
/ 02 октября 2018

Объяснения вашего тела вопроса не так ясны ... Поэтому я основываю этот ответ на заголовке вашего вопроса.

Поскольку тип продукта в Woocommerce обрабатывается product_type пользовательской таксономией, вывместо этого нужно использовать Налоговый запрос .

Следующий код будет отображать только сгруппированные типы продуктов на всех страницах архива Woocommerce:

add_filter( 'woocommerce_product_query_tax_query', 'only_grouped_products', 20, 1 );
function only_grouped_products( $tax_query ){
    $tax_query[] = array(
        'taxonomy'  => 'product_type',
        'field'     => 'name',
        'terms'     => array('grouped'),
    );
    return $tax_query;
}

Код находится в файле function.php вашей активной дочерней темы (активной темы).Протестировано и работает.


Типы продуктов Woocommerce по умолчанию (и другие пользовательские типы продуктов)

Таким образом, вы можете работать с любым типом продукта:

  • Для Simple продуктов, которые вы будете использовать: 'terms' => array('simple'),
  • Для Variable продуктов, которые вы будете использовать: 'terms' => array('variable'),
  • Для Сгруппированные продукты, которые вы будете использовать: 'terms' => array('grouped'),
  • Для External продуктов, которые вы будете использовать: 'terms' => array('external'),

А также все эти нестандартные продуктытипы (из известных сторонних плагинов):

  • Для Композитных продуктов, которые вы будете использовать: 'terms' => array('composite'),
  • Для Простые подписки продуктыВы будете использовать: 'terms' => array('subscriptions'),
  • Для Переменная подписка продуктов, которые вы будете использовать: 'terms' => array('Variable Subscription'),
  • Для Бронирование продуктов, которые вы будете использовать: 'terms' => array('booking'),

Вы можете комбинировать несколько типов продуктов тоже , как например, только простые и сгруппированные типы продуктов:
Вы будете использовать: 'terms' => array('simple', 'grouped'),… ии так далее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...