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

时间:2012-11-14 07:55:14

标签: php wordpress woocommerce product custom-taxonomy

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

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

10 个答案:

答案 0 :(得分:84)

  

已修改:自{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 :(得分:15)

woocommerce_get_product_terms()现已弃用。

改为使用wc_get_product_terms()

示例:

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

答案 2 :(得分:14)

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

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

答案 3 :(得分:13)

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并修改它。

答案 4 :(得分:11)

最新更新:

$product->get_attribute( 'your_attr' );

如果页面上没有$product,则需要定义。

答案 5 :(得分:9)

尝试此操作以获取属性名称数组=>属性值:

numpy

虽然效率不高,但可以解决问题。

答案 6 :(得分:2)

尽管@airdrumz解决方案可以工作,但是通过直接访问ID来做错操作会遇到很多错误,这对将来的兼容性不好。

但是它导致我检查对象并创建此OOP方法:

public function postUrl()
{
    $url = 'https://api.com/';
    $data = [
        'item' => 'Nike Shoes',
        'content' => [
            'channel' => 'false',
            'hop'     => 'false',
            'msg'     => 'Item Sold'
        ]
    ];
    $postData = json_encode($data);
    $ch = curl_init();

    curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: text/json']);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
    curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
    $result = curl_exec($ch);
    curl_close($ch);
    Log::info($postData);
}

奖金,如果您在创建全局$ product项之前(例如在入队脚本期间)进行上述操作,则可以使用以下方法自己完成:

function myplug_get_prod_attrs() {
    // Enqueue scripts happens very early, global $product has not been created yet, neither has the post/loop
    global $product;
    $wc_attr_objs = $product->get_attributes();
    $prod_attrs = [];
    foreach ($wc_attr_objs as $wc_attr => $wc_term_objs) {
        $prod_attrs[$wc_attr] = [];
        $wc_terms = $wc_term_objs->get_terms();
        foreach ($wc_terms as $wc_term) {
            array_push($prod_attrs[$wc_attr], $wc_term->slug);
        }
    }
    return $prod_attrs;
}

答案 7 :(得分:1)

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

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

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

答案 8 :(得分:1)

您将在" $ 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 :(得分:0)

使用以下代码获取包含详细信息的所有属性

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