I have a custom post type with the rewritten slug of plugin creating the url structure of http://site.com/plugin/plugin-slug/. Which makes the CPT Archive as http://site.com/plugin/

I'd like to rewrite it, without using a page and a custom page template, to use http://site.com/plugins/ (Which is the labels=>Name in the CPT). while keeping the slug for the single posts as /plugin/ This would also need to support things like `/plugins/page/21 - which it currently does.

1 Answer 1


When you register the post type, set the argument 'has_archive' to a string, in your case plugins.

The doc block for register_post_type() says:

@type bool|string $has_archive
Whether there should be post type archives, or if a string, the archive slug to use. Will generate the proper rewrite rules if $rewrite is enabled. Default false.

Minified example:

register_post_type( 'plugin', [ 'has_archive' => 'plugins' ] );
  • 6
    To refresh the rewrite rules for a custom post type you are updating, visit Settings > Permalinks. Based on the example above, if you don't do this, /plugin will still be the archive slug and /plugins won't work yet. Apr 1, 2015 at 11:13

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.