提问者:小点点

从csv更新WooCommerce产品库存


结合本主题更新WooCommerce产品价格和库存,并结合fgetcsvfopen

我的目标是从csv文件更新woocommerce网站上的产品库存。在cron和wordpress的restapi的帮助下,我几乎可以实时更新股票。如果完成了,我可能会尝试将其放入函数中。php,以便每次加载站点时库存都会发生变化。

示例。csv有两列:SKUinStock

第1步是把csv放到一个数组中。使用fgetcsvfopen,可以这样做:

$csv = array();
$file = fopen('EXAMPLE.csv', 'r');

while (($result = fgetcsv($file, 0, ";")) !== false)
{
    $csv[] = $result;
}

现在,我将csv作为一个数组。第二步是使用此数组更改wordpress中的库存量。首先检查SKU是否存在,如果存在,则更改与SKU相关的产品的库存数量。

继续代码

$arr = print_r($csv);
        
    foreach ( $arr as $single ) {
        $product_id = wc_get_product_id_by_sku( $single['sku'] );
        if ( ! $product_id ) {
            continue;
        }
        $product = new WC_Product( $product_id );
        if ( ! $product ) {
            continue;
        }
    
        $product->set_stock_quantity( $single['inStock'] );
        $product->save();
    }
    
    
    ?>

有一个问题:$arr=print_r($csv);没有返回正确的数组。当我手动将其更改为:

$arr = array(
    array( 'SKU' => '123456787', 'inStock' => '2' ),
    array( 'SKU' => '123456788', 'inStock' => '1' ),
    array( 'SKU' => '123456789', 'inStock' => '8' )
);

这就是问题所在<代码>$arr=打印($csv)输出

Array
(
    [0] => Array
        (
            [0] => EAN
            [1] => inStock
        )

    [1] => Array
        (
            [0] => 123456787
            [1] => 2
        )

    [2] => Array
        (
            [0] => 123456788
            [1] => 1
        )

    [3] => Array
        (
            [0] => 123456789
            [1] => 8
        )
)

我搜索了一下,发现有各种各样的解决方案,但都没有结合起来。也许这是一个简单的数组修复。我几乎什么都试过了。。你能帮帮我吗?最好的解决方案是什么?


共1个答案

匿名用户

找到了答案,得到了朋友的大力帮助!

要制作正确的阵列,请执行以下操作:

$csv[] = $result;

与:

$csv[] = array( 'SKU' => $result[0], 'inStock' => $result[1]);

而且

删除$arr=print\r($csv)

代码变成:

$csv = array();
$file = fopen('example.csv', 'r');


while (($result = fgetcsv($file, 0, ";")) !== false)
{
    $csv[] = array( 'SKU' => $result[0], 'Stock' => $result[1]);
}

    
foreach ( $csv as $single ) {
        $product_id = wc_get_product_id_by_sku( $single['SKU'] );
        if ( ! $product_id ) {
            continue;
        }
        $product = new WC_Product( $product_id );
        if ( ! $product ) {
            continue;
        }
    
        $product->set_stock_quantity( $single['Stock'] );
        $product->save();
    }

这样做的目的是,它读取包含两列的csv:SKUStock,然后检查电子商务中是否存在SKU。如果这样做,它将改变SKU的库存。