40

I want to add products with PHP code like below:

$post_information = array(
  'post_title' => 'new item shop',
  'post_content' => 'this is new item shop',
  'post_type' => 'post',
  'post_status' => 'publish'
);
$post_id = wp_insert_post($post_information);

but this code optimize for WooCommerce such as post type and guid and metadata and... Can someone help?

2
  • 1
    Adding products via PHP will be quite a lot of work as there a lot of different things to insert/update. Maybe this answer and the related plugins will help you to get the job done more easily :)
    – Sven
    Mar 10 '14 at 21:46
  • 2
    In 2017, use the REST API as suggested in stackoverflow.com/a/40133117/5749914. Jun 17 '17 at 17:22
60

The method below is now out of date as WooCommerce have added the wc_product_meta_lookup table which also needs to be updated with some of the meta values.

Woo have now provided a CRUD interface so use that instead.

            $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();

Reviewer, please feel free to edit as you see fit.


Its pretty easy one you have worked out the data added in the post meta. Trouble I am having is adding downloadable products to the store.

below is the code i am using it lists all the post meta that is used by woo commerce. This publishes a product however the download link will not attach.

Originally when i started i made an error with the array that stores the download link producing a bad link "b" followed by a second download file that was correct. After fixing the array to match that of a product manually added it no loner will show a file. If anyone has info on this it would be greatly appreciated

$post = array(
    'post_author' => $user_id,
    'post_content' => '',
    'post_status' => "publish",
    'post_title' => $product->part_num,
    'post_parent' => '',
    'post_type' => "product",
);

//Create 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', "" );

// file paths will be stored in an array keyed off md5(file path)
$downdloadArray =array('name'=>"Test", 'file' => $uploadDIR['baseurl']."/video/".$video);
    
$file_path =md5($uploadDIR['baseurl']."/video/".$video);
    
    
$_file_paths[  $file_path  ] = $downdloadArray;
// grant permission to any newly added files on any existing orders for this product
// 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', '');

hope this conforms to the quality standard :)

7
  • Edit after weeks of searching it turns out that i have a space after the "_downloadable_files" so it wasnt recognized by woo commerce. Also i have read that the files my be stored under the woo commerce uploads folder. Mar 11 '14 at 13:10
  • With all those update_post_meta I didn't find a way to set the short description of the product added...How can I set the short description of a product with php code?
    – prelite
    Sep 25 '14 at 18:27
  • 2
    I've been working on something similar to this, but found that after using wp_insert_post the post is created and data entered, but the post doesn't appear in the woo shop page, and the category doesn't appear in the sidebar. Very strange as the post and all of it's data exists in the backed.
    – EHerman
    Dec 3 '14 at 18:34
  • @prelite isn't the post_excerpt the short-description?
    – Daniel
    Mar 3 '17 at 13:04
  • 1
    Now you can use 'meta_input' to set all the meta within the wp_insert_post() method.
    – Bjorn
    Dec 21 '18 at 5:57

Not the answer you're looking for? Browse other questions tagged or ask your own question.