2015-10-05 44 views
1

我需要通過PHP代碼設置產品的屬性。 根據StackOverflow上的其他線程,有方法wp_set_object_terms。不幸的是,它不能正常工作,因爲它應該是我的情況:WooCommerce:使用wp_set_object_terms發佈設置屬性

例如,有一個名爲「Hersteller」,slug「hersteller」的屬性。 還有一個產品ID 593,沒有「hersteller」屬性集。

我嘗試下面的代碼來填充屬性:

wp_set_object_terms(593, 'Alpina', 'pa_hersteller' , false); 

當我試圖顯示在產品頁面上的屬性,沒有輸出,所以它似乎wp_set_object_terms處理不是招沒有成功。 下面的代碼生成空輸出:

$product->get_attribute('hersteller'); 

此外,屬性「...創建」甚至沒有在管理後臺menue屬性列表中列出。

要調試我也嘗試下面的代碼問題:

$attributes = get_post_meta(593, '_product_attributes'); 
print_r($attributes); 

導致下面的輸出:

Array ([0] => Array ([pa_marken] => Array ([name] => pa_marken [value] => [position] => 0 [is_visible] => 1 [is_variation] => 0 [is_taxonomy] => 1) [pa_kategorien] => Array ([name] => pa_kategorien [value] => [position] => 1 [is_visible] => 1 [is_variation] => 0 [is_taxonomy] => 1) [pa_referenznummer] => Array ([name] => pa_referenznummer [value] => [position] => 2 [is_visible] => 1 [is_variation] => 0 [is_taxonomy] => 1) [pa_herstellergarantie] => Array ([name] => pa_herstellergarantie [value] => [position] => 3 [is_visible] => 1 [is_variation] => 0 [is_taxonomy] => 1) [pa_schlagwoerter] => Array ([name] => pa_schlagwoerter [value] => [position] => 4 [is_visible] => 1 [is_variation] => 0 [is_taxonomy] => 1) [pa_lieferzeit] => Array ([name] => pa_lieferzeit [value] => [position] => 5 [is_visible] => 1 [is_variation] => 0 [is_taxonomy] => 1))) 

我使用的wp_set_object_terms方法基本上是錯了嗎? 現在我不知道該怎麼做了。有人可以幫我嗎?謝謝!

回答

1

嘗試設置你的代碼是這樣的:

wp_set_object_terms(593, 'Alpina', 'pa_hersteller' , true); 

,然後再試一次。

根據WordPress的法典功能

<?php wp_set_object_terms($object_id, $terms, $taxonomy, $append); ?> 

$追加(布爾)(可選)如果爲true,標籤會被追加到 對象。如果爲false,標籤將取代現有的標籤(默認:false)

所以,如果你改變了$追加到真也可能是工作=)

+0

到目前爲止,我已經試過了藏漢之前pa_hersteller存在! 這也不起作用,因爲append-boolean只是將多個值設置爲一個屬性。 如果append爲false,則現有屬性值將被覆蓋,如果append爲true,則現有屬性仍然存在,並且新的屬性值將被添加。 – MrSteed

0

根據您所提供的屬性輸出,看來你指定了錯誤的分類,我可以在下面的輸出中看到pa_herstellergarantie

Array (..... 
    [pa_herstellergarantie] => Array ( 
       [name] => pa_herstellergarantie 
       [value] => 
       [position] => 3 
       [is_visible] => 1 
       [is_variation] => 0 
       [is_taxonomy] => 1)...... 

你的代碼更改爲:

wp_set_object_terms(593, 'Alpina', 'pa_herstellergarantie' , false); 

還有一個說明wp_set_object_terms不會創建分類的說明。 如果分類不存在,它將拋出一條Invalid taxonomy錯誤消息。

如果pa_herstellergarantiepa_hersteller是2個不同的分類,然後確保使用wp_set_object_terms

+0

這兩個屬性,'pa_hersteller'和'pa_herstellergarantie'都是不同的分類法。兩者都存在 - 數據庫截圖,表'wp_woocommerce_attribute_taxonomies':[鏈接](http://i.imgur.com/YOVqdSk.png)。 'pa_herstellergarantie'(存儲產品製造商給出的保證)和'pa_hersteller'(存儲生產者)之間的唯一區別是,pa_herstellergarantie已經設置爲每個管理員後端菜單,並且pa_hersteller未針對此特定產品設置! – MrSteed

+0

有趣的是,當我嘗試代碼'wp_set_object_terms(593,'Alpina','pa_herstellergarantie',false);'它的工作!屬性「herstellergarantie」成功設置爲「Alpina」 - 但不是** herstellergarantie **屬性** hersteller **應該是「Alpina」!唯一的區別是,** pa_herstellergarantie **之前已經在這個特定產品的管理菜單中設置,** pa_hersteller **尚未設置爲該產品(但它存在於數據庫中,上面的屏幕截圖!)。 – MrSteed

+0

嘗試清除瞬變並查看是否有所作爲。 –