Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php catalogProductUpdate多个类别ID_Php_Magento - Fatal编程技术网

Php catalogProductUpdate多个类别ID

Php catalogProductUpdate多个类别ID,php,magento,Php,Magento,我正在尝试更新Magento中许多产品的网站和类别ID,我遇到了一些问题。这是我的密码: $client = new SoapClient('http://magentohost/api/v2_soap/?wsdl'); $session = $client->login('apiUser', 'apiKey'); $productarray = array("12345" => "1,2,3", "67890" => "1,5,6"); foreach ($producta

我正在尝试更新Magento中许多产品的网站和类别ID,我遇到了一些问题。这是我的密码:

$client = new SoapClient('http://magentohost/api/v2_soap/?wsdl');
$session = $client->login('apiUser', 'apiKey');
$productarray = array("12345" => "1,2,3", "67890" => "1,5,6");

foreach ($productarray as $product_id => $cats) {
    $update = array(
                'websites' => array(1,2,3), 
                'categories' => array($cats)
            );
    $updatewebsite = $client->catalogProductUpdate($session,$product_id,$update);
}
当我运行这段代码时,它会将产品更改为具有新的网站ID,但它只会使用$cats中的第一个ID更新类别ID

例如,“12345”将只具有类别ID 1,而不是其应有的2或3

当我打印出每种产品的$cats时,它会正确地显示信息(上面的示例为“1,2,3”和“1,5,6”)

我不确定我做了什么,但我似乎无法让它更新所有类别ID。我有数千种产品要运行,它们都有不同的类别ID,所以我不能手动执行此操作

编辑-已解决

我已经更改了代码,所以现在是这样的(可以正常工作):


categories属性需要一个ID数组,而您传递的是一个字符串。尝试使用
explode()
将其分解:

foreach ($productarray as $product_id => $cats) {
    $update = array(
        'websites' => array(1,2,3), 
        'categories' => explode(',', $cats)
    );
    $updatewebsite = $client->catalogProductUpdate($session,$product_id,$update);
}

你试过传递
数组(1,2,3)
而不是
“1,2,3”
(字符串)吗?我刚刚试过用
数组(1,2,3)
替换
数组($cats)
,这对产品有效-但是,我在手动替换,我不能对所有产品都这样做。数组中有
$cats
是否有问题?我能做些什么来改变它吗?使用explode将逗号分隔的字符串拆分成一个数组我在$cats上使用explode,并将
数组($cats)
替换为
$cats
,这样就行了!我编辑了我的问题以展示我所做的,谢谢。
foreach ($productarray as $product_id => $cats) {
    $update = array(
        'websites' => array(1,2,3), 
        'categories' => explode(',', $cats)
    );
    $updatewebsite = $client->catalogProductUpdate($session,$product_id,$update);
}