¿El personalizador de tema está ralentizando mi sitio?

4

He creado un tema impresionante, que es muy flexible, porque tiene 500 configuraciones diferentes ( personalizado ) escribe en el personalizador de temas. Genero el css en vivo como dice el códice :

function mytheme_customize_css()
{
    ?>
         <style type="text/css">
             h1 { color:<?php echo get_theme_mod('header_color', '#000000'); ?>; }
             h2 { color:<?php echo get_theme_mod('tagline_color', '#000000'); ?>; }
             ... 498 more ...
         </style>
    <?php
}
add_action( 'wp_head', 'mytheme_customize_css');

Ahora mi sitio es lento. Creo que es porque hay 500 llamadas de base de datos por cada carga de página. ¿Hay alguna forma de acelerar mi sitio y aún tengo 500 opciones de personalización?

    
pregunta cjbj 17.05.2016 - 10:56

1 respuesta

3

¿Con qué frecuencia se cambian las modificaciones de tema? Mucho en la fase de diseño, tal vez un par de veces más tarde. Siempre por los administradores, nunca por los usuarios normales, y mucho menos los visitantes. Por lo tanto, no tiene sentido generar el css completo en cada carga de página ( información de fondo adicional ).

Un mejor enfoque es generar el css solo para el administrador y almacenar el resultado para otros. Esto reducirá la cantidad de llamadas a la base de datos de 500 a 1.

function mytheme_customize_css()
{
    if (current_user_can( 'edit_theme_options' ) ) {
         $assemble_css = "
         <style type='text/css'>
             h1 { color:" . get_theme_mod( 'header_color', '#000000' ); . "; }
             h2 { color:" . get_theme_mod( 'tagline_color', '#ffffff' ); . "; }
             ... 498 more ...
         </style>";
         set_theme_mod( 'all_mods', $assemble_css );
    }
    echo get_theme_mod ( 'all_mods', '' );
}
add_action( 'wp_head', 'mytheme_customize_css' );

Esto es mejor, pero ¿con qué frecuencia se usarán los 500 mods? ¿Y es realmente ideal tener los valores css predeterminados en esta función en lugar de style.css ? Es mejor mover los valores predeterminados allí y solo generar una línea css si hay un valor. Esto da:

function mytheme_customize_css()
{
    if (current_user_can( 'edit_theme_options' ) ) {
         $assemble_css = "
         <style type='text/css'>";
         if ( get_theme_mod('header_color') ) $assemble_css .= "
             h1 { color:" . get_theme_mod( 'header_color' ); . "; }";
         if ( get_theme_mod('tagline_color') ) $assemble_css .= "
             h2 { color:" . get_theme_mod( 'tagline_color' ); . "; }";
         ... 498 more ...
         $assemble_css .= "</style>";
         set_theme_mod( 'all_mods', $assemble_css );
    }
    echo get_theme_mod ( 'all_mods', '' );
}
add_action( 'wp_head', 'mytheme_customize_css' );

Si realmente tiene tantos mods, sería aún mejor ensamblarlos en una estructura de datos y recorrerlos en lugar de tener 500 líneas en la función (y varios miles de líneas de código para agregar las secciones al personalizador).

Además, escribir el css directamente en la cabeza como esto no es muy bueno. Debería utilizar add_inline_style . Pero eso es otra cosa.

    
respondido por el cjbj 17.05.2016 - 10:56

Lea otras preguntas en las etiquetas