WooCommerce: выдайте атрибуты настроек с помощью wp_set_object_terms
Мне нужно установить атрибуты продукта через код PHP. Согласно другим потокам в Stackru, есть метод wp_set_object_terms. К сожалению, это не работает так, как предполагается в моем случае:
Например, есть атрибут с именем "Hersteller", слаг "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 по существу неправильно? Я не знаю, что теперь делать. Может кто-нибудь здесь может мне помочь? Спасибо!
2 ответа
Попробуйте установить свой код так:
wp_set_object_terms(593, 'Alpina', 'pa_hersteller' , true);
И попробуй еще раз.
Согласно функции в WordPress Codex
<?php wp_set_object_terms( $object_id, $terms, $taxonomy, $append ); ?>
$append (bool) (необязательно) Если true, теги будут добавлены к объекту. Если false, теги заменят существующие теги (по умолчанию: False)
Так что если вы измените $append на true, это может сработать =)
Чтобы установить атрибуты программно, вы должны обновить мета поста данными таксономии после установки терминов, например
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);
Надеюсь, это поможет:)
Судя по предоставленным вами атрибутам, кажется, что вы нацелены на неправильную таксономию, я вижу 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_herstellergarantie
а также pa_hersteller
2 отдельных таксономии, а затем убедитесь, что pa_hersteller
существует перед использованием wp_set_object_terms