实现style heet_url的不同方法

时间:2012-12-16 作者:nkint

我想了解以下两者之间的区别:

<?php bloginfo( \'stylesheet_url\' ); ?>
以及

<?php bloginfo(\'template_url\'); ?>/style.css
因为我认为第二个更灵活(例如,我决定将文件移动到子目录中。或者如果我有更多的样式表要添加……第二个似乎更聪明)。我错了吗?

特别是\'stylesheet_url\' 是否已存储?如何改变它?

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

bloginfo(\'stylesheet_url\') 将始终返回当前主题的样式表。如果当前主题是child theme, 例如,它将返回style.css 相对于子主题的根而不是父主题的根。

bloginfo(\'template_url\')always 返回父主题的模板目录URL。所以使用<?php bloginfo(\'template_url\'); ?>/style.css 将始终是父主题的样式表。

自从bloginfo echo出事了,我猜你没有使用WordPressenqueue system, 你应该是这样的。这是最灵活的。最终用户想要删除您的样式表?简单只是dequeue it.

也就是说,您可以通过过滤器更改bloginfo的输出。

要了解其工作原理,您必须跟踪其工作原理bloginfo 作品首先,bloginfo 是的包装器get_bloginfo. 让我们看看这条线,与你的问题相关:

<?php
function get_bloginfo( $show = \'\', $filter = \'raw\' ) {

    switch( $show ) {
        // snip snip

        case \'stylesheet_url\':
            $output = get_stylesheet_uri();
            break;
        case \'stylesheet_directory\':
            $output = get_stylesheet_directory_uri();
            break;
        case \'template_directory\':
        case \'template_url\':
            $output = get_template_directory_uri();
            break;

                // snip snip
    }

    $url = true;
    if (strpos($show, \'url\') === false &&
        strpos($show, \'directory\') === false &&
        strpos($show, \'home\') === false)
        $url = false;

    if ( \'display\' == $filter ) {
        if ( $url )
            $output = apply_filters(\'bloginfo_url\', $output, $show);
        else
            $output = apply_filters(\'bloginfo\', $output, $show);
    }

    return $output;
}
这是bloginfo.

<?php
function bloginfo( $show=\'\' ) {
    echo get_bloginfo( $show, \'display\' );
}
如您所见,过滤器始终设置为display, 这意味着WP将使用apply_filters 在…上get_bloginfo\'s输出。

所以要改变现状,你可以bloginfobloginfo_url. 我们想要bloginfo_url.

<?php
add_filter(\'bloginfo_url\', \'wpse76262_change_stylesheet\', 10, 2);
function wpse76262_change_stylesheet($url, $show)
{
    if (\'stylesheet_url\' == $show) {
        $url = \'/the/change/stylesheet.css\';
    }

    return $url;
}
中也有过滤器get_stylesheet_uri, get_template_directory_uri, 和get_stylesheet_directory_uri 你也可以用。

SO网友:fuxia

这两种方法有两个区别:

  1. \'stylesheet_url\' 始终引用当前主题的目录,无论是子主题还是父主题。\'template_url\' 始终只是父主题
  2. \'stylesheet_url\' 可以通过插件或子主题进行过滤。过滤器命名为\'stylesheet_uri\'. 组合\'template_url\' 并且无法筛选附加的字符串。它不太灵活
如果要保持灵活性enqueue the stylesheet. 不写入link 主题的header.php.

结束

相关推荐

如何将CSS插入到函数中?

我有一个自定义函数,允许用户在下一个/上一个链接和分页之间进行选择,我正在尝试向下一个/上一个链接添加CSS类。我已经尝试了多种方法,并不断破坏我的主题。如何将CSS类插入到上一个和下一个链接中?// Pagination function my_theme_navigation() { global $shortname; if( get_option( $shortname . \'_next_prev_or_paginate\' ) ==