Получение товаров с определенным атрибутом и в категории - woocommerce

7 июл. 2017 г., 13:08:08
Просмотры: 26.6K
Голосов: 2

Я пытаюсь получить список/количество товаров, которые имеют определенный атрибут и значение. Товары управляются и настраиваются с помощью плагина WooCommerce.

Каждый товар имеет один и тот же набор вариаций, товар назначен категории, мне нужно получить только товары с определенным атрибутом, например "newyork", и количеством на складе меньше, например, "20".

Каждая вариация товара настроена на управление запасами, но не сам товар, надеюсь, это понятно. Моя проблема в том, что текущий WordPress запрос вообще не проверяет название вариации или количество на складе.

Буду благодарен за любую помощь.

<?php 

$args = array(
  'post_type'           => array('product', 'product_variation'),
  'post_status'         => 'publish',
  'posts_per_page'      => -1,
  'meta_query'          => array(
    array(
      'key'         => '_stock',
      'value'       => 20,
      'compare'     => '<'
    )
  ),
  'tax_query'           => array(
    array(
      'taxonomy'        => 'product_cat',
      'field'           => 'slug',
      'terms'           => array('cat1', 'cat2', 'cat3'),
      'operator'        => 'IN',
    ),
    array(
      'taxonomy'        => 'pa_regions',
      'field'           => 'slug', 
      'terms'           => 'newyork',
      'operator'        => 'IN'
    ),
  )
);

$loop = new WP_Query($args);
$post_count = array();

while($loop->have_posts()) : $loop->the_post();
  global $product; ?>

  <pre style="background: #1c1c1b; color: #f7e700">
    <?php $post_count[] = $product->ID ;?>
  </pre>

<?php endwhile; ?>

$total = count($post_count); 
0
Все ответы на вопрос 2
0

Вам следует использовать wc_get_products с пользовательским фильтром для добавления вашего специфического запроса.

Пример

Я хочу найти товары, содержащие конкретное значение атрибута "table-filter".

  $args = array(
            'table-filter' => array(1,2,3)
        );
  $products = wc_get_products($args);

Затем у меня есть фильтр для этого:

add_filter('woocommerce_product_data_store_cpt_get_products_query', 'my_handle_custom_query_var', 10, 2);

function my_handle_custom_query_var($query, $query_vars) {
    if (!empty($query_vars['table-filter'])) {
        $query['tax_query'][] = array(
            'taxonomy' => 'pa_table-filter',
            'field'    => 'term_id', //по умолчанию
            'terms'    => $query_vars['table-filter'],
            'operator' => 'IN',
        );
    }
    return $query;
}

Подсказка: Сгенерированная таксономия атрибута в WooCommerce всегда имеет префикс "pa_", поэтому если слаг вашего атрибута "table-filter", то таксономия будет "pa_table-filter".

26 апр. 2018 г. 10:11:41
0
-1

Похоже, у вас проблема с 'tax_query'. Если вам нужен массив запроса для 'tax_query', необходимо следовать формату WordPress.

Краткое пояснение для вас: в 'tax_query' требуется указать 'relation':

 'tax_query'           => array(
   'relation'=>'AND', // 'AND' 'OR' ...
    array(
      'taxonomy'        => 'product_cat',
      'field'           => 'slug',
      'terms'           => array('cat1', 'cat2', 'cat3'),
      'operator'        => 'IN',
    ),
    array(
      'taxonomy'        => 'pa_regions',
      'field'           => 'slug',
      'terms'           => 'newyork',
      'operator'        => 'IN'
    )
24 янв. 2018 г. 06:07:28