Preservar la configuración del tema en el tema secundario

10

Mi cliente usa el tema Karma con muchas configuraciones en las opciones de tema. Necesito mantener mis adiciones CSS y PHP en un tema secundario para que las actualizaciones del tema no lo borren. Sin embargo, cuando selecciono mi tema secundario en Apariencia> Temas, la configuración del tema principal desaparece.

¿Hay alguna forma de preservar la configuración del tema principal?

drake035
fuente
¿Qué quieres decir con "ido"? Si puede volver al tema principal y la configuración está allí, entonces no se han ido
Mark Kaplun
Pasado del tablero y el sitio web, eso es. Sin embargo, todavía existen en algún lugar de la base de datos, pero eso no es relevante para mi problema.
drake035
¿Entonces, cuál es tu problema? usted preguntó "¿Hay alguna forma de preservar la configuración del tema principal?" y como todavía están en la base de datos, se conservan
Mark Kaplun
"Preservado" significa presente en tema infantil. Al cambiar del tema principal al secundario, quiero que la configuración secundaria sea la misma que la configuración principal.
drake035
luego copiarlos. Tengo que admitir que todavía no entiendo cuál es exactamente el problema que estás tratando de resolver. suena como si estuviera tratando de complicar su vida, o su enfoque de hacer un tema secundario es incorrecto y es mejor que modifique el tema principal (o puede ser que el tema principal no sea adecuado para los temas secundarios)
Mark Kaplun

Respuestas:

9

Debido a la forma en que estas configuraciones de tema se almacenan como una matriz en la base de datos, puede ser difícil copiarlas con solo copiar y pegar en phpmyadmin o alguna táctica similar.

El comando de opción WP CLI es tu amigo aquí. Si aún no utiliza WP CLI, ¡compruébelo! Así es como copié la configuración del tema de escaparate en un tema llamado storefront-sqcdy-child:

# save the existing theme settings in json format in a temporary text file
wp option get theme_mods_storefront --format=json > theme_mods_storefront.txt

# load the saved settings into the child theme option record in the database
wp option update theme_mods_storefront-sqcdy-child --format=json < theme_mods_storefront.txt

# cleanup the temp file
rm -f theme_mods_storefront.txt
Squarecandy
fuente
Como segunda línea, también debe usar una opción de actualización de opciones de wp theme_mods_storefront-sqcdy-child --format = json <theme_mods_storefront.txt
Gregor
Sí, supongo que es una forma más estándar de hacerlo ...
squarecandy
Hola Squarecandy, dijiste "puede ser difícil copiarlos con solo copiar y pegar", pero la operación que realizas me parece la misma. ¿Me equivoco?
Marco Panichi
@MarcoPanichi: definitivamente es diferente porque WP CLI hace un montón de cosas elegantes que nunca ves sin serializar / volver a serializar los datos de la manera correcta. Si solo copia los valores e intenta cambiar las cosas directamente en la base de datos con comandos de MySQL o phpmyadmin, probablemente arruinará las cosas.
squarecandy
Estoy bastante seguro de que con sus comandos obtener [actualización] a [desde] un archivo, está haciendo lo mismo
Marco Panichi
6

Las modificaciones del tema de Wordpress se guardan en la wp_optionstabla de la base de datos en el theme_mods_{themename}campo. Puede copiarlo y cambiarle el nombre con el nombre del tema secundario.

