2016-12-30 5 views
0

В WooCommerce, у меня есть этот код, чтобы показать атрибуты продукта слизней на архивных страницах, как магазин страницы:Получить и отобразить значения для атрибута продукта в WooCommerce

if (!function_exists('shop_attributes_in_loop')) { 
    function shop_attributes_in_loop(){ 
     global $product; 
     $attributes = $product->get_attributes(); 
     if(!empty($attributes)){ 
      $attribute_single = array_keys($attributes); 
      $myArray = array(); 
      echo '<div class="product_attributes">'; 
      foreach ($attribute_single as $attribute => $value) { 
       $myArray[] = ucfirst($value); 
      } 
      echo implode(', ', $myArray).'</div>'; 
     } 
    } 
} 
add_action('woocommerce_after_shop_loop_item', 'shop_attributes_in_loop'); 

Они показывают только atributes имя поля как pa_size, pa_color

Как я могу получить и отобразить значения для этого атрибуты продукта (например, 2kg, 3kg или blue, green)?

Спасибо.

+0

Очень сложно узнать, что вы спрашиваете, как это написано в настоящее время. – Demitrian

+0

Этот код показывает имя поля atributte. Мне бы хотелось, чтобы код отображал значения атрибута (а не имя полей) ясно сейчас? – Fninja

ответ

0

Чтобы получить атрибуты значения, которые нужно использовать get_terms(), с внутри в качестве аргумента ваш туалет атрибут продукта слизняк, как pa_size, pa_color ... Так, чтобы отобразить соответствующие значения для каждого атрибута будет нужен второй цикл по каждому элементу.

Так что ваш код может быть что-то вроде этого:

if (!function_exists('shop_attributes_in_loop')) { 
    function shop_attributes_in_loop(){ 
     global $product; 

     //Getting product attributes 
     $product_attributes = $product->get_attributes(); 

     if(!empty($product_attributes)){ 

      //Getting product attributes slugs 
      $product_attribute_slugs = array_keys($product_attributes); 
      $count_slug = 0; 

      echo '<div class="product_attributes">'; 

      foreach ($product_attribute_slugs as $product_attribute_slug){ 
       $count_slug++; 

       // Removing "pa_" from attribute slug and adding a cap to first letter 
       $attribute_name = ucfirst(str_replace('pa_', '', $product_attribute_slug)); 
       echo $attribute_name . ' ('; 

## ===> ===> // Getting the product attribute values 
       $attribute_values = get_terms($product_attribute_slug); 
       $count_value = 0; 
       foreach($attribute_values as $attribute_value){ 
        $count_value++; 
        $attribute_name_value = $attribute_value->name; // name value 
        $attribute_slug_value = $attribute_value->slug; // slug value 
        $attribute_slug_value = $attribute_value->term_id; // ID value 

        // Displaying HERE the "names" values for an attribute 
        echo $attribute_name_value; 
        if($count_value != count($attribute_values)) echo ', '; 
       } 
       if($count_slug != count($product_attribute_slugs)) echo '), '; 
       else echo ').'; 
      } 
      echo '</div>'; 
     } 
    } 
} 
add_action('woocommerce_after_shop_loop_item', 'shop_attributes_in_loop'); 

и покажет, например, что-то вроде этого (для значений Название pa_color и pa_size):

Color (Black, Blue, Green), Size (30, 32, 34, 36, 38, 40, 42, 44). 

Код входит в файл function.php вашей активной дочерней темы (активная тема или любой файл плагина).

Этот код проверен и работает.

0

Его простой с этим кодом (пример 1):

function nt_product_attributes() { 
global $product; 
    if ($product->has_attributes()) { 

     $attributes = (object) array (
     'color'    => $product->get_attribute('pa_color'), 
     'size'   => $product->get_attribute('pa_size'), 
     ) 
    return $attributes; 
    } 
} 

Использование:

$attributes = nt_product_attributes(); 
echo $attributes->color; 
echo $attributes->size; 

ИЛИ (пример 2)

function nt_product_attributes() { 
global $product; 
    if ($product->has_attributes()) { 

     $attributes = array (
     'color'    => $product->get_attribute('pa_color'), 
     'size'   => $product->get_attribute('pa_size'), 
     ) 
    return $attributes; 
    } 
} 

Использование:

$attributes = nt_product_attributes(); 
echo $attributes['color']; 
echo $attributes['size'];