Est-il possible de créer des thèmes de petits-enfants?

10

Si j'utilise l'un des frameworks populaires tels que Genesis, est-il possible de créer des thèmes de petits-enfants?

Par exemple, je souhaite utiliser Genesis comme l’épine dorsale de tous mes sites. Genesis est appelé un framework mais est en réalité un thème parent.

Ensuite, je sélectionne l'un des thèmes enfants Genesis en vente chez StudioPress et je souhaite continuer à le personnaliser pour chacun de mes sites. Est-ce que je créerais un thème de petits-enfants pour tous mes sites et comment pourrais-je m'y prendre?

    
posée urok93 21.09.2012 - 13:17

2 réponses

14

Oui et non.

Vous pouvez créer un thème enfant en spécifiant un autre thème enfant en tant que parent et WordPress tentera de l'utiliser.

Cependant

Vous rencontrerez des problèmes, sans parler du fait que les développeurs principaux ont explicitement déclaré qu'il ne s'agissait pas d'un comportement souhaitable et qu'ils ne feraient aucun effort pour prendre en charge les thèmes de petits-enfants.

Par exemple, les API WP font une distinction entre les URL / répertoires de feuille de style et de modèle, où stylesheet fait toujours référence au thème actif et où modèle se rapporte au thème parent. Toutefois, si un thème de grands-parents est inclus, get_template_directory_uri parent ou le grand-parent? De nombreux appels d'API sont maintenant ambigus et différentes personnes pourraient s'attendre à un comportement différent, y compris du code au cœur. Vous devez également charger le functions.php du parent ou du grand-parent et vous assurer que tout est fait dans le bon ordre.

C'est également considéré comme une très mauvaise pratique. Si vous avez besoin de thèmes pour petits-enfants, votre approche a mal tourné et vous devez prendre du recul et réévaluer les choses.

Je vous conseillerais d'éviter le concept de thèmes de petits-enfants, cela poserait plus de problèmes. Au lieu de cela, davantage d'actions de filtres de crochets et de modularité dans votre thème enfant devraient vous permettre de conserver les composants partagés des thèmes enfants identiques et de vous permettre de créer des branches / fonctions de branche avec difficulté. Essayez de déplacer des éléments communs dans un sous-module svn external / git.

Il y a aussi le modèle _s où vous avez votre thème enfant comme base et que vous le branchez, plutôt que de l'avoir comme parent avec l'intention de travailler sur la copie, plutôt que comme un enfant / substitution.

    
réponse donnée Tom J Nowell 21.09.2012 - 13:28
2

Je n’ai pas testé complètement la méthode décrite ci-dessous, ni un thème normal de "petit-enfant", Mais en donnant les fonctionnalités du filtre template_include :

    /*
    Plugin Name: Grandchild Themes
    Plugin URI: http://www.who-cares.com/
    Description: A concept for Grandchild themes Plugin
    Author: See Plugin URI
    Version: 0.0.0.0.1-Alpha
    */

    add_action('wp_head', 'grnd_chld_add_headers', 0);
    add_action('init', 'grnd_chld_add_css');

    // Load template if exists. 
function grandchild_template_include( $template ) {

    if ( file_exists( untrailingslashit( plugin_dir_path( __FILE__ ) ) . '/grnd_chld_templates/' . basename( $template ) ) )
        $template = untrailingslashit( plugin_dir_path( __FILE__ ) ) . '/grnd_chld_templates/' . basename( $template );

    return $template;
}

// This is the actual filter that we want .
add_filter( 'template_include', 'grandchild_template_include', 11 );

    function grnd_chld_add_headers () {
        wp_enqueue_style('my_grandchild_style');
    }

    function grnd_chld_add_css() {
        $stamp = @filemtime(plugin_dir_path(__FILE__).'/style.css'); // easy versioning
        wp_register_style ('my_grandchild_style', plugins_url('style.css', __FILE__).'', array(), $stamp);
    }

    // From here , what you got is like a normal functions.php.

Vous pouvez également, de la même manière, essayer des filtres plus spécifiques, comme par exemple archive_template

.
add_filter ('archive_template', create_function ('', 'return plugin_dir_path(__FILE__)."archive.php";'));

Tout ce qui a été dit et fait, je ne suis pas sûr que ce soit la meilleure façon de faire les choses.

    
réponse donnée krembo99 27.02.2014 - 06:15

Lire d'autres questions sur les étiquettes