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
)
Я знаю, что есть значение, потому что оно показывает его в разделе атрибута, но я просто не могу найти способ его отображения в моем пользовательском коде.
Ответы
Ответ 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);