magento 2 regenerate product url php code

No comments
please follow the step as i show below

1) backup you database 

2) create one controller name Producturl.php

3) copy my code into that controller 


<?php  

namespace Company\Module\Controller\Producturl;


use Magento\CatalogUrlRewrite\Model\ProductUrlRewriteGenerator;
use Magento\UrlRewrite\Service\V1\Data\UrlRewrite;
use Magento\Store\Model\Store;

class Producturl extends \Magento\Framework\App\Action\Action
{
       public function execute()
    { 
           //// for regenerate product url /////////////////
             $objectManager = \Magento\Framework\App\ObjectManager::getInstance();   
             $this->collection = $objectManager->create('\Magento\Catalog\Model\ResourceModel\Product\Collection');

             $this->productUrlRewriteGenerator = $objectManager->create('\Magento\CatalogUrlRewrite\Model\ProductUrlRewriteGenerator');
             
             $this->urlPersist = $objectManager->create('\Magento\UrlRewrite\Model\UrlPersistInterface');

             $this->collection->addAttributeToSelect(['url_path', 'url_key']);
              $list = $this->collection->load();
              $store_id=1; // your store id 
              
              foreach($list as $product) {                
                      if($store_id === Store::DEFAULT_STORE_ID)
                          $product->setStoreId($store_id);
                      $this->urlPersist->deleteByData([
                          UrlRewrite::ENTITY_ID => $product->getId(),
                          UrlRewrite::ENTITY_TYPE => ProductUrlRewriteGenerator::ENTITY_TYPE,
                          UrlRewrite::REDIRECT_TYPE => 0,
                          UrlRewrite::STORE_ID => $store_id
                      ]);
                      try {
                          $this->urlPersist->replace(
                              $this->productUrlRewriteGenerator->generate($product)
                          );
                      } catch(\Exception $e) {
                          $out->writeln('<error>Duplicated url for '. $product->getId() .'</error>');
                      }
              }
    }


}


?>

No comments :

Post a Comment