What’s the best way to make WordPress accept non-unique sub-category slugs?

By default, WordPress ensures that every ‘slug’ portion of permalink URLs is unique, and is very savvy about using this to ensure you never see a 404 from omitting a portion of the URL. This means if my permalink structure is…

http://site-root.com/category-name/sub-category-name/post-name/post-id

Then….

  • http://site-root.com/category-name/sub-category-name/post-name/post-id
  • http://site-root.com/category-name/sub-category-name/post-name
  • http://site-root.com/category-name/sub-category-name/post-id
  • http://site-root.com/sub-category-name/post-name/post-id

will all take me to the same post.

But if that kind of fail-safe redirection is less important to someone than being able to have non-unique slugs (and nicely structured directories), I’m SOL.

Let’s say I’m writing a restaurant review guide in major cities. I want my top-level categories to be city names, and the types of restaurants to be the sub-categories. So I create “Boston”, “New York”, and “Seattle”, then I add the sub-categories “Chinese Food”, “Italian Eateries”, and “Luxury Dining” to Boston. But when I try to add the same sub-categories to New York, even when I specify the URL slugs, WordPress starts forcing slugs like “http://[site-root].com/New-York/Chinese-Food-New-York/” — unnecessary repetition, and lengthening my links. This gets even worse if I want to have sub-sub-categories.

I haven’t yet been able to find a way to force WordPress to accept non-unique slugs. How would you recommend I accomplish this?

3 Answers
3

I’d look into using custom post types for the repetitive parts of your permalinks. Cities can be categories, and the restaurant types can be post types. It’s the perfect use for post types, and it helps solve the problem.

Unfortunately I can only see it helping with one sub-level. If you need sub-sub-categories you’ll have to find another WordPress feature with a URL presence that you can “bend” to fit your purpose.

Leave a Reply

Your email address will not be published. Required fields are marked *