94

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
        )

属性セクションに値が表示されているため、値があることはわかっていますが、カスタム コードで値を表示する方法が見つかりません。

4

9 に答える 9

132

編集済み: 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'));
于 2012-11-19T13:28:01.897 に答える
19

以下のコードを使用して、属性の単一の値を取得できます。

$pa_koostis_value = get_post_meta($product->id, 'pa_koostis', true);
于 2012-11-14T13:15:07.600 に答える
19

woocommerce_get_product_terms()は現在 (2014 年) 非推奨です。

wc_get_product_terms()代わりに使用してください。

例:

global $product;
$koostis = array_shift( wc_get_product_terms( $product->id, 'pa_koostis', array( 'fields' => 'names' ) ) );
于 2014-02-25T16:58:44.040 に答える
15

属性名の配列を取得するには、これを試してください => 属性値(複数可):

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;

少し非効率的ですが、うまくいきます。

于 2015-07-16T10:32:24.637 に答える
3

「一度にすべての属性を取得するためのアイデアはありますか?」に対する答え。質問は、製品IDのみで関数を呼び出すことです:

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

キーはオプションです。http://codex.wordpress.org/Function_Reference/get_post_metaを参照してください。

于 2013-11-27T12:31:20.917 に答える