问题描述

我已经创建了一个自定义的 post 类型作为插件,并将其发布到存储库中。其中一个核心功能包括使用特色图像。我已经在 register_post_type()中将 thumbnail 添加到 $supports,所以在 「管理」 面板中显示了该方框。我也挂着 after_setup_theme,并调用 add_theme_support( 'post-thumbnails' ),但我不认为它会影响。

Codex 说 you have to call it from the theme’s functions.php file,但是如果是真的,那么只有用户的主题调用 add_theme_support( 'post-thumbnails' )(这将涵盖所有的帖子类型),如果主题没有调用它,或者只是在特定的类型上调用它,那么它就会有效不工作

有没有人看到这个问题的方法?

最佳解决方案

核心代码中有评论应该改进,但是已经有一段时间了。基本上没有本机功能添加或删除部分功能,仅功能完全。

主题完成后,手动执行此操作 (after_setup_theme 钩子后):

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';
}

次佳解决方案

这是我最后使用的,这是 Rarst 的答案的修改版本

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 );

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。