首页 文章

在Woocommerce中获取自定义产品属性

提问于
浏览
48

我试图获得产品自定义属性值,但我很难做到这一点 .

我试着做:

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
        )

我知道有一个值,因为它在属性部分显示它,但我无法找到一种方法让它在我的自定义代码中显示 .

9 回答

  • 9

    答案是“任何想法立即获得所有属性?”问题只是调用只有产品ID的函数:

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

    key是可选的,请参阅http://codex.wordpress.org/Function_Reference/get_post_meta

  • 13

    您可以使用以下代码获取属性的单个值:

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

    您将在“$ 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);
    
  • 13

    woocommerce_get_product_terms() 现已弃用 .

    请改用 wc_get_product_terms() .

    例:

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

    更新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 并进行修改 .

  • 9

    试试这个来获取属性名称=>属性值的数组:

    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;
    

    它效率不高但可以解决问题 .

  • 0

    Most updated:

    $product->get_attribute( 'your_attr' );
    

    如果它不在页面上,您将需要定义 $product .

  • 1

    已编辑:自Woocommerce第3版以来,不再使用woocommerce_get_product_terms

    请使用以下内容作为@datafeedr写入in his answer

    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'));
    
  • 1

    使用下面的代码获取所有属性和详细信息

    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);
    

相关问题