Filter and modify a Custom Post Type – after it’s been registered

Today I was tasked with adding functionality to an existing custom post type. The problem was, the CPT was being registered in a plugin which I could not edit (client declined to give WDS write access to the /plugins folder).

After some digging, I found there’s a filter for that (found in post.php) which allows you to modify a custom post type (after it’s been registered some other way) and could do so in the theme.

apply_filters( 'register_post_type_args', $args, $post_type );

Hooking into that filter, allowed me to pass additional options to an existing CPT:

https://gist.github.com/gregrickaby/518090ce734dd98842adef6f82c597d0

Now “Products” has an archive, along with some other meta boxes in the post editor. Nice!

About Greg Rickaby

Director of Engineering @WebDevStudios / Author & Tech Editor @ForDummies / @WordPress Contributor / @gatsbyjs Maintainer

4 Comments

  1. Alvin on September 21, 2016 at 8:00 am

    Nice post and exactly what i was looking for! I have the same problem: a CPT registered by a plugin doesnt have tags, categories and a text field. I dont want a developer to modify the plugin because its constantly updating. Now i see that this would rather be a “simple” addition to the (child) theme. Thx!

  2. Felipe Romero on June 18, 2017 at 7:24 pm

    Thoroughly explained, thank you very much. This worked wonders for me!

  3. Mohammed on July 4, 2017 at 6:33 am

    Thanks a lot.. Working so nice!

  4. karl632 on September 7, 2017 at 5:07 am

    Thanks, just what I needed to disable has_archive for a CPT added by the parent theme.

Leave a Comment