why woocommerce api only do not upload images from local computer?

I want to upload images on my computer to a wordpress website, however the woocommerce api is only working well with everything except images on my computer.
Here is the code I am using when it works just fine, creates the product and uploads the image:

require __DIR__ . '/vendor/autoload.php';
use AutomatticWooCommerceClient;

$woocommerce = new Client(
    'site_url_example.com',
    'ck_00000000000000000',
    'cs_11111111111111111',
    [ 'version' => 'wc/v3', ]
);

$data = [
    'name' => 'Premium Quality',
    'type' => 'simple',
    'regular_price' => '21.99',
    'description' => 'Pellentesque hec eu libero sit amet quamleo.',
    'short_description' => 'Pellentesque habitant morbi tristiqeq.',
    'categories' => [ [ 'id' => 35 ] ],
    'images' => [ [ 'src' => 'https://www.gettyimages.pt/gi-resources/images/500px/983794168.jpg' ] ]
];
$result = $woocommerce->post('products', $data);

print_r($result);

then I change the image path from online somewhere to a path of my computer like so:

'images' => [ [ 'src' => 'C:Users579Desktop2.1.jpg' ] ]

But doesn’t create the product or uploads the image throwing this error: Invalid URL Provided. [woocommerce_product_image_upload_error]

My question is how to upload images from local pc to wordpress website?

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

Because you are just passing the location of the image, not the image itself. So you are basically telling WordPress where your image is located, on your local computer. The server will not be able to access files on your local computer.

Solve it by first uploading the image to WordPress, and then pass in the image ID in your WooCommmerce import script.

Use the script below, to be able to do the following:

'images' => [ file_or_url_to_wordpress_image('C:Users579Desktop2.1.jpg') ]

What you need to add to your file:

DEFINE('WORDPRESS_BASE_URL', 'https://remote-wordpress-site.com');

// Your WordPress username
DEFINE('WORDPRESS_LOGIN', 'admin');

// Create a new Application Password in dashboard /wp-admin/profile.php
DEFINE('WORDPRESS_APPLICATION_PASSWORD', 'TBIg TthU rJG3 moMe Qjor Vtl2');



/**
 * Takes a file or a url and uploads it to WordPress
 */
function file_or_url_to_wordpress_image($image_path){

    // If the input is a URl, we can process it
    if (filter_var($image_path, FILTER_VALIDATE_URL)) {
        return ['src'=>$image_path];
    }

     // Make sure the image exist
    if (!file_exists($image_path)){return;}

    // Load the image
    $file = file_get_contents( $image_path );

    // Get the filename
    $filename = basename($image_path);

    // Initiate curl.
    $ch = curl_init();
    curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt( $ch, CURLOPT_URL, WORDPRESS_BASE_URL .'/wp-json/wp/v2/media/' );
    curl_setopt( $ch, CURLOPT_POST, 1 );
    curl_setopt( $ch, CURLOPT_POSTFIELDS, $file );
    curl_setopt( $ch, CURLOPT_HTTPHEADER, [
        "Content-Disposition: form-data; filename="$filename"",
        'Authorization: Basic ' . base64_encode( WORDPRESS_LOGIN. ':' . WORDPRESS_APPLICATION_PASSWORD ),
    ] );
    $result = curl_exec( $ch );
    curl_close( $ch );

    // Decode the response
    $api_response = json_decode($result);

    // Return the ID of the image that is now uploaded to the WordPress site.
    return ['id' => $api_response];
}


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x