Вопрос или проблема
Я пытаюсь добавить продукты, используя данные, собранные из формы 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();
Подробности по коду
-
Класс WC_Product_Simple: Этот класс позволяет создавать простые продукты. Вы можете использовать другие классы, такие как
WC_Product_Variable
, если ваш продукт имеет вариации. -
Методы установки атрибутов:
set_category_ids()
: Устанавливает категории, связывая продукт с существующими.set_name()
,set_status()
,set_description()
,set_short_description()
: Эти методы задают соответствующие атрибуты продукта.set_virtual()
: Этот метод указывает, что продукт является виртуальным.set_reviews_allowed()
: В этом месте вы задаете разрешение на отзывы, устанавливая значениеtrue
.set_catalog_visibility()
: Определяет, будет ли продукт виден в каталоге.
-
Обновление метаданных: При помощи метода
update_meta_data()
можно задавать дополнительные метаданные для продукта, которые не учитываются в стандартных полях.
Заключение
Создание продуктов в WooCommerce с активированными отзывами — это простой процесс благодаря объектно-ориентированному подходу, представленному в WooCommerce. Использование правильных классов и методов не только упрощает управление продуктами, но и делает ваш код более чистым и поддерживаемым в будущем. Убедитесь, что перед использованием всех этих методов у вас установлены соответствующие версии WooCommerce и WordPress, чтобы избежать конфликтов и ошибок.
Если у вас есть дополнительные вопросы или вы столкнулись с проблемами, не стесняйтесь задавать их на профессиональных форумах или сообществах разработчиков, где вы можете получить помощь и рекомендации.