1

我需要通过 PHP 代码设置产品的属性。根据 StackOverflow 上的其他线程,有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');

此外,属性“hersteller”甚至没有列在管理后端菜单的属性列表中。

为了调试问题,我还尝试了以下代码:

$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 方法本质上是错误的吗?我现在不知道该怎么办了。这里有人可以帮助我吗?谢谢!

4

3 回答 3

1

尝试像这样设置您的代码:

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

然后再试一次。

根据 WordPress Codex 中的功能

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

$append (bool) (可选) 如果为真,标签将附加到对象。如果为假,标签将替换现有标签(默认值:假)

因此,如果您将 $append 更改为 true 它可能有效 =)

于 2015-10-05T21:13:44.780 回答
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 个不同的分类法,则在使用之前确保pa_hersteller存在wp_set_object_terms

于 2015-10-06T06:34:28.840 回答
0

要以编程方式设置属性,您必须在设置术语后使用分类数据更新帖子元,如下所示

wp_set_object_terms(593, 'Alpina', 'pa_hersteller' , false);
$thedata = array('pa_hersteller' => array(
    name' => 'pa_hersteller',
    'value' => '',
    'is_visible' => '0',
    'is_taxonomy' => '1'
));

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

希望能帮助到你 :)

于 2020-05-15T10:41:29.480 回答