Skip to content
addon for Cockpit CMS to create unique slugs
Branch: master
Clone or download
Type Name Latest commit message Commit time
Failed to load latest commit information.
LICENSE added license file MIT Mar 25, 2019 readme update Apr 24, 2019
bootstrap.php skip wrong localized "default" language Jun 1, 2019


Unique slugs for collections in Cockpit CMS


Copy this repository into /addons and name it UniqueSlugs or

cd path/to/cockpit
git clone addons/UniqueSlugs

How to use

Add these options to cockpit/config/config.yaml to specify the collections and field names for slug generation:

        pages     : title
        products  : name

all options:

# unique slugs
    slug_name      : slug        # default: "slug"
    placeholder    : page        # default: "entry"
    check_on_update: true        # default: false, unique checks on each update (if user changes slug by hand)
    delimiter      : |           # default: "|", is used for nested fields
    collections    :
        pages      : title
        products   : name
        something  :             # use multiple fields as fallbacks
            - title
            - name
            - image|meta|title   # use nested fields for slugs
    localize       :             # for localized fields, omitted if not set
        pages      : title       # field name without suffix ("_de")
        products   : name
        something  :             # use multiple fields as fallbacks
            - title
            - name
            - image|meta|title   # use nested fields for slugs


Don't set slug_name: fieldname_slug if you also set {"slug": true} in the fieldname options for some reason. It should work, but it fails on multilingual setups (explanation).

Your collection can have a visible field named "slug", if you want to edit it by hand.

The builtin option to sluggify text fields via options {"slug": true} in the backend uses Javascript and leads to different results ("ä" becomes "a" instead of "ae") (fixed). If you want unique slugs, that option is not necessary anymore.

The code for this addon is inspired by a gist from fabianmu.

Thanks to fabianmu and aheinze



  • rewrite to object oriented style
  • added support for localized fields
  • incremental count didn't work correctly in the past - fixed
  • added optional unique check on each update, e. g. if user changes slug by hand, enable it with check_on_update: true


  • fixed error if nested key doesn't exist
  • added placeholder to avoid empty strings as slugs


  • added ability to use multiple fields for slug generation
  • added nested fields for slug generation
  • config name separators were changed from dots to underscores
    • added check for backwards compatibility - will be removed in the future
You can’t perform that action at this time.