web-dev-qa-db-ja.com

特定の属性およびカテゴリの製品を取得する-woocommerce

特定の属性と値を持つ製品のリスト/数を取得しようとしています。製品は、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); 
1

特定のクエリを追加するには、 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'    => 'id',
            'terms'    => $query_vars['table-filter'],
            'operator' => 'IN',
        );
    }
    return $query;
}

ヒント:WooCommerceから生成された属性分類には常に「pa_」という接頭辞が付いているため、slugが「table-filter」である場合、分類は「pa_table-filter」。

1
Adrian