如何让模板选择要排队的样式表?

时间:2013-04-26 作者:Pieter

我的主题functions.php 钩住wp_enqueue_scripts 注册多个网站页面使用的样式表。以下是我的配置的简化版本:

add_action("wp_enqueue_scripts", function() {       
    // This stylesheet is used on *every* page
    wp_register_style("sitewide", get_template_directory_uri() . "/assets/sitewide.css");
    wp_enqueue_style("sitewide");

    // These stylesheets are used by *some* pages
    wp_register_style("pagetype1", get_template_directory_uri() . "/assets/pagetype1.css", array("sitewide"));
    wp_register_style("pagetype2", get_template_directory_uri() . "/assets/pagetype2.css", array("sitewide"));
});
到目前为止,我找到的每个教程都将回调本身的每个样式表排队,但我不想这样做。我假设这会导致我的所有样式表都包含在每个页面上,这不是我想要的。我只想排队pagetype1.css 如果某个页面的基础模板使用它。

假设我希望我的首页使用页面类型1样式表。我的直觉是wp_enqueue_style("pagetype1"); 在里面front_page.php 就在包含标头之前,标头包含wp_head() 呼叫这没什么用。另一方面,站点范围的CSS也像我预期的那样被包括在内。我做错了什么?

我知道有一个workaround 在外面,但我更喜欢那样front-page.php 保留对加载其他样式表的控制。

<小时>Edit: 这就是我在与托肖讨论后得出的结论。我将此添加到functions.php:

// Enqueues a stylesheet handle or an array of stylesheet handles.
function mytheme_enqueueStyle($handles) {
    if (is_array($handles)) {
        add_action("wp_enqueue_scripts", function() use ($handles) {
            foreach ($handles as $handle) {
                wp_enqueue_style($handle);
            }
        });
    } else if (is_string($handles)) {
        add_action("wp_enqueue_scripts", function() use ($handles) {
            wp_enqueue_style($handles);
        });
    } else {
        wp_die("Unsupported parameter type.");
    }
}
然后我打电话mytheme_enqueueStyle("pagetype1") 从…起front-page.php 将样式表排队。不过,这种做法最终与WP Minify不兼容。

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

检查回调中的当前模板。这是一个名为_wp_page_template.

add_action("wp_enqueue_scripts", function() 
{
    // This stylesheet is used on *every* page
    wp_register_style("sitewide", get_template_directory_uri() . "/assets/sitewide.css");
    wp_enqueue_style("sitewide");

    if ( ! is_singular() )
        return;

    $template = get_post_meta( get_the_ID(), \'_wp_page_template\', TRUE );

    // now enqueue further stylesheets depending on the current template
});

结束

相关推荐

How to use Plupload in themes

我正在开发一个需要从前端上传的主题。我想将plupload整合到我的主题中,同时牢记:上传将在表单提交时处理,而不是通过plupload常规方法。这意味着我只需要plupload的设计,而不是上传功能。选择文件后,当我提交表单(包含所选文件和其他信息)时,我应该能够获取目标页面中的所有表单信息(包括文件信息)。E、 g.在用户配置文件页面中,我想更新我的头像以及其他信息</如有任何帮助,我们将不胜感激。