如何在wp_head中正确插入样式表

时间:2017-04-11 作者:lowtechsun

我正在为每个页面和类别生成关键CSS。目前,我正在通过插入样式表functions.php 像这样简单地使用echo.

function criticalCSS_wp_head() {
  if (is_front_page() ){
    echo \'<style>\';
    include get_stylesheet_directory() . \'/css/critical/ccss-index.min.css\';
    echo \'</style>\';    
  }
  elseif (is_category(\'orange\') ){
    echo \'<style>\';
    include get_stylesheet_directory() . \'/css/critical/ccss-orange.min.css\';
    echo \'</style>\';    
  }
  elseif (is_page(\'hello-world\') ){
    echo \'<style>\';
    include get_stylesheet_directory() . \'/css/critical/ccss-hello-world.min.css\';
    echo \'</style>\';    
  }
  elseif (is_single() ){
    echo \'<style>\';
    include get_stylesheet_directory() . \'/css/critical/ccss-single.min.css\';
    echo \'</style>\';    
  }
}
add_action( \'wp_head\', \'criticalCSS_wp_head\' );
就最佳实践编码风格而言,包含这些样式表的最佳方式是什么and pure relentless speed, 这意味着要避免PHP调用、数据库调用等this post (#10)链接自the official WordPress Optimization documentation?edit由于这个问题得到了回答,我忘了提到关键CSS需要内联到DOM中,而不是作为文件链接,以避免渲染阻塞。因此,我仍在寻找一种将关键CSS用于wp_enqueue_scripts. 可能将文件内容存储在变量中,并在wp_enqueue_scripts 是他自找的吗?

2 个回复
最合适的回答,由SO网友:user3135691 整理而成

你可以这样做,把它放在你的functions.php :

这是“WordPress方式”的正确做法。

<?php
    // Check if function exisits
    if (!function_exists(\'rg_templateScriptSetup\')) {
         // if not, create one
         function rg_templateScriptSetup() {
             // Register styles in WordPress
             wp_register_style(\'prefix-basic-css\', get_template_directory_uri(). \'/css/basic-style.css\');

             // Register styles in WordPress
             wp_register_style(\'first-css\', get_template_directory_uri(). \'/css/first-style.css\');

             // Register styles in WordPress
             wp_register_style(\'second-css\', get_template_directory_uri(). \'/css/second-style.css\');

        if (is_page(\'your_page_name\') {
            // enqueue your first style
            wp_enqueue_style(\'first-css\');
        } else if(is_page(\'your_other_page_name\')) {
            // enqueue your second style
            wp_enqueue_style(\'second-css\');
        } etc...


    } // End of Stylesheet logic / setup

    add_action(\'wp_enqueue_scripts\', \'rg_templateScriptSetup\');

?>
为什么?

因为WordPress为您提供了实现该目标所需的所有工具。

这里到底发生了什么:

首先,我们检查该函数是否已经存在,如果不存在,我们创建我们的函数,然后“注册我们的样式”,基本上告诉WordPress:这里,获取这些CSS,所以。。WordPress在它的口袋里有我们的样式表,但它还没有使用它们,然后我们使用原生WordPress功能is_page 结合ifstatement(if(is\\u page(\'your-page-name\'))

  • 如果if语句返回bool“true”,我们将根据我们的条件激活css(在您的情况下,是页面名称)

    如果答案对您有帮助,请将其标记为正确,而不仅仅是获取代码,谢谢。

    个人问题:你所说的批评是什么意思?许多重要的

  • SO网友:WebElaine

    添加CSS或JS的最佳实践和公认的正确方法是将它们排队。这样,如果您假设一个主题+2个插件都想将jQuery排入队列,那么最终只加载了1个副本,而不是3个。

    在函数中。php:

    add_action(\'wp_enqueue_scripts\', \'my_enqueues\');
    function my_enqueues() {
        if(is_front_page()) {
            wp_enqueue_style(\'front-page\', get_stylesheet_directory() . \'/css/critical/ccss-index.min.css\', array(), \'\', \'screen\');
        } elseif(is_category(\'orange\')) {
            wp_enqueue_style(\'orange\', get_stylesheet_directory() . \'/css/critical/ccss-orange.min.css\', array(), \'\', \'screen\');
        }
    }
    
    如果每页样式较短,实际上可以将内联样式排队,这样web浏览器就不会请求单独的资源。

    add_action(\'wp_enqueue_scripts\', \'my_inline_enqueues\');
    function my_inline_enqueues() {
        wp_add_inline_style(\'front-page\',
            \'.myfrontpageclass { font-size:6em; }\'
        );
    }
    
    最后的建议-我不知道你的样式表的内容,但我建议如果你只在主题的style.css 一起归档。使用body_class 以您需要的任何内容为目标,并将其全部保存在一个缩小的文件中。

    相关推荐

    Performance on WPMS

    我的WPMS站点托管在8核/32mb RAM服务器上,但响应时间非常长。我们有大约1000个博客(单个db上有35000多个表)和70000个页面浏览量。我认为我可以缩短响应时间,将具有更多页面浏览量的博客移动到单独的DB中,并使用hyper DB插件将所有博客拆分为每个DB 100个博客。你觉得怎么样?