Подтвердить что ты не робот

Woocommerce получает пользовательские атрибуты

Я пытаюсь получить значения пользовательских атрибутов продуктов, но я ужасно не могу этого сделать. я пытался сделать

global $woocommerce, $post, $product;
$res = get_post_meta($product->id);
print_r(unserialize($res['_product_attributes'][0]));

и im получение

[pa_koostis] => Array
        (
            [name] => pa_koostis
            [value] => 
            [position] => 0
            [is_visible] => 1
            [is_variation] => 0
            [is_taxonomy] => 1
        )

Я знаю, что есть значение, потому что оно показывает его в разделе атрибута, но я просто не могу найти способ его отображения в моем пользовательском коде.

4b9b3361

Ответ 1

Отредактировано: Начиная с 2.1 woocommerce_get_product_terms устарел

переходите к следующему: datafeedr написал в ответ hes:

global $product;
$koostis = array_shift( wc_get_product_terms( $product->id, 'pa_koostis', array( 'fields' => 'names' ) ) );

или

global $product;
$koostis = $product->get_attribute( 'pa_koostis' );

Оригинальный ответ:

$result = array_shift(woocommerce_get_product_terms($product->id, 'pa_koostis', 'names'));

Ответ 2

Вы можете получить одно значение для атрибута с помощью кода ниже:

$pa_koostis_value = get_post_meta($product->id, 'pa_koostis', true);

Ответ 3

woocommerce_get_product_terms() теперь устарел.

Используйте wc_get_product_terms() вместо этого.

Пример:

global $product;
$koostis = array_shift( wc_get_product_terms( $product->id, 'pa_koostis', array( 'fields' => 'names' ) ) );

Ответ 4

Обновление за 2016 год. Вы можете использовать:

global $product;
echo $product->list_attributes();

Чтобы настроить вывод, скопируйте plugins/woocommerce/templates/single-product/product-attributes.php в themes/theme-child/woocommerce/single-product/product-attributes.php и измените это.

Ответ 5

Обновлено:

$product->get_attribute( 'your_attr' );

Вам нужно будет определить $product, если он не на странице.

Ответ 6

Попробуйте получить массив атрибутов name = > значение атрибута:

global $product;

$formatted_attributes = array();

$attributes = $product->get_attributes();

foreach($attributes as $attr=>$attr_deets){

    $attribute_label = wc_attribute_label($attr);

    if ( isset( $attributes[ $attr ] ) || isset( $attributes[ 'pa_' . $attr ] ) ) {

        $attribute = isset( $attributes[ $attr ] ) ? $attributes[ $attr ] : $attributes[ 'pa_' . $attr ];

        if ( $attribute['is_taxonomy'] ) {

            $formatted_attributes[$attribute_label] = implode( ', ', wc_get_product_terms( $product->id, $attribute['name'], array( 'fields' => 'names' ) ) );

        } else {

            $formatted_attributes[$attribute_label] = $attribute['value'];
        }

    }
}

//print_r($formatted_attributes);

return $formatted_attributes;

Это немного неэффективно, но делает трюк.

Ответ 7

Ответ на "Любая идея для получения всех атрибутов сразу?" вопрос только для вызова функции с единственным идентификатором продукта:

$array=get_post_meta($product->id);

ключ является необязательным, см. http://codex.wordpress.org/Function_Reference/get_post_meta

Ответ 8

Вы получите атрибуты как массив в "$ formatted_attributes"

          $attributes = $product->get_attributes();

           foreach($attributes as $attr=>$attr_deets){

               $attribute_label = wc_attribute_label($attr);

               if ( isset( $attributes[ $attr ] ) || isset( $attributes[ 'pa_' . $attr ] ) ) {

                   $attribute = isset( $attributes[ $attr ] ) ? $attributes[ $attr ] : $attributes[ 'pa_' . $attr ];

                   if ( $attribute['is_taxonomy'] ) {

                       $formatted_attributes[$attribute_label] = wc_get_product_terms( $product->id, $attribute['name']);

                   } else {

                       $formatted_attributes[$attribute_label] = $attribute['value'];
                   }

               }
           }


           print_r($formatted_attributes);

Ответ 9

Решение, предоставленное для этого вопроса, равно 2.1, вы должны обновить этот код для работы в woocommerce 3.0, иначе будет создан огромный журнал для обесценивания

Ответ 10

Используйте приведенный ниже код, чтобы получить все атрибуты с подробностями

    global $wpdb;

    $attribute_taxonomies = $wpdb->get_results( "SELECT * FROM " . $wpdb->prefix . "woocommerce_attribute_taxonomies WHERE attribute_name != '' ORDER BY attribute_name ASC;" );
    set_transient( 'wc_attribute_taxonomies', $attribute_taxonomies );

    $attribute_taxonomies = array_filter( $attribute_taxonomies  ) ;

    prin_r($attribute_taxonomies);