Plugin Roundup
It's almost 2020 and a lot of these answers don't work. Here's my own roundup of the current options:
- Matt Keys answer seems to be the only one on the right track if you want a custom code solution. None of the plugins I found can do everything listed here, especially the duplicate checking. This approach seems like a really good opportunity for a plugin if anyone wanted to take that on.
- Permalink Manager Lite
- 👍 Best of the free plugins I tried.
- 👍 Gives full control over all Page/Post/CPT complete permalink structure and allows them to be the same. The GUI is by far the most feature-rich.
- 👍 Allows full override per-post as well and lets you see what the original/default would be and reset to the default if needed.
- 👍 Supports multi-site.
- 👎 Does not check for duplicates between post types, which is sad. If a page and a CPT have the same URL, the page loads and the CPT is inaccessible. No warnings or errors, you just have to do your own manual checking for duplicates.
- 💵 All taxonomy features are in the PRO version. The upgrade nags are pretty heavy.
- Custom Permalinks
- 👍 The free version does a lot. Taxonomy permalinks and premium support seem to be the only things withheld from the pro version.
- 👍 Allows you to change the full permalink for any individual page/post/CPT.
- 👍 Supports multi-site.
- 👎 Does not allow you to change the default structure so you your Custom Post Types will still be example.com/cpt-slug/post-title but you can change them individually.
- 👎 Does not check for duplicates between post types, which is sad.
- Custom Post Type Permalinks
- 👍 Allows non-developer users to change the things that are easy to change already with
register_post_type
- 👎 Does not allow you to change the CPT base slug - only the part that comes after that - so pretty much useless for developers and the issue in this question.
- 👍 Allows non-developer users to change the things that are easy to change already with
- remove base slug...remove base slug... - dead for several years now... do not use.