Как мне программно добавить ‘reviews_allowed’ к продукту WooCommerce?

Вопрос или проблема

Я пытаюсь добавить продукты, используя данные, собранные из формы Caldera. Мне удается создать продукт и добавить другие атрибуты, но ‘reviews_allowed’ оказывается трудноуловимым.

$post_id = wp_insert_post(array(
    'post_title' => 'ProductName '.$data['uniquenumber'],
    'post_type' => 'product',
    'post_status' => 'draft',
    'post_content' => $data[ 'description' ],
    'post_excerpt' => $data[ 'short_description' ]
));


wp_set_object_terms( $post_id, 'simple,virtual', 'product_type' );
wp_set_object_terms( $post_id, ['services'] ,'product_cat');

wp_set_object_terms( $post_id, 1 ,'reviews_allowed' );  // НЕ РАБОТает

//update_post_meta( $post_id, 'reviews_allowed', 'yes');  // СОЗДАЕТ ОТДЕЛЬНЫЙ АТРИБУТ,

// Все эти функции работают
update_post_meta( $post_id, 'real_name', $data['first_name']." ".$data['last_name'] );
update_post_meta( $post_id, '_nyp', 'yes' );
update_post_meta( $post_id, '_virtual', 'yes' );
update_post_meta( $post_id, '_visibility', 'visible' );

Я просмотрел код WC и почти уверен, что атрибут называется ‘reviews_allowed’, и его тип – bool. Я новичок в этом, поэтому надеюсь/ожидаю, что это простая проблема.

Спасибо, Джон

Насколько я знаю, reviews_allowed в WooCommerce не является термином объекта, атрибутом, частью метаданных поста или чем-то подобным.

Это просто другое название для comment_status в самом посте.

Вы можете включить обзоры при вставке поста, используя следующее

$post_id = wp_insert_post(array(
    . . . . 
    'comment_status' => 'open'
));

Вы не должны использовать функции постов WordPress при работе с продуктами WooCommerce. WooCommerce имеет свои собственные функции, которые позволяют продуктам правильно заполнять свои собственные таблицы поиска и будут совместимы с будущими версиями, если (когда, реалистично) продукты WooCommerce будут перемещены в пользовательскую структуру данных в будущем.

Вы можете увидеть некоторые примеры здесь, но ваш код будет выглядеть так:

$product = new WC_Product_Simple();
$cat_id  = get_term_by( 'slug', 'services', 'product_cat' );

$product->set_category_ids( [ $cat_id ] );
$product->set_name( 'ProductName ' . $data['uniquenumber'] );
$product->set_status( 'draft' );
$product->set_description( $data[ 'description' ] );
$product->set_short_description( $data[ 'short_description' ] );
$product->set_virtual( true );
$product->set_reviews_allowed( true );
$product->set_catalog_visibility( 'visible' );
$product->update_meta_data( 'real_name' );
$product->update_meta_data( '_nyp' );

$product->save();

С помощью этого метода вы устанавливаете свойство, разрешающее обзоры, с помощью $product->set_reviews_allowed( true );.

Ответ или решение

Чтобы программно добавить возможность оставления отзывов (reviews_allowed) к продукту WooCommerce, вам необходимо использовать правильные методы и функции, предусмотренные самим WooCommerce. Ваша исходная попытка добавления через update_post_meta() не будет работать, поскольку reviews_allowed не является метаданными поста. Вместо этого это атрибут объекта продукта.

Вот подробное руководство о том, как это реализовать, используя классическую структуру WooCommerce:

Использование WC_Product_Simple для создания продукта

WooCommerce предоставляет классы для работы с продуктами, которые упрощают процессы создания и обновления. Для начала вам необходимо создать экземпляр класса WC_Product_Simple и использовать его методы для установки различных свойств продукта, включая доступность отзывов.

Пример кода

Предположим, у вас есть данные, полученные из формы Caldera. Код для добавления нового продукта с активированным комментированием (т.е. возможность оставлять отзывы) будет выглядеть так:

// Создание нового простого продукта
$product = new WC_Product_Simple();

// Получение идентификатора категории по слагу
$cat_id = get_term_by('slug', 'services', 'product_cat');

// Установка необходимых свойств продукта
$product->set_category_ids([$cat_id->term_id]); // Установка категории
$product->set_name('ProductName ' . $data['uniquenumber']); // Установка названия
$product->set_status('draft'); // Установка статуса
$product->set_description($data['description']); // Описание продукта
$product->set_short_description($data['short_description']); // Краткое описание
$product->set_virtual(true); // Установка виртуального продукта
$product->set_reviews_allowed(true); // Разрешить отзывы
$product->set_catalog_visibility('visible'); // Видимость в каталоге

// Обновление метаданных продукта
$product->update_meta_data('real_name', $data['first_name'] . " " . $data['last_name']);
$product->update_meta_data('_nyp', 'yes');

// Сохранение продукта
$product->save();

Подробности по коду

  1. Класс WC_Product_Simple: Этот класс позволяет создавать простые продукты. Вы можете использовать другие классы, такие как WC_Product_Variable, если ваш продукт имеет вариации.

  2. Методы установки атрибутов:

    • set_category_ids(): Устанавливает категории, связывая продукт с существующими.
    • set_name(), set_status(), set_description(), set_short_description(): Эти методы задают соответствующие атрибуты продукта.
    • set_virtual(): Этот метод указывает, что продукт является виртуальным.
    • set_reviews_allowed(): В этом месте вы задаете разрешение на отзывы, устанавливая значение true.
    • set_catalog_visibility(): Определяет, будет ли продукт виден в каталоге.
  3. Обновление метаданных: При помощи метода update_meta_data() можно задавать дополнительные метаданные для продукта, которые не учитываются в стандартных полях.

Заключение

Создание продуктов в WooCommerce с активированными отзывами — это простой процесс благодаря объектно-ориентированному подходу, представленному в WooCommerce. Использование правильных классов и методов не только упрощает управление продуктами, но и делает ваш код более чистым и поддерживаемым в будущем. Убедитесь, что перед использованием всех этих методов у вас установлены соответствующие версии WooCommerce и WordPress, чтобы избежать конфликтов и ошибок.

Если у вас есть дополнительные вопросы или вы столкнулись с проблемами, не стесняйтесь задавать их на профессиональных форумах или сообществах разработчиков, где вы можете получить помощь и рекомендации.

Оцените материал
Добавить комментарий

Капча загружается...