
Зробіть контент вашого магазину адаптивним та легким для навігації гарантує покращений досвід клієнтів та безпроблемні покупки. З огляду на це, категорії товарів , ймовірно, буде вашим першим кроком.
Щоб призначити товари категоріям, вам потрібно вибрати їх вручну в розділі Товари в категорії в адміністративній панелі. Однак це може бути досить нудно, особливо якщо у вас великий каталог.
Таким чином, ви можете захотіти оптимізувати цей процес, і сьогодні ви дізнаєтеся, як це зробити. Продовжуйте читати, щоб дізнатися, як програмно додавати товари до категорії в Magento 2.
Додавання товарів до категорії за допомогою ін'єкції залежностей
Одним з найпоширеніших методів додавання товарів до категорій є ін'єкція залежностей. Просто скористайтеся наведеним нижче кодом.
<?php
declare(strict_types=1);
namespace Vendor\Module\Model;
use Magento\Catalog\Api\CategoryLinkManagementInterface;
use Magento\Catalog\Model\ResourceModel\Product\CollectionFactory as ProductCollectionFactory;
class AssignProductsToCategoryService
{
/**
* @var CategoryLinkManagementInterface
*/
protected $categoryLinkManagement;
/**
* @var ProductCollectionFactory
*/
protected $productCollectionFactory;
/**
* @param CategoryLinkManagementInterface $categoryLinkManagement
* @param ProductCollectionFactory $productCollectionFactory
*/
public function __construct(
CategoryLinkManagementInterface $categoryLinkManagement,
ProductCollectionFactory $productCollectionFactory
)
{
$this->categoryLinkManagement = $categoryLinkManagement;
$this->productCollectionFactory = $productCollectionFactory;
}
/**
* @param array $productSkus
* @param int $categoryId
* @return void
*/
public function execute(array $productSkus, int $categoryId): void
{
$products = $this->productCollectionFactory->create()
->addAttributeToFilter('sku', ['in' => $productSkus]);
foreach ($products as $product) {
$this->categoryLinkManagement
->assignProductToCategories(
$product->getSku(),
array_merge([$categoryId], $product->getCategoryIds())
);
}
}
}
Додавання товарів до категорії за допомогою менеджера об'єктів
Крім того, ви можете додавати товари до категорій за допомогою менеджер об'єктів . Однак переконайтеся, що ви не використовуєте його безпосередньо, оскільки менеджер об'єктів приховує реальні залежності класу.
<?php
use Magento\Framework\App\Bootstrap;
require 'app/bootstrap.php';
$bootstrap = Bootstrap::create(BP, $_SERVER);
$objectManager = $bootstrap->getObjectManager();
$state = $objectManager->get('\Magento\Framework\App\State');
$state->setAreaCode('adminhtml');
$productCollectionFactory =
$objectManager->get('\Magento\Catalog\Model\ResourceModel\Product\CollectionFactory');
$categoryLinkManagement =
$objectManager->get('\Magento\Catalog\Api\CategoryLinkManagementInterface');
$categoryId = 46;
$productSkus = ['24-MB01', '24-MB04'];
$products = $productCollectionFactory->create()
->addAttributeToFilter('sku', ['in' => $productSkus]);
foreach ($products as $product) {
$categoryLinkManagement
->assignProductToCategories(
$product->getSku(),
array_merge([$categoryId], $product->getCategoryIds())
);
}
Примітка: під час застосування будь-якого з вищезазначених методів товари будуть призначені новим категоріям та видалені з тих, до яких вони були додані раніше.
Додавання товарів до категорій у Magento програмним способом значно заощаджує ваш час. Однак ви можете ще більше мінімізувати труднощі, створення динамічних правил категорій . Таким чином, товари будуть автоматично додаватися до динамічних категорій на основі встановлених вами умов.