Атрибуты продукта в переменных продуктах задаются как метаданные в таблице базы данных wp_postmeta. Тогда вам нужно будет использовать мета-запрос вместо налогового запроса. Попробуйте это:
static function filterVariations() {
$query = new \WP_Query( array(
'post_parent' => 9,
'post_status' => 'publish',
'post_type' => 'product_variation',
'posts_per_page' => -1,
'meta_query' => array( array(
'key' => 'attribute_pa_frame',
'value' => 'fra_silver_wood',
) ),
) );
$result = array();
if($query->have_posts()){
while ($query->have_posts()) {
$query->next_post();
$result[] = $query->post;
}
wp_reset_postdata();
}
wp_reset_query();
return $result;
}
Теперь это должно работать как положено ...
Для нескольких пар атрибутов товара (ключ / значение), указанных в вашем вопросе, вы просто будете использовать их в своем WP_Query
следующим образом:
public function filterVariations() {
$query = new \WP_Query( array(
'post_parent' => 40,
'post_status' => 'publish',
'post_type' => 'product_variation',
'posts_per_page' => -1,
'meta_query' => array(
array(
'key' => 'attribute_pa_size',
'value' => 'size_8x10',
),
array(
'key' => 'attribute_pa_material',
'value' => 'mat_luster_photo_paper',
),
array(
'key' => 'attribute_pa_frame',
'value' => 'fra_silver_wood',
),
array(
'key' => 'attribute_pa_mat_usage',
'value' => 'musa_yes',
),
),
) );
$result = array();
if($query->have_posts()){
while ($query->have_posts()) {
$query->next_post();
$result[] = $query->post;
}
wp_reset_postdata();
}
wp_reset_query();
return $result;
}
Тогда вы обычно получите соответствующий вариант продукта (только один) ...
Примечание: мета-ключи атрибутов продукта начинаются с attribute_pa_
вместо pa_
Документация: WP_Query и параметры пользовательских полей (мета-запрос)