¿Es posible hacer temas de nietos?

10

Si uso uno de los marcos populares como Genesis, ¿es posible crear temas de nietos?

Como ejemplo, quiero usar Genesis como la columna vertebral de todos mis sitios. Génesis se llama marco pero en realidad es un tema principal.

Luego selecciono uno de los temas secundarios de Genesis a la venta en StudioPress, y quiero seguir personalizándolo para cada uno de mis sitios. ¿Estaría creando un tema de nieto para todos mis sitios y cómo lo haría?

    
pregunta urok93 21.09.2012 - 13:17

2 respuestas

14

Sí y No.

Puedes crear un tema secundario especificando otro tema secundario como principal, y WordPress intentará usarlo.

However

Se encontrará con problemas, sin mencionar que los desarrolladores principales han declarado explícitamente que este no es un comportamiento deseable, y no harán esfuerzos para apoyar los temas de los nietos.

Por ejemplo, las API de WP distinguen entre las URL / directorios de la hoja de estilo y la plantilla, donde la hoja de estilo siempre se refiere al tema activo, y la plantilla se refiere al tema principal, pero si se incluye un tema de abuelos, get_template_directory_uri hace referencia al padre o el abuelo? Muchas de las llamadas a la API son ahora ambiguas, y diferentes personas esperarían un comportamiento diferente, incluido el código que está en el núcleo. También deberías cargar el functions.php del padre o abuelo y asegurarte de que se haga en el orden correcto.

También se considera muy mala práctica. Si necesita los temas de nietos, entonces su enfoque ha tomado un giro equivocado y necesita retroceder y volver a evaluar las cosas.

Te aconsejaría que evitaras el concepto de temas de nietos, ya que esto te llevará a más problemas. En su lugar, más acciones de filtros de ganchos y modularidad en su tema secundario deberían permitirle mantener los componentes compartidos de los temas secundarios de la misma manera, y permitirle ramificarse o desvanecerse con poca dificultad. Intente mover elementos comunes a un submódulo svn external / git.

También está el modelo _s en el que tiene su tema hijo como base y lo bifurca, en lugar de tenerlo como padre con la intención de trabajar en la copia, en lugar de un elemento secundario / anular.

    
respondido por el Tom J Nowell 21.09.2012 - 13:28
2

No probé completamente el método descrito a continuación, ni un tema normal de "nieto", Pero dando la funcionalidad del template_include filter:

    /*
    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.

También puede, de una manera similar, probar filtros más específicos como, por ejemplo, archive_template

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

Todo lo dicho y hecho, no estoy seguro de que sea la mejor manera de hacer las cosas.

    
respondido por el krembo99 27.02.2014 - 06:15

Lea otras preguntas en las etiquetas