Cómo agregar productos en WooCommerce con código PHP

10 mar 2014, 21:43:34
Vistas: 107K
Votos: 40

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?

2
Comentarios

Agregar productos mediante PHP será bastante trabajo ya que hay muchas cosas diferentes que insertar/actualizar. Tal vez esta respuesta y los plugins relacionados te ayuden a realizar el trabajo más fácilmente :)

Sven Sven
10 mar 2014 23:46:26

En 2017, usa la REST API como se sugiere en https://stackoverflow.com/a/40133117/5749914.

Elliott Beach Elliott Beach
17 jun 2017 20:22:49
Todas las respuestas a la pregunta 1
7
60

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 :)

11 mar 2014 12:42:27
Comentarios

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.

user3361421 user3361421
11 mar 2014 15:10:58

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?

prelite prelite
25 sept 2014 21:27:27

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.

EHerman EHerman
3 dic 2014 20:34:22

@prelite ¿no es el post_excerpt la descripción corta?

Daniel Daniel
3 mar 2017 15:04:30

Funciona exactamente como se esperaba

Alaksandar Jesus Gene Alaksandar Jesus Gene
10 dic 2018 23:27:10

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

Bjorn Bjorn
21 dic 2018 07:57:25

¿Cómo configurar la imagen principal del producto y la galería?

Muzaffar Mahmood Muzaffar Mahmood
14 feb 2020 09:37:00
Mostrar los 2 comentarios restantes