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

Другие вопросы по тегам