web-dev-qa-db-ja.com

テーマカスタマイザは私のサイトを遅くしていますか?

それはテーマカスタマイザで異なる( カスタム )タイプの500の設定を持っているので私は非常に柔軟で素晴らしいテーマを作りました。私はライブ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個のモッズが使用されるのでしょうか。そしてstyle.cssの代わりにこの関数のデフォルトの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' );

実際にこれだけのmodがある場合は、関数内に500行(およびセクションをカスタマイザに追加するための数千行のコード)を含めるよりも、データ構造にまとめてループしたほうがよいでしょう。

また、このように直接cssを頭に書くのは良くありません。 add_inline_style を使用してください。しかしそれはまた別のことです。

3
cjbj