2017-06-21 5 views
1

私は既に2つの属性(pa_size、pa_color)を使用してプログラムでWooCommerceにいくつかの製品を追加しました。どちらもバリエーションに使用されています。今私は各製品(pa_brand)に1つ以上の属性を挿入するphpファイルを作りたいと思っています。これは表示にのみ使用され、バリエーションには使用されません。 存在を失うことなくWooCommerce製品属性を追加します

は、私のようないくつかのコードを試してみました:

$term_taxonomy_ids = wp_set_object_terms($productID, $productBrand, 'pa_brand', true); 

    $thedata = Array('pa_brand'=>Array(
     'name'=>'pa_brand', 
     'value'=>$productBrand, 
     'is_visible' => '1', 
     'is_taxonomy' => '1' 
    )); 

    update_post_meta( $productID,'_product_attributes',$thedata); 

しかし、私の問題は、この方法では、ブランドの属性が追加されますが、私はすでに持っていた属性が迷子にされていることです。

結果として、1つの属性しか持たないすべての製品が得られます。

、直前(属性の何も失うことなく、1つの以上の属性を追加するためのいずれかの方法があります - あなたが最初の既存のメタデータを取得する必要があると店 -

答えて

1

update_post_meta()は、常にそれが呼ばれる値を変更しますが、

$term_taxonomy_ids = wp_set_object_terms($productID, $productBrand, 'pa_brand', true); 

$existingData['pa_size'] = get_post_meta($productID, 'pa_size', true); 
$existingData['pa_color'] = get_post_meta($productID, 'pa_color', true); 

$thedata = Array(
    'pa_brand'=>Array(
     'name'=>'pa_brand', 
     'value'=>$productBrand, 
     'is_visible' => '1', 
     'is_taxonomy' => '1' 
    ), 
    'pa_size' => Array(
     'name'=>'pa_size', 
     'value'=>$existingData['pa_size'], 
     'is_visible' => '1', 
     'is_taxonomy' => '1' 
    ), 
    'pa_color' => Array(
     'name'=>'pa_color', 
     'value'=>$existingData['pa_color'], 
     'is_visible' => '1', 
     'is_taxonomy' => '1' 
    ) 
); 

update_post_meta( $productID,'_product_attributes',$thedata); 
+0

スーパー!これはうまくいくようです!私はちょうど 'is_variation' => '1'を 'pa_size'& 'pa_color'の配列に追加しましたので、これらの属性のバリエーションは削除されません! 多くの感謝! –

+0

私は1つの問題を出しました。それはうまくいきましたが、同じコードを実行すると、製品の編集ページのpa_brandの値が空になります。 $ productBrandに値があることを確認しました。 –

+0

hmmm ...私に –

0

最後に、最後の行で、私はこの追加:

wp_set_object_terms($productID, $productBrand, 'pa_brand' , true); 

を、今サイコーないようですあまりにも配列でいますどんな問題でも。それがあなたにも役立つことを願っています。

関連する問題