php - 在Woocommerce中獲取自定義產品屬性




wordpress products (6)

我試圖獲得產品自定義屬性值,但我很難做到這一點。

我試著做:

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
        )

我知道有一個值,因為它在屬性部分顯示它,但我無法找到一種方法讓它在我的自定義代碼中顯示。


編輯自Woocommerce第3版以來,不推薦使用woocommerce_get_product_terms

按照以下內容進行操作, @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'));

2016年更新。您可以使用:

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

要自定義輸出, plugins/woocommerce/templates/single-product/product-attributes.php複製到themes/theme-child/woocommerce/single-product/product-attributes.php並進行修改。


最新的:

$product->get_attribute( 'your_attr' );

如果$product不在頁面上,則需要定義$product


使用下面的代碼獲取所有屬性和詳細信息

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

您將在“$ 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);