web-dev-qa-db-ja.com

プラグイン内でadd_theme_supportを使用する

カスタム投稿タイプをプラグインとして作成し、それをリポジトリに公開しました。中心的な機能の1つは、注目の画像を使用することです。 register_post_type()$supportsthumbnailを追加したので、メタボックスが管理パネルに表示されます。私はafter_setup_themeにフックしてadd_theme_support( 'post-thumbnails' )を呼び出すこともしていますが、効果があるとは思いません。

コーデックスは あなたはテーマのfunctions.phpファイルからそれを呼び出さなければならないと言っています しかし、それが本当ならそれはユーザーのテーマがadd_theme_support( 'post-thumbnails' ) all postタイプをカバーするでしょう)を呼び出す場合にだけうまくいくでしょう。テーマがそれを呼び出さないか、または特定のタイプでそれを呼び出すだけであれば、それは機能しません。

誰もがこの問題を回避する方法を見ますか?

6
Ian Dunn

これを改善すべきであるというコアコード内のコメントがありますが、それらはもうしばらくの間そこにあります。基本的には、ある機能の 部分 を追加または削除するためのネイティブ機能はなく、機能のみです。

テーマが完了した後に手動でそれを実行することはこのような何かを実行するでしょう(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';
}
9
Rarst

これは私が使用してしまったもので、これは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 );
6
Ian Dunn