Enqueue Stylesheets After Theme «rtl.css»

В настоящее время я разрабатываю тему с поддержкой интернационализации и хотел бы загрузить таблицы стилей после rtl.css моей темы. (альтернативный style.css загружен для языков с порядком чтения справа налево).

Я знаком с постановкой в ​​очередь моих таблиц стилей и контролем их порядка загрузки с зависимостями, использующими функции wp_register_style () и wp_enqueue_style () , однако rtl.css автоматически загружается WordPress, когда направление языка локали < code> rtl , и, похоже, нет способа указать таблицу стилей как зависимость.

Я знаю, что могу условно ставить таблицы стилей в очередь с помощью is_rtl () Функция code>, однако элементы & lt; link & gt; этих таблиц стилей по-прежнему распечатываются до того, как WordPress автоматически напечатает rtl.css . Я также мог бы просто вручную вставить & lt; link & gt; в таблицы стилей, от которых я хочу зависеть от rtl.css сразу после вызова wp_head () в файле header.php моей темы, но я считаю, что это плохая практика, и мне бы хотелось, чтобы моя тема была коммерческого качества.

Как загрузить таблицы стилей после загрузки WordPress rtl.css ?

Ответы и комментарии:

Какой именно rtl.css вы имеете в виду? В самом ядре WP нет такого точного файла (хотя есть в некоторых нативных темах).
Создан 11-06-2014 06:12 Rarst

Файл rtl.css используется при разработке темы для работы с языками RTL;)
Создан 12-06-2014 06:42 Melika .A

Скорее должно быть сообщение в блоге :) +1 ... и, возможно, патч для ядра.
Создан 13-06-2014 12:20 kaiser♦

Другой вариант - зарегистрировать таблицу стилей в обычном режиме, но вывести ее явно (используя wp_print_scripts () по дескриптору), перехватывая после rtl. С другой стороны, это может создать проблему с перехватом внутри несколько раз, потому что другой код может не учитывать многократное использование функции ...
Создан 13-06-2014 08:49 Rarst

@kaiser - спасибо! Я вполне могу написать краткую заметку. Я не уверен, достаточно ли я знаком с функциональностью WP i18n / l10n, чтобы определить, будет ли полезен патч для ядра.
Создан 13-06-2014 09:37 bosco

@Rarst - хорошие мысли вокруг. Сегодня вечером я поиграю с реализацией и добавлю ее в перечисленные решения.
Создан 13-06-2014 09:25 bosco

Порядок печати таблицы стилей
WordPress не загружает альтернативные файлы rtl.css тем, используя wp_register_style () или wp_enqueue_style (). Таким образом, таблица стилей не добавляется в очередь стилей WordPress и не может быть указана в качестве зависимости при регистрации или постановке в очередь дополнительных таблиц стилей.
Вместо этого элемент этой таблицы стилей добавляется с помощью функции locale_stylesheet (), которая присоединяется к действию wp_head. wp_print_styles подключается к действию wp_head с приоритетом 8, в то время как locale_stylesheet () имеет приоритет по умолчанию 10, что означает, что все стили, которые вы ставите в очередь с помощью wp_enqueue_style (), всегда будут распечатываться до rtl.css.

Заметка
locale_stylesheet () вызывает get_locale_stylesheet ()
  функция
  чтобы определить, какая языковая таблица стилей темы релевантна загрузке. Сначала он ищет {locale} .css (т. Е. En_US.css) - если файл не существует, затем он ищет {text-direction} .css (т.е. rtl.css или ltr.css). Помните, что если вы предоставите таблицу стилей {locale} .css для текущей локали, WordPress не будет автоматически загружать ваш rtl.css

Решения
Есть несколько способов изменить это поведение, но следует отметить, что оно существует по определенной причине - загружая rtl.css после всех таблиц стилей enqueue'd, WordPress предоставляет теме возможность перезаписывать любые правила CSS, предоставляемые плагинами. и тому подобное, в противном случае поддерживаются только языки слева направо. Все решения, которые я предоставляю ниже, в основном устраняют эту возможность и могут создавать конфликты, если какие-либо плагины зависят от поведения WordPress по умолчанию (я не могу себе представить, что многие это делают).
Вручную ставьте в очередь вашу таблицу стилей
Если вы запретите WordPress автоматически загружать файл rtl.css, вы можете обращаться с ним так же, как и с любой другой таблицей стилей, предоставляя вам контроль над загрузкой скрипта. Есть два способа сделать это, которые приходят на ум:

Подключитесь к действию, которое запускается перед wp_head, и удалите ловушку locale_stylesheet ():
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
Подключившись к действию перед wp_head и дав хуку locale_stylesheet () более низкий приоритет, чем wp_print_styles, вы можете заставить rtl.css всегда загружать перед таблицами стилей wp_enqueue_style () d, фактически делая его таким, как если бы у каждой таблицы стилей enqueue'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');
Создан 12-06-2014 11:01