我正在尝试获取具有特定属性和价值的产品的列表/计数。使用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);
SO网友:Adrian
您应该使用wc_get_products and a custom filter 用于添加特定查询。
Example
我想找到包含特定属性值的产品;表过滤器;。
$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\', //default
\'terms\' => $query_vars[\'table-filter\'],
\'operator\' => \'IN\',
);
}
return $query;
}
Hint: 从WooCommerce生成的属性分类法始终以“";pa\\uquot;,因此,如果您将slug属性设置为;表过滤器“;,分类法为;pa\\U表格过滤器;。
SO网友:Minh Dao
我认为您在“税务查询”方面有问题。如果要在“tax\\u query”上查询数组,则需要按格式飞行wordpress
并简要说明:在“tax\\u 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\'
)