在Woocommerce,我试图让产品的自定义属性值,但我惨遭失败,我没有得到任何东西。
所以我想:
global $woocommerce, $post, $product;
$res = get_post_meta($product->id);
print_r(unserialize($res['_product_attributes'][0]));
而我得到这个原始数据:
[pa_koostis] => Array
(
[name] => pa_koostis
[value] =>
[position] => 0
[is_visible] => 1
[is_variation] => 0
[is_taxonomy] => 1
)
我知道有,因为它的属性部分中显示,但我不能找到一种方式来获得它与我的自定义代码显示的值。
Answer 1:
编辑 :该woocommerce_get_product_terms
因为Woocommerce 3版本已经过时
一起去的,如下@datafeedr写在他的回答 :
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'));
Answer 2:
你可以用下面的代码属性的单个值:
$pa_koostis_value = get_post_meta($product->id, 'pa_koostis', true);
Answer 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' ) ) );
Answer 4:
更新2018年可以使用:
global $product;
echo wc_display_product_attributes( $product );
自定义输出,复制plugins/woocommerce/templates/single-product/product-attributes.php
到themes/theme-child/woocommerce/single-product/product-attributes.php
和修改。
Answer 5:
最近更新:
$product->get_attribute( 'your_attr' );
您将需要定义$product
,如果它不是在页面上。
Answer 6:
尝试使用此方法获得的属性名称的数组=>属性值(一个或多个):
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;
这是有点低效率,但不会把戏。
Answer 7:
这个问题的答案“任何想法得到所有属性的一次?” 问题只是调用函数唯一产品ID:
$array=get_post_meta($product->id);
关键是可选的,看到http://codex.wordpress.org/Function_Reference/get_post_meta
Answer 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);
Answer 9:
使用下面的代码来获取与细节的所有属性
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);
文章来源: Get custom product attributes in Woocommerce