Obține produse cu atribut specific și categorie - WooCommerce
Încerc să obțin o listă/număr de produse care au un atribut și o valoare specifică. Produsele sunt gestionate și configurate folosind plugin-ul WooCommerce.
Fiecare produs are același set de variații, produsul este atribuit unei categorii, trebuie să recuperez doar produsele cu un atribut specific, de exemplu "newyork" și cantitatea stocului care este mai mică de exemplu "20"
Fiecare variație de produs este setată cu Stoc Gestionat, dar nu și produsul în sine, sper că are sens. Problema mea în acest moment este că interogarea WordPress pe care o am nu verifică deloc numele variației sau stocul.
Orice ajutor ar fi apreciat.
<?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);

Ar trebui să folosești wc_get_products și un filtru personalizat pentru a adăuga interogarea specifică.
Exemplu
Vreau să găsesc produse care conțin o valoare specifică a atributului "table-filter".
$args = array(
'table-filter' => array(1,2,3)
);
$products = wc_get_products($args);
Apoi am un filtru pentru asta:
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', //implicit
'terms' => $query_vars['table-filter'],
'operator' => 'IN',
);
}
return $query;
}
Sugestie: Taxonomia atributului generată de WooCommerce este întotdeauna prefixată cu "pa_", deci dacă slug-ul atributului tău este "table-filter", taxonomia va fi "pa_table-filter".

Cred că ai o problemă la 'tax_query'. Dacă vrei să folosești un array de interogare în 'tax_query', trebuie să urmezi formatul WordPress.
Și o scurtă explicație pentru tine: în 'tax_query' ai nevoie de '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'
)
