Single Category Permalink
Reduce permalinks (category or post) that include entire hierarchy of categories to just having the lowest category in the hierarchy.
By default, WordPress replaces the %category% permalink tag in a custom permalink structure with the entire hierarchy of categories for the post’s first matching category. For example, assuming your site has a hierarchical category structure like so:
Applications
|_ Desktop
|_ Web
|_ WordPress
By default, if you have a permalink structure defined as %category%/%year%/%monthnum%/%day%/%postname%, your post titled « Best Plugins » assigned to the « WordPress » category would have a permalink of:
https://www.example.com/applications/web/wordpress/2008/01/15/best-plugins
If you activate the Single Category Permalink plugin, this would be the permalink generated for the post (and recognized by the blog):
https://www.example.com/wordpress/2008/01/15/best-plugins
In order for a category to be used as part of a post’s permalink structure, %category% must be explicitly defined in the Settings -> Permalinks admin page as part of a custom structure, i.e. /%category%/%postname%.
For category links, %category% is implied to follow the value set as the « Category base » (or the default category base if none is specified). So if your category base is ‘category’, the above example would list posts in the ‘WordPress’ category on this category listing page:
https://www.example.com/category/applications/web/wordpress/
With this plugin activated, that link would become:
https://www.example.com/category/wordpress/
NOTE: The fully hierarchical category and post permalinks will continue to work. The plugin issues a 302 redirect to browsers and search engines pointing them to the shorter URL.
Links: Plugin Homepage | Plugin Directory Page | GitHub | Author Homepage
Hooks
The plugin exposes one filter for hooking. Code using this filter should ideally be put into a mu-plugin or site-specific plugin (which is beyond the scope of this readme to explain). Less ideally, you could put them in your active theme’s functions.php file.
c2c_single_category_redirect_status (filter)
The ‘c2c_single_category_redirect_status’ hook allows you to specify an HTTP status code used for the redirect. By default this is 302.
Arguments:
- $status (integer) : The default HTTP status code
Example:
/**
* Change the redirection HTTP status to a 302.
*
* @param int $code The HTTP status code. By default 301.
* @return int
*/
function scp_change_redirect_status( $code ) {
return 302;
}
add_filter( 'c2c_single_category_redirect_status', 'scp_change_redirect_status' );
