将样式表排在主题的“rtl.css”之后

时间:2014-06-11 作者:Melika .A

我目前正在开发一个具有国际化支持的主题,并希望在我的主题之后加载样式表rtl.css (备选方案style.css 为具有从右向左阅读顺序的语言加载)。

我熟悉使用wp_register_style()wp_enqueue_style() 但是,功能rtl.css 每当语言环境的语言方向为rtl, 而且似乎没有办法将样式表指定为依赖项。

我知道我可以使用is_rtl() 函数,但这些样式表\'<link> 在WordPress自动打印之前,元素仍会打印出来rtl.css\'s、 我也可以简单地手动插入<link>我希望依赖的样式表rtl.css 就在打电话给wp_head() 在我的主题中header.php 但我认为这样做是不好的做法,我希望我的主题是商业质量。

WordPress加载后如何加载样式表rtl.css?

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

WordPress不加载样式表打印顺序themes\' alternative rtl.css files 使用wp_register_style()wp_enqueue_style(). 因此,样式表不会添加到WordPress的样式队列中,并且在注册其他样式表或将其加入队列时,不能将其指定为依赖项。

相反,此样式表<link> 元素通过添加the locale_stylesheet() function, 连接到wp_head 行动wp_print_styles is hooked to the wp_head action with a priority of 8 while locale_stylesheet() has the default priority of 10, 这意味着您排队使用的所有样式wp_enqueue_style()always 打印出来before rtl.css.

Note

locale_stylesheet() 呼叫the get_locale_stylesheet() function 以确定要加载的区域设置相关主题样式表。首先,它寻找{locale}.css (即。en_US.css) - 如果文件不存在,它接下来会查找{text-direction}.css (即。rtl.cssltr.css). 请记住,如果您提供{locale}.css 当前区域设置的样式表WordPresswill not 自动加载rtl.css

解决方案有几种方法可以修改此行为,但应该注意,它的存在是有原因的-通过加载rtl.css 在所有排队的样式表之后,WordPress为主题提供了重写插件等提供的任何CSS规则的机会,否则这些规则只支持从左到右的语言。我在下面提供的所有解决方案大多都消除了这种可能性,如果任何插件依赖于WordPress的默认行为,则可能会产生冲突(我无法想象许多插件会这样做)。

如果您阻止WordPress自动加载rtl.css 文件,您可以将其视为任何其他样式表,从而控制脚本加载的时间。有两种方法可以实现这一点:

钩住an action that fires before wp_head 并删除locale_stylesheet()\'s挂钩:

function remove_locale_stylesheet() {
    remove_action( \'wp_head\', \'locale_stylesheet\' );
}
add_action( \'init\', \'remove_locale_stylesheet\' );
重命名您的rtl.css 文件到其他文件(不是ltr.css{locale}.css).

完成上述操作之一后,按照通常的方式将RTL样式表排队-有条件地is_rtl() 如果您还希望支持LTR语言。

反向wp_head\'s样式表打印顺序wp_head 和给予locale_stylesheet()\'s挂钩优先级低于wp_print_styles, 你可以强制rtl.css 始终在之前加载wp_enqueue_style()\'d样式表,有效地使每个排队的样式表都依赖于rtl.css:

function load_locale_style_first() {
    remove_action( \'wp_head\', \'locale_stylesheet\' );
    add_action( \'wp_head\', \'locale_stylesheet\', 7 );
}
add_action( \'init\', \'load_locale_style_first\' );

结束