Cómo agregar productos en WooCommerce con código PHP
Quiero agregar productos con código PHP como el siguiente:
$post_information = array(
'post_title' => 'nuevo artículo tienda',
'post_content' => 'este es un nuevo artículo de la tienda',
'post_type' => 'post',
'post_status' => 'publish'
);
$post_id = wp_insert_post($post_information);
pero este código necesita optimizarse para WooCommerce, como el tipo de post, guid y metadatos, etc. ¿Alguien puede ayudar?

El método a continuación ahora está obsoleto, ya que WooCommerce ha agregado la tabla wc_product_meta_lookup
, que también necesita ser actualizada con algunos de los valores meta.
Woo ahora proporciona una interfaz CRUD, así que úsala en su lugar.
$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 );
// etc...
$product->save();
Revisor, siéntete libre de editar como consideres adecuado.
Es bastante fácil una vez que has resuelto los datos agregados en el post meta. El problema que estoy teniendo es agregar productos descargables a la tienda.
A continuación está el código que estoy usando, enumera todo el post meta que utiliza WooCommerce. Esto publica un producto, sin embargo, el enlace de descarga no se adjunta.
Originalmente, cuando comencé, cometí un error con el array que almacena el enlace de descarga, produciendo un enlace incorrecto "b" seguido de un segundo archivo de descarga que sí era correcto. Después de corregir el array para que coincida con el de un producto agregado manualmente, ya no muestra un archivo. Si alguien tiene información sobre esto, sería muy apreciada.
$post = array(
'post_author' => $user_id,
'post_content' => '',
'post_status' => "publish",
'post_title' => $product->part_num,
'post_parent' => '',
'post_type' => "product",
);
// Crear post
$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', "" );
// Las rutas de archivo se almacenarán en un array indexado por md5(ruta del archivo)
$downdloadArray =array('name'=>"Test", 'file' => $uploadDIR['baseurl']."/video/".$video);
$file_path =md5($uploadDIR['baseurl']."/video/".$video);
$_file_paths[ $file_path ] = $downdloadArray;
// Conceder permiso a cualquier archivo recién agregado en órdenes existentes para este producto
// 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', '');
Espero que esto cumpla con el estándar de calidad :)

Después de semanas de búsqueda, resulta que tenía un espacio después de "_downloadable_files", por lo que no era reconocido por WooCommerce. También he leído que los archivos pueden estar almacenados en la carpeta de subidas de WooCommerce.

Con todas esas llamadas a update_post_meta no encontré una manera de establecer la descripción corta del producto añadido... ¿Cómo puedo establecer la descripción corta de un producto con código PHP?

He estado trabajando en algo similar a esto, pero descubrí que después de usar wp_insert_post el post se crea y los datos se ingresan, pero el producto no aparece en la página de la tienda WooCommerce, y la categoría no aparece en la barra lateral. Muy extraño ya que el post y todos sus datos existen en el backend.

Ahora puedes usar 'meta_input' para establecer todos los metadatos dentro del método wp_insert_post()
.
