2017-04-26 24 views
0

在我開始使用WooCommerce版本2的網站上。,然後通過較新的版本(3.0.0,3.0.1,... 3.0.4)升級,我注意到訂單項元數據如何存儲產品屬性的不一致。如何可靠地檢索產品屬性數據?

對於變體使用屬性「類日期」時,當對商店中的某些產品發出訂單時,類日期的元數據使用鍵「pa_class-date」存儲。但對於其他產品,同一屬性的數據使用關鍵字「class-date」存儲。

我對獲取的屬性數據的代碼如下所示:

$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"); 
} 

我希望能夠簡化這只是看一個鍵或其他(pa_class,日期,艙位等級,日期,不是兩個)。那可能嗎?

下面是購買兩種不同產品的訂單元數據轉儲的樣子。這個使用pa_class-date。

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> 

     ) 

什麼原因導致該鍵用於存儲數據的不一致性:

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

    ) 

但對於不同的產品,使用的關鍵「級最新的」存儲的數據?

什麼是檢索數據最可靠的方法?

+0

請注意'$ order-> get_items();'現在返回並返回'$ item' * object *的數組,您應該開始使用getter方法來代替像數組一樣訪問它。 – helgatheviking

回答

0

這種不一致是可能的。但它的數據輸入不一致。當您向產品>>屬性添加屬性時,它們將成爲woocommerce系統的一部分。然後,只需選擇產品詳細信息頁面,即可將它們映射到變體。

但是,當您直接從產品詳細信息頁面添加「自定義屬性」時,該數據將針對該產品特定並可能導致不一致。

+0

謝謝。這解釋了它。我從使用「class-date」作爲鍵的類中刪除屬性,然後使用Product >> Attributes將屬性添加回來,然後再次配置變體。之後,產品現在使用pa_class-date存儲數據。 – mdp

+0

我很高興它幫助! –

+0

你可以放心,因爲它幫助你! –

相關問題