web-dev-qa-db-fra.com

Utiliser add_theme_support dans un plugin

J'ai créé un type de publication personnalisé en tant que plug-in et l'ai publié dans le référentiel. L’une des fonctionnalités principales consiste à utiliser une image sélectionnée. J'ai ajouté thumbnail à $supports dans register_post_type(), de sorte que la boîte de méta s'affiche dans le panneau d'administration. Je m'accroche également à after_setup_theme et appelle add_theme_support( 'post-thumbnails' ), mais je ne pense pas que cela prend effet.

Le codex indique vous devez l'appeler à partir du fichier functions.php du thème , mais si cela est vrai, il ne fonctionnera que si le thème de l'utilisateur appelle add_theme_support( 'post-thumbnails' ) (qui couvrirait all types. Si le thème ne l'appelle pas ou ne l'appelle que sur un type spécifique, cela ne fonctionnera pas.

Est-ce que quelqu'un voit un moyen de contourner ce problème?

6
Ian Dunn

Il y a des commentaires dans le code principal que cela devrait être amélioré, mais ils existent déjà depuis un moment. En gros, il n’existe pas de fonction native pour ajouter ou supprimer partie de certaines fonctionnalités, mais uniquement pour les fonctionnalités.

Le faire manuellement exécuterait quelque chose comme ceci après que le thème soit terminé (en retard sur le hook 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

C'est ce que j'ai fini par utiliser, qui est une version modifiée de la réponse de 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