andrejm
fuente
1
Y cuando el tema principal se actualiza y agrega nuevas opciones, ¿qué haces entonces?
Mark Kaplun
1
¿Cuál es una mejor opción @MarkKaplun? Creo que esto resuelve el problema que el usuario pregunta
Eoin
1
@Bien, mientras más preguntas leo sobre temas secundarios, menos me gustan las limitaciones de este. Parece que para cualquier cambio no trivial en el tema principal, tendrá que reevaluar el código del tema secundario. Si todo lo que hace es CSS, hay un pequeño problema, pero para cualquier otra cosa es necesaria una reevaluación. El OP aquí deberá asegurarse de que sincronice las opciones con el tema principal en cada actualización (en caso de que se agregue una nueva opción con un valor predeterminado no vacío). Me encuentro abogando contra el uso de temas secundarios, y en su lugar uso git para bifurcar al "padre" y hacer fusiones cuando hay actualizaciones.
Mark Kaplun
Cuando diga, cambie el nombre con el nombre del tema secundario, ¿a qué nombre específico se refiere? No entiendo de dónde obtener el nombre del tema secundario.
@fuddin el nombre del tema es el nombre de la carpeta del tema secundario; por ejemplo: la configuración del tema principal se identifica con el nombre de opción 'theme_mods_parent-theme-name'; la configuración del tema hijo podría identificarse mediante el nombre_opción 'theme_mods_parent-theme-name-child'. Puede realizar una selección en su base de datos para verlo claramente:SELECT * FROM wp_options WHERE option_name LIKE "theme_mods_%"
Marco Panichi
1

Lo resolví simplemente copiando las opciones en la base de datos .

Aquí están los procedimientos paso a paso :

  1. Inicie sesión en su phpMyAdmin y seleccione la base de datos del sitio web
  2. Copia de seguridad de la base de datos
  3. Ejecute esta consulta para tener una visión clara de la situación SELECT * FROM wp_options WHERE option_name LIKE "theme_mods_%":; esta instrucción devolverá una fila por cada tema que haya activado en su sitio web hasta ahora
  4. Modifique la fila de la configuración del tema principal, identificada por option_name = theme_mods_parent-theme-name
  5. Aquí, en el campo option_value, tiene todas las configuraciones del tema principal en forma serializada; copiarlos puede usar una herramienta no serializada para ver el contenido de forma amigable para los humanos
  6. Regrese al punto 3, pero ahora modifique la fila de la configuración del tema secundario
  7. Pegue la configuración que ha copiado anteriormente en el campo option_value; salvar
Marco Panichi
fuente
0

Podría hacer algo como lo que incluyen los temas secundarios de Genesis para guardar la configuración predeterminada del tema al activar y cambiar temas:

//* Theme Setting Defaults
add_filter( 'genesis_theme_settings_defaults', 'child_theme_defaults' );
function child_theme_defaults( $defaults ) {

    $defaults['blog_cat_num']              = 6;
    $defaults['content_archive']           = 'full';
    $defaults['content_archive_limit']     = 150;
    $defaults['content_archive_thumbnail'] = 0;
    $defaults['image_alignment']           = '';
    $defaults['image_size']                = 'entry-image';
    $defaults['posts_nav']                 = 'prev-next';
    $defaults['site_layout']               = 'full-width-content';

    return $defaults;

}

//* Theme Setup
add_action( 'after_switch_theme', 'child_theme_setting_defaults' );
function child_theme_setting_defaults() {

    if( function_exists( 'genesis_update_settings' ) ) {

        genesis_update_settings( array(
            'blog_cat_num'              => 6,
            'content_archive'           => 'full',
            'content_archive_limit'     => 150,
            'content_archive_thumbnail' => 0,
            'image_alignment'           => '',
            'image_size'                => 'entry-image',
            'posts_nav'                 => 'prev-next',
            'site_layout'               => 'full-width-content',
        ) );

    } else {

        _genesis_update_settings( array(
            'blog_cat_num'              => 6,
            'content_archive'           => 'full',
            'content_archive_limit'     => 150,
            'content_archive_thumbnail' => 0,
            'image_alignment'           => '',
            'image_size'                => 'entry-image',
            'posts_nav'                 => 'prev-next',
            'site_layout'               => 'full-width-content',
        ) );

Claramente, necesitaría modificar este código para trabajar con la funcionalidad de sus temas.

Brad Dalton
fuente