2017-04-26 12 views
0

私がWooCommerceバージョン2で始まったサイトでにアップグレードして、新しいリリース(3.0.0,3.0.1、... 3.0.4)でアップグレードしたところ、製品属性の注文アイテムメタデータの格納方法に矛盾があることに気付きました。商品属性データを確実に取得するにはどうすればよいですか?

バリエーションに属性「クラス日付」を使用すると、ストア内の一部の製品の注文が行われると、クラス日付のメタデータがキー「pa_class-date」を使用して格納されます。しかし、他の製品では、同じ属性のデータがキー "class-date"を使用して格納されます。

属性データを取得するための私のコードは次のようになります。私は両方ではなく、ただ一つのキーまたは他の(pa_class-日付またはクラス日付で見て、これを簡素化できるようにしたいと思い

$items = $order->get_items(); 
if (isset($item['item_meta']['class-date'])) { 
    $class_date = $item['item_meta']['class-date']; 
} elseif (isset($item['item_meta']['pa_class-date'])) { 
    $class_date = $item['item_meta']['pa_class-date']; 
} else { 
    error_log("Missing class date. We tried pa_class-date and class-date, but both are empty"); 
} 

)。それは可能ですか?

ここでは、2つの異なる製品を購入した場合の注文メタデータのダンプを示します。これはpa_class-dateを使用します。

[467] => stdClass Object 
    ( 
     [key] => pa_class-date 
     [value] => 2017-09-01 
     [display_key] => Class Date 
     [display_value] => <p>2017-09-01</p> 

    ) 

しかし、別の製品のために、データがキー「クラス日付」を使用して保存された:

26-Apr-2017 16:26:06 UTC] Array 
(
    [480] => stdClass Object 
     (
      [key] => class-date 
      [value] => 2017-05-18 
      [display_key] => Class Date 
      [display_value] => <p>2017-05-18</p> 

     ) 

キーは、データを格納するために使用されている矛盾の原因は何?

データを取得する最も信頼性の高い(将来的に)方法は何ですか?

+0

'$ order-> get_items();'は '$ item' * object *の配列を返すようになりました。配列のようにアクセスする代わりに、getterメソッドを使い始めるべきです。 – helgatheviking

答えて

0

この矛盾は可能です。しかし、むしろその一貫性のないデータ入力。 Products >> Attributesに属性を追加すると、それらはWoocommerceシステムの一部になります。次に、製品の詳細ページを選択するだけでバリエーションにマップすることができます。

ただし、商品詳細ページから直接「カスタム属性」を追加すると、その商品に固有のデータとなり、矛盾が生じる可能性があります。

+0

ありがとうございます。それはそれを説明する。私はキーとして "class-date"を使用していたクラスから属性を削除し、次にProduct >> Attributesを使用して属性を追加して、再びバリエーションを設定しました。その後、製品はpa_class-dateを使用してデータを格納します。 – mdp

+0

私はそれが助けてうれしいです! –

+0

あなたはそれがあなたを助けたようにupvoteすることができます! –

関連する問題