为什么WooCommerce API只从本地计算机上传图像?

时间:2021-06-12 作者:tiago calado

我想把我电脑上的图片上传到wordpress网站,但是woocommerce api只适用于我电脑上的图片以外的所有内容。以下是我在正常工作时使用的代码,创建产品并上载图像:

require __DIR__ . \'/vendor/autoload.php\';
use Automattic\\WooCommerce\\Client;

$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);
然后,我将图像路径从联机某处更改为计算机的路径,如下所示:

\'images\' => [ [ \'src\' => \'C:\\Users\\579\\Desktop\\2.1.jpg\' ] ]

但不会创建产品或上载图像,从而引发以下错误:提供的URL无效。[woocommerce\\u product\\u image\\u upload\\u错误]

我的问题是如何将图像从本地pc上传到wordpress网站?

1 个回复
最合适的回答,由SO网友:Fabian Mossberg 整理而成

因为您只是传递图像的位置,而不是图像本身。因此,您基本上是在本地计算机上告诉WordPress您的图像所在的位置。服务器将无法访问本地计算机上的文件。

首先将图像上传到WordPress,然后在Woocommerce导入脚本中传入图像ID,就可以解决这个问题。

使用以下脚本,可以执行以下操作:

\'images\' => [ file_or_url_to_wordpress_image(\'C:\\Users\\579\\Desktop\\2.1.jpg\') ]

需要添加到文件中的内容:

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];
}

相关推荐

WP-API:获取多个类别的帖子

比方说,我有两个类别,\'color\' 和\'temperature\'. 每一个都有许多子类别。当我转到如下URL时,Wordpress在显示请求类别中的帖子方面做得很好:http://www.example.com/category/pink+warm 现在我想对json-rest-api 插件,通过REST请求。有可能吗?如何使用REST请求获取多个类别的帖子(不是在任何一个类别中,而是在所有请求的类别中)?我尝试了不同的URI,但失败了。