Greg Rickaby

Full-Stack Developer

· 2 min read · #code

Modify a Custom Post Type after it's been registered

Learn more about the filter to 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.

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.

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

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

<?php
/**
 * Filter the Products CPT to register more options.
 *
 * @param $args       array    The original CPT args.
 * @param $post_type  string   The CPT slug.
 *
 * @return array
 */
function grd_client_filter_products_cpt( $args, $post_type ) {
 // If not Products CPT, bail.
 if ( 'products' !== $post_type ) {
  return $args;
 }
 // Add additional Products CPT options.
 $products_args = array(
  'has_archive' => true,
  'supports'    => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'custom-fields', 'page-attributes' ),
 );
 // Merge args together.
 return array_merge( $args, $product_args );
}
add_filter( 'register_post_type_args', 'grd_client_filter_products_cpt', 10, 2 );

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

Greg is the Director of Engineering at WebDevStudios. He also moonlights at Dummies writing and editing books. Follow him on Twitter for lots of pictures of pepperoni pizza and tidbits about Next.js.
· · ·