È possibile creare temi per nipoti?


15

Se utilizzo uno dei framework popolari come Genesis, è possibile creare temi per nipoti?

Ad esempio, voglio usare Genesis come spina dorsale di tutti i miei siti. La genesi si chiama quadro ma in realtà è un tema genitore.

Quindi seleziono uno dei temi figlio di Genesis in vendita su StudioPress e desidero continuare a personalizzarlo per ciascuno dei miei siti. Avrei creato un tema per nipoti per tutti i miei siti e come potrei farlo?

Risposte:


17

Sì e no.

È possibile creare un tema figlio specificando un altro tema figlio come genitore e WordPress tenterebbe di utilizzarlo.

tuttavia

Incontrerai problemi, per non parlare del fatto che gli sviluppatori principali hanno dichiarato esplicitamente che questo non è un comportamento desiderabile e che non faranno sforzi per sostenere i temi dei nipoti.

Ad esempio, le API WP fanno una distinzione tra fogli di stile e URL / directory dei modelli, in cui il foglio di stile fa sempre riferimento al tema attivo e il modello si riferisce al tema principale, ma se è incluso un tema nonno, fa get_template_directory_uririferimento al padre o al nonno? Molte chiamate API sono ora ambigue e persone diverse si aspetterebbero comportamenti diversi, incluso il codice che è nel core. Dovresti anche caricare il functions.phpgenitore o il nonno e assicurarti che sia fatto nell'ordine corretto.

È anche considerata una pessima pratica. Se hai bisogno di temi per nipoti, il tuo approccio ha preso una piega sbagliata e devi fare un passo indietro e rivalutare le cose.

Ti consiglierei di evitare il concetto di temi dei nipoti, che porterà a più problemi. Invece, più azioni di filtri hook e modularità nel tema figlio dovrebbero consentire di mantenere uguali i componenti condivisi dei temi figlio e di dirottare / fork con poca difficoltà. Prova a spostare elementi comuni in un sottomodulo svn external / git.

C'è anche il modello _s in cui hai il tuo tema figlio come base e lo biforchi, piuttosto che averlo come genitore con l'intenzione di lavorare sulla copia, piuttosto che un figlio / override.


Quindi nel mio caso se vado con Genesis dovrò solo modificare il tema del bambino direttamente, giusto? Non ho molta familiarità con Git, ma sarei interessato ad un approccio che mi aiuti a mantenere intatto il tema del bambino originale.
urok93,

Sì, non hai molte opzioni qui.
Tom J Nowell

Mi chiedo cosa succederebbe se provassi a creare un tema da nipotino.
Chris_O,

1
Dici che il metodo ha preso una piega sbagliata se ne hai bisogno. Il motivo per cui sono curioso di questo è a causa di uno scenario come l'utilizzo del tema Storefront di WooCommerce. Vendono temi per bambini sul Storefront che sono personalizzati per varie cose. Quindi, se sto usando uno dei loro temi figlio, ma poi voglio fare i miei cambiamenti in un modo che non venga sovrascritto quando aggiornano il tema figlio ... come lo farei?
Ha disegnato Angell il

1
Non lo so, questo è un limite al modo in cui il tema del negozio è stato costruito, a quel punto sei costretto a rovesciare il tema del bambino
Tom J Nowell

3

Non ho testato completamente il metodo descritto di seguito, Né un normale tema "nipote", ma fornendo la funzionalità del filtro 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.

Puoi anche, in modo simile, provare filtri più specifici come ad esempio archive_template

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

Detto questo, non sono sicuro che sia il modo migliore per fare le cose.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.