Как добавить товар в WooCommerce с помощью PHP кода
Я хочу добавить товары с помощью PHP кода подобно этому:
$post_information = array(
'post_title' => 'новый товар магазина',
'post_content' => 'это новый товар магазина',
'post_type' => 'post',
'post_status' => 'publish'
);
$post_id = wp_insert_post($post_information);
но этот код нужно оптимизировать для WooCommerce, включая тип записи (post type), guid и метаданные и... Может кто-нибудь помочь?

Приведенный ниже метод устарел, так как WooCommerce добавили таблицу wc_product_meta_lookup
, которая также должна обновляться с некоторыми мета-значениями.
WooCommerce теперь предоставляет CRUD-интерфейс, поэтому лучше использовать его.
$post_id = wp_insert_post( array(
'post_title' => $title,
'post_type' => 'product',
'post_status' => 'publish',
'post_content' => $body,
));
$product = wc_get_product( $post_id );
$product->set_sku( $sku );
// и так далее...
$product->save();
Рецензент, не стесняйтесь вносить правки по своему усмотрению.
Это довольно просто, когда разберешься с данными, добавляемыми в пост-мета. Проблема, с которой я столкнулся — добавление скачиваемых товаров в магазин.
Ниже приведен код, который я использую. В нем перечислены все пост-мета, используемые WooCommerce. Товар публикуется, но ссылка на скачивание не прикрепляется.
Изначально я допустил ошибку в массиве, который хранит ссылку на скачивание, из-за чего генерировалась некорректная ссылка "b" и вторая правильная ссылка. После исправления массива в соответствии с тем, что используется при ручном добавлении товара, файл больше не отображается. Если у кого-то есть информация по этому поводу, буду очень признателен.
$post = array(
'post_author' => $user_id,
'post_content' => '',
'post_status' => "publish",
'post_title' => $product->part_num,
'post_parent' => '',
'post_type' => "product",
);
// Создаем пост
$post_id = wp_insert_post( $post, $wp_error );
if($post_id){
$attach_id = get_post_meta($product->parent_id, "_thumbnail_id", true);
add_post_meta($post_id, '_thumbnail_id', $attach_id);
}
wp_set_object_terms( $post_id, 'Races', 'product_cat' );
wp_set_object_terms( $post_id, 'simple', 'product_type');
update_post_meta( $post_id, '_visibility', 'visible' );
update_post_meta( $post_id, '_stock_status', 'instock');
update_post_meta( $post_id, 'total_sales', '0');
update_post_meta( $post_id, '_downloadable', 'yes');
update_post_meta( $post_id, '_virtual', 'yes');
update_post_meta( $post_id, '_regular_price', "1" );
update_post_meta( $post_id, '_sale_price', "1" );
update_post_meta( $post_id, '_purchase_note', "" );
update_post_meta( $post_id, '_featured', "no" );
update_post_meta( $post_id, '_weight', "" );
update_post_meta( $post_id, '_length', "" );
update_post_meta( $post_id, '_width', "" );
update_post_meta( $post_id, '_height', "" );
update_post_meta( $post_id, '_sku', "");
update_post_meta( $post_id, '_product_attributes', array());
update_post_meta( $post_id, '_sale_price_dates_from', "" );
update_post_meta( $post_id, '_sale_price_dates_to', "" );
update_post_meta( $post_id, '_price', "1" );
update_post_meta( $post_id, '_sold_individually', "" );
update_post_meta( $post_id, '_manage_stock', "no" );
update_post_meta( $post_id, '_backorders', "no" );
update_post_meta( $post_id, '_stock', "" );
// Пути к файлам будут храниться в массиве с ключами md5(путь к файлу)
$downdloadArray =array('name'=>"Test", 'file' => $uploadDIR['baseurl']."/video/".$video);
$file_path =md5($uploadDIR['baseurl']."/video/".$video);
$_file_paths[ $file_path ] = $downdloadArray;
// Даем разрешение на добавление новых файлов в существующие заказы этого товара
// do_action( 'woocommerce_process_product_file_download_paths', $post_id, 0, $downdloadArray );
update_post_meta( $post_id, '_downloadable_files', $_file_paths);
update_post_meta( $post_id, '_download_limit', '');
update_post_meta( $post_id, '_download_expiry', '');
update_post_meta( $post_id, '_download_type', '');
update_post_meta( $post_id, '_product_image_gallery', '');
Надеюсь, это соответствует стандартам качества :)

После недель поисков оказалось, что у меня был пробел после "_downloadable_files", из-за чего WooCommerce не распознавал это поле. Также я прочитал, что файлы могут храниться в папке загрузок WooCommerce.

Со всеми этими update_post_meta я не нашел способа установить краткое описание добавляемого товара... Как можно установить краткое описание товара с помощью PHP кода?

Я работал над чем-то похожим, но обнаружил, что после использования wp_insert_post запись создается и данные вводятся, но товар не появляется на странице магазина WooCommerce, а категория не отображается в сайдбаре. Очень странно, поскольку запись и все ее данные существуют в админке.

Теперь вы можете использовать 'meta_input' для установки всех метаданных в методе wp_insert_post()
.
