Получите все вариации продукта на основе одного значения атрибута по умолчанию в WooCommerce

После рабочего процесса Loic здесь Могу ли я получить все вариации, связанные с продуктом, основываясь на одном конкретном изменении значения по умолчанию.

Пример. Получите все варианты с атрибутом_pa_sizes, аналогичным атрибуту attribute_pa_sizes по умолчанию.

echo $variation_values['attributes']['attribute_pa_sizes'] . ': ' . $price ;

Это можно сделать с помощью следующего кода (на основе этого ответа ):

 <?php global $product; $variation_ids = array(); $targeted_attribute = 'pa_sizes'; if( $product->is_type('variable') ){ $default_attributes = $product->get_default_attributes(); foreach($product->get_available_variations() as $variation_values ){ foreach($variation_values['attributes'] as $key => $attribute_value ){ $attribute_name = str_replace( 'attribute_', '', $key ); if( $attribute_name == $targeted_attribute ){ $default_value = $product->get_variation_default_attribute($attribute_name); if( $default_value == $attribute_value ){ // We set all related variation IDs in an array $variation_ids[] = $variation_values['variation_id']; } } } } if( count( $variation_ids ) > 0 ){ // Iterating through each variation ID foreach( $variation_ids as $variation_id ){ // Get the "default" WC_Product_Variation object $variation = wc_get_product($variation_id); // Get variation attribute values $variation_attributte = $variation->get_variation_attributes(); // Raw output variation attribute values echo '<pre>'; print_r($variation_attributte); echo '</pre>'; // Get the active price $price = $variation->get_price(); // Output price echo '<p>Price: ' . $price . '</p>'; } } } ?> 

Протестировано и работает