The dilemma is that get_post_types() inside the plugin I am creating. And from researching now all post types are not registered until "wp_loaded". However, "wp_loaded" is executed when all plugins are loaded.

All post types have yet to be registered, but I need them in my plugin. Is there a way to solve this problem? My custom post types are attached to init.

    class MyPlugin

        public static function init() {
        $pt = MyPlugin::get_post_types();
        //add a column for each post type here
        //add_action and add_filter

        private static function get_post_types() 
                return get_post_types( array( 'public' => true ), 'objects' );


add_action( 'init', create_function( '', 'return MyPlugin::init();' ) );
  • it's not clear what the problem is. your get_post_types code should be hooked to run after post types are created. add the code you have tried to your question.
    – Milo
    Oct 2, 2015 at 14:38
  • I've added some code that gives the general approach of my plugin Oct 2, 2015 at 14:52
  • you don't specify a priority on your action, so it will run in whatever position it gets placed in the queue, which may be before something else adds its init actions. if your goal is to ultimately modify the registered post types, theres already an action for that: registered_post_type.
    – Milo
    Oct 2, 2015 at 16:48
  • @Milo registered_post_type does not include custom post types Oct 5, 2015 at 7:18
  • registered_post_type action is triggered for all post types including custom types.
    – Milo
    Oct 5, 2015 at 14:42

1 Answer 1


I don't think you’ll be able to get all the post types that are registered on init. (other plugins may register extra post types)

Can't you hook into wp_loaded?

Your Answer

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

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