Type
magento2-module
Add into Magento 2 a CLI feature which allow to regenerate a Url rewrites of products and categories
magento2-module
OSL-3.0, AFL-3.0
None
None
None
None
None
None
Magento 2 "Regenerate Url rewrites" extension add a CLI feature which allow to regenerate a Url rewrites of products/categories in all stores or specific store. Extension homepage: https://github.com/olegkoval/magento2-regenerate_url_rewrites
$> composer require olegkoval/magento2-regenerate-url-rewrites
extract files from an archive
deploy files into Magento2 folder app/code/OlegKoval/RegenerateUrlRewrites
enable extension (use Magento 2 command line interface *):
$> php bin/magento module:enable OlegKoval_RegenerateUrlRewrites
to make sure that the enabled module is properly registered, run 'setup:upgrade':
$> php bin/magento setup:upgrade
[if needed] re-deploy static view files:
$> php bin/magento setup:static-content:deploy
$> php bin/magento ok:urlrewrites:regenerate --entity-type=product
because product
entity type is default - you can skip it:
$> php bin/magento ok:urlrewrites:regenerate
$> php bin/magento ok:urlrewrites:regenerate --entity-type=category
** take into account that this is a heavy process, see section "INFO".
to regenerate URL rewrites in the specific store view (e.g.: store view id is "2") use option --store-id
:
$> php bin/magento ok:urlrewrites:regenerate --store-id=2
to regenerate URL rewrites of specific product use option product-id
(e.g.: product ID is "122"):
$> php bin/magento ok:urlrewrites:regenerate --entity-type=product --product-id=122
or
$> php bin/magento ok:urlrewrites:regenerate --product-id=122
products-range
(e.g.: regenerate for all products with ID between "101" and "152"):
>$> php bin/magento ok:urlrewrites:regenerate --entity-type=product --products-range=101-152
* if in the range you have a gap of ID's (in range 101-152 products with ID's 110, 124, 150 not exists) - do not worry, script handle this.
or
$> php bin/magento ok:urlrewrites:regenerate --products-range=101-152
to regenerate URL rewrites of specific category use option category-id
(e.g.: category ID is "15"):
$> php bin/magento ok:urlrewrites:regenerate --entity-type=category --category-id=15
to regenerate URL rewrites of specific categories range use option categories-range
(e.g.: regenerate for all categories with ID between "4" and "12"):
$> php bin/magento ok:urlrewrites:regenerate --entity-type=category --categories-range=4-12
* if in the range you have a gap of ID's (in range 4-12 category with ID "6" not exists) - do not worry, script handle this.
to skip re-generating a products URL rewrites in category if config option "Use Categories Path for Product URLs" is "No":
$> php bin/magento ok:urlrewrites:regenerate --entity-type=category --check-use-category-in-product-url
to save a current URL rewrites (you want to get a new URL rewites and save current) use option --save-old-urls
:
$> php bin/magento ok:urlrewrites:regenerate --save-old-urls
to prevent regeneration of "url_key" values (use current "url_key" values) use option --no-regen-url-key
:
$> php bin/magento ok:urlrewrites:regenerate --no-regen-url-key
do not run full reindex at the end of URL rewrites generation use option --no-reindex
:
$> php bin/magento ok:urlrewrites:regenerate --no-reindex
do not run cache:clean at the end of URL rewrites generation use option --no-cache-clean
:
$> php bin/magento ok:urlrewrites:regenerate --no-cache-clean
do not run cache:flush at the end of URL rewrites generation use option --no-cache-flush
:
$> php bin/magento ok:urlrewrites:regenerate --no-cache-flush
do not display a progress dots in the console (usefull for a stores with a big number of products):
$> php bin/magento ok:urlrewrites:regenerate --no-progress
$> php bin/magento ok:urlrewrites:regenerate --store-id=2 --save-old-urls --no-regen-url-key --no-reindex
--entity-type=product
and --category-id
/--categories-range
--entity-type=category
and --product-id
/--products-range
--category-id
and/or --categories-range
and/or --product-id
and/or --products-range
$> php bin/magento ok:urlrewrites:regenerate --entity-type=product --store-id=3 --product-id=38
or
$> php bin/magento ok:urlrewrites:regenerate --store-id=3 --product-id=38
Regenerate URL rewrites for products with ID's 5,6,7,8,9,10,11,12 in store with ID "2" and do not run full reindex at the end of process:
$> php bin/magento ok:urlrewrites:regenerate --entity-type=product --store-id=2 --products-range=5-12 --no-reindex
Regenerate URL rewrites for category with ID "22" in all stores and save current URL rewrites:
$> php bin/magento ok:urlrewrites:regenerate --entity-type=category --category-id=22 --save-old-urls
Regenerate URL rewrites for categories with ID's 21,22,23,24,25 in store with ID "2":
$> php bin/magento ok:urlrewrites:regenerate --entity-type=category --categories-range=21-25 --store-id=2
When you regenerate URL rewrites of some category then you regenerate URL rewrites of all products from this category AND URL rewrites of all subcategories (all levels - Magento use recursive logic) AND all products from this subcategories. This is the built-in Magento logic. So, take into account that regenerating of URL rewrites of any category (specially from top level) is a "heavy" process.
If you see in the console log a message(-s) like this:
URL key for specified store already exists. Product ID: 1680. Request path: modelautos/schaal/revell-honda-nsx-1990-grijs-1-18.html
or
URL key for specified store already exists. Category ID: 359. Request path: modelautos/automerk/filmauto.html
Then you can find a product (or category) by provided ID and copy product (or category) name. After that you can search in the store for the product (or category) with same name and resolve conflict by updating/changing name of one of the products (or categories).
Enjoy!
Best regards, Oleg Koval
* see: http://devdocs.magento.com/guides/v2.0/config-guide/cli/config-cli-subcommands.html