it-roy-ru.com

Enqueue Stylesheets After Theme "rtl.css"

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

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

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

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

6
Melika .A

Порядок печати таблицы стилей

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

Вместо этого элемент <link> этой таблицы стилей добавляется через функцию 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(), фактически делая его таким, как если бы каждая таблица стилей 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' );
8
bosco