Using add_theme_support inside a plugin

I’ve created a custom post type as a plugin and released it into the repository. One of the core features involves using a featured image. I’ve added thumbnail to $supports in register_post_type(), so the meta box shows up in the Administration Panel. I’m also hooking into after_setup_theme and calling add_theme_support( 'post-thumbnails' ), but I don’t think it’s taking affect.

The codex says you have to call it from the theme’s functions.php file, but if that’s true then it’ll only work if the user’s theme calls add_theme_support( 'post-thumbnails' ) (which would cover all post types. If the theme doesn’t call it, or only calls it on a specific type, then it won’t work.

Does anyone see a way around this problem?

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

There are comments in core code that this should be improved, but they are there for a while already. Basically there is no native function to add or remove part of some feature, only feature altogether.

Doing it manually would be running something like this after theme is done (late on after_setup_theme hook):

function add_thumbnails_for_cpt() {

    global $_wp_theme_features;

    if( empty($_wp_theme_features['post-thumbnails']) )
        $_wp_theme_features['post-thumbnails'] = array( array('your-cpt') );

    elseif( true === $_wp_theme_features['post-thumbnails'])
        return;

    elseif( is_array($_wp_theme_features['post-thumbnails'][0]) )
        $_wp_theme_features['post-thumbnails'][0][] = 'your-cpt';
}

Method 2

This is what I ended up using, which is a modified version of Rarst’s answer

public function addFeaturedImageSupport()
{
    $supportedTypes = get_theme_support( 'post-thumbnails' );

    if( $supportedTypes === false )
        add_theme_support( 'post-thumbnails', array( self::POST_TYPE ) );               
    elseif( is_array( $supportedTypes ) )
    {
        $supportedTypes[0][] = self::POST_TYPE;
        add_theme_support( 'post-thumbnails', $supportedTypes[0] );
    }
}
add_action( 'after_setup_theme',    array( $this, 'addFeaturedImageSupport' ), 11 );


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x