Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Programmatically add Magento products to categories

Tags:

I am using Magento 1.4.0.1. I have over 21000 simple products, each entered into a single category. There are hundreds of categories in my site. Some products belong in multiple categories. Is there some way for me to programmatically add products into multiple categories?

like image 783
robgt Avatar asked Jun 27 '11 10:06

robgt


2 Answers

In PHP code you can put them into the category while you are importing them.

Say you have a product called $product and a category ID called $category_id

You can set the categories which a product belongs to by doing the following

$categories = array($category_id);
$product->setCategoryIds($categories);
$product->save();

If the product already has categories and you'd like to add one more then you can use getCategoryIds() like this:

$categories = $product->getCategoryIds();
$categories[] = $categoryId;
$product->setCategoryIds($categories);
$product->save();

Or, as mentioned by Joshua Peck in the comments, you can use the category_api model to add or remove a product from a category without affecting it's current category assignments:

Mage::getSingleton('catalog/category_api')
  ->assignProduct($category->getId(),$p‌​roduct->getId());

Mage::getSingleton('catalog/category_api')
  ->removeProduct($category->getId(),$p‌​roduct->getId());
like image 143
Josh Pennington Avatar answered Oct 12 '22 00:10

Josh Pennington


I just want to add that you can remove and add with getSingleton category API:

To Remove product from category:

Mage::getSingleton('catalog/category_api')->removeProduct($category->getId(),$p‌​roduct->getId());

To Add Product to Category:

Mage::getSingleton('catalog/category_api')->assignProduct($category->getId(),$p‌​roduct->getId());

This will not overwrite any categories the product is already in

like image 23
Joshua Pack Avatar answered Oct 12 '22 01:10

Joshua Pack