Remove The ‘category’ Base From Your Category Permastructs

If you want to remove the ‘/category’ base from your category permastructs, you’re in luck. There’s a simple way to do it with a bit of code. It happens in two parts:

/**
 * Add the necessary rewrite rules for our categories to be properly handled
 */
add_filter( 'category_rewrite_rules', 'vipx_filter_category_rewrite_rules' );
function vipx_filter_category_rewrite_rules( $rules ) {

	$categories = get_categories( array( 'hide_empty' => false ) );

	if ( is_array( $categories ) && ! empty( $categories ) ) {
		$slugs = array();

		foreach ( $categories as $category ) {
			if ( is_object( $category ) && ! is_wp_error( $category ) ) {
				if ( 0 == $category->category_parent )
					$slugs[] = $category->slug;
				else
					$slugs[] = trim( get_category_parents( $category->term_id, false, '/', true ), '/' );
			}
		}

		if ( ! empty( $slugs ) ) {
			$rules = array();

			foreach ( $slugs as $slug ) {
				$rules[ '(' . $slug . ')/feed/(feed|rdf|rss|rss2|atom)?/?$' ] = 'index.php?category_name=$matches[1]&feed=$matches[2]';
				$rules[ '(' . $slug . ')/(feed|rdf|rss|rss2|atom)/?$' ] = 'index.php?category_name=$matches[1]&feed=$matches[2]';
				$rules[ '(' . $slug . ')(/page/(d+))?/?$' ] = 'index.php?category_name=$matches[1]&paged=$matches[3]';
			}
		}
	}
	return $rules;
}

Note that you may need to implement your own redirects if you want to ensure traffic to the old URLs doesn’t result in a 404.

Ready to get started?

Tell us about your needs

Let us lead the way. We’ll help you select a top tier development partner. We’ll train your developers, operations, infrastructure, and editorial teams. We’ll coarchitect your deployment processes. We will provide live support for peak events. We’ll help your people avoid dark alleys and blind corners, and reduce wasted cycles.