it-swarm.com.ru

Замедляет ли настройщик темы мой сайт?

Я создал потрясающую тему, которая очень гибкая, потому что она имеет 500 настроек различных ( custom ) типов в настройщике темы. Я генерирую живой CSS как сказано в кодексе :

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');

Сейчас мой сайт работает медленно. Я думаю, это потому, что для каждой загрузки страницы приходится 500 вызовов базы данных. Есть ли способ ускорить мой сайт и при этом иметь 500 вариантов настройки?

4
cjbj

Как часто меняются темы моды? Многое на этапе проектирования, возможно, пару раз позже. Всегда администраторами, никогда обычными пользователями, не говоря уже о посетителях. Поэтому не имеет смысла генерировать полный CSS при каждой загрузке страницы ( дополнительная справочная информация ).

Лучший подход - генерировать CSS только для администратора и сохранять результат для других. Это уменьшит количество вызовов базы данных с 500 до 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' );

Это лучше, но как часто будут использоваться все 500 модов? И действительно ли идеально иметь значения css по умолчанию в этой функции вместо style.css? Лучше перенести туда значения по умолчанию и генерировать линию CSS только при наличии значения. Это дает:

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' );

Если у вас на самом деле есть столько модов, было бы даже лучше собрать их в структуру данных и пройти по ней, а не иметь 500 строк в функции (и несколько тысяч строк кода для добавления разделов в настройщик).

Кроме того, писать CSS прямо в голову, как это не очень хорошо. Вы должны использовать add_inline_style . Но это другое дело.

3
cjbj