Як програмно додавати товари до категорії в Magento?

Зробіть контент вашого магазину адаптивним та легким для навігації гарантує покращений досвід клієнтів та безпроблемні покупки. З огляду на це, категорії товарів , ймовірно, буде вашим першим кроком.

Щоб призначити товари категоріям, вам потрібно вибрати їх вручну в розділі Товари в категорії в адміністративній панелі. Однак це може бути досить нудно, особливо якщо у вас великий каталог.

Таким чином, ви можете захотіти оптимізувати цей процес, і сьогодні ви дізнаєтеся, як це зробити. Продовжуйте читати, щоб дізнатися, як програмно додавати товари до категорії в 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 програмним способом значно заощаджує ваш час. Однак ви можете ще більше мінімізувати труднощі, створення динамічних правил категорій . Таким чином, товари будуть автоматично додаватися до динамічних категорій на основі встановлених вами умов.