2015-10-05 77 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

尝试清除瞬变并查看是否有所作为。 –