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