Skip to content

Instantly share code, notes, and snippets.

@denzildoyle
Last active April 5, 2021 19:40
Show Gist options
  • Save denzildoyle/503d5e196aece9790e6410580253dc1b to your computer and use it in GitHub Desktop.
Save denzildoyle/503d5e196aece9790e6410580253dc1b to your computer and use it in GitHub Desktop.
<?php
/**
* Fired during plugin activation
*
* @link denzildoyle.me
* @since 1.0.0
*
* @package
* @subpackage
*/
/**
* Fired during plugin activation.
*
* This class defines all code necessary to run during the plugin's activation.
*
* @since 1.0.0
* @package
* @subpackage
* @author Denzil Doyle <denzildoyle@gmail.com>
*/
class Upload_Activator {
/**
* Short Description. (use period)
*
* Long Description.
*
* @since 1.0.0
*/
public static function activate() {
function echo_log( $what )
{
echo '<pre>'.print_r( $what, true ).'</pre>';
}
try {
$user_id = '';
$token = '';
$url = '';
try {
$curl_connection = curl_init($url);
curl_setopt($curl_connection, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($curl_connection, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl_connection, CURLOPT_SSL_VERIFYPEER, false);
//Data are stored in $data
$data = json_decode(curl_exec($curl_connection), true);
// echo_log($data);
// exit();
curl_close($curl_connection);
$index = 0;
foreach($data['data'] as $media){
if($index == 1){
echo_log($media);
exit();
}
$objProduct = new WC_Product();
// ($media['caption'] !="" || $media['caption'] != null || isset($media['caption'])) ? $objProduct->set_name($media['caption']) : $objProduct->set_name("test".$index);
$objProduct->set_name($media['caption']);
$objProduct->set_status("publish"); // can be publish,draft or any wordpress post status
$objProduct->set_catalog_visibility('visible'); // add the product visibility status
$objProduct->set_description($media['caption']);
// ($media['caption'] !="" || $media['caption'] != null || isset($media['caption'])) ? $objProduct->set_sku($media['caption']) : $objProduct->set_sku("test".$index);
$objProduct->set_sku("product-sku"); //can be blank in case you don't have sku, but You can't add duplicate sku's
$objProduct->set_price(10.55); // set product price
$objProduct->set_regular_price(10.55); // set product regular price
$objProduct->set_manage_stock(true); // true or false
$objProduct->set_stock_quantity(10);
$objProduct->set_stock_status('instock'); // in stock or out of stock value
$objProduct->set_backorders('no');
$objProduct->set_reviews_allowed(true);
$objProduct->set_sold_individually(false);
$objProduct->set_category_ids(array(1,2,3)); // array of category ids, You can get category id from WooCommerce Product Category Section of Wordpress Admin
function uploadMedia($image_url){
require_once(ABSPATH . 'wp-admin/includes/media.php');
require_once(ABSPATH . 'wp-admin/includes/file.php');
require_once(ABSPATH . 'wp-admin/includes/image.php');
if(!function_exists('wp_get_current_user')) {
include(ABSPATH . "wp-includes/pluggable.php");
}
$attachments = media_sideload_image($image_url,0);
$attachments = get_posts(array(
'post_type' => 'attachment',
'post_status' => null,
'post_parent' => 0,
'orderby' => 'post_date',
'order' => 'DESC'
));
return $attachments[0]->ID;
}
// above function uploadMedia, I have written which takes an image url as an argument and upload image to wordpress and returns the media id, later we will use this id to assign the image to product.
$productImagesIDs = array(); // define an array to store the media ids.
$images = array($media['media_url']); // images url array of product
foreach($images as $image){
$mediaID = uploadMedia($image); // calling the uploadMedia function and passing image url to get the uploaded media id
if($mediaID) $productImagesIDs[] = $mediaID; // storing media ids in a array.
}
if($productImagesIDs){
$objProduct->set_image_id($productImagesIDs[0]); // set the first image as primary image of the product
//in case we have more than 1 image, then add them to product gallery.
if(count($productImagesIDs) > 1){
$objProduct->set_gallery_image_ids($productImagesIDs);
}
}
$product_id = $objProduct->save();
$index++;
}
} catch(Exception $e) {
return $e->getMessage();
}
// $variations = array(
// array("regular_price"=>10.11,"price"=>10.11,"sku"=>"ABC1","attributes"=>array(array("name"=>"Size","option"=>"L"),array("name"=>"Color","option"=>"Red")),"manage_stock"=>1,"stock_quantity"=>10),
// array("regular_price"=>10.11,"price"=>10.11,"sku"=>"ABC2","attributes"=>array(array("name"=>"Size","option"=>"XL"),array("name"=>"Color","option"=>"Red")),"manage_stock"=>1,"stock_quantity"=>10)
// );
// if($variations){
// try{
// foreach($variations as $variation){
// $objVariation = new WC_Product_Variation();
// $objVariation->set_price($variation["price"]);
// $objVariation->set_regular_price($variation["regular_price"]);
// $objVariation->set_parent_id($product_id);
// if(isset($variation["sku"]) && $variation["sku"]){
// $objVariation->set_sku($variation["sku"]);
// }
// $objVariation->set_manage_stock($variation["manage_stock"]);
// $objVariation->set_stock_quantity($variation["stock_quantity"]);
// $objVariation->set_stock_status('instock'); // in stock or out of stock value
// $var_attributes = array();
// foreach($variation["attributes"] as $vattribute){
// $taxonomy = "pa_".wc_sanitize_taxonomy_name(stripslashes($vattribute["name"])); // name of variant attribute should be same as the name used for creating product attributes
// $attr_val_slug = wc_sanitize_taxonomy_name(stripslashes($vattribute["option"]));
// $var_attributes[$taxonomy]=$attr_val_slug;
// }
// $objVariation->set_attributes($var_attributes);
// $objVariation->save();
// }
// }
// catch(Exception $e){
// // handle exception here
// }
// }
echo("SHOW THIS MESSAGE:" . $product_id);
} catch (Exception $ex) {
/* ERROR LIKE "SKU ALREADY EXISTS" */
echo("SHOW THIS MESSAGE:" . $ex->getMessage());
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment