Недавно я выпустил плагин WP Coda Slider, который использует шорткоды для добавления слайдера jQuery к любому посту или странице. Я добавляю страницу параметров в следующей версии, и я хотел бы включить некоторые параметры CSS, но я не хочу, чтобы плагин добавлял варианты стилей как встроенный CSS. Я хочу, чтобы выбор динамически добавлялся в файл CSS при его вызове.
Я также хотел бы избежать использования fopen или записи в файл из соображений безопасности.
Легко ли сделать что-то подобное, или мне лучше просто добавить выбор стиля прямо на страницу?
@Chris_O : Я думал почти о том же. То, что я хочу, — это способ вызова
wp_enqueue_style()
(иwp_enqueue_script()
) с именем функции вместо имени файла, чтобы моя функция генерировала CSS (или JS), но в конечном итоге включала ее через связанную таблицу стилей. Насколько я знаю, это невозможно сwp_equeue_*()
функциями. Может быть, нам следует подать трек-билет?@MikeSchinkel: Это был бы очень логичный способ использования функций wp_enqueue. Я бы добавил поддержку к этому билету.
@Chris_O: я только что видел ответ @Doug; Я сделал неверное предположение, что вы и так это знали. Если бы я понял, что это не так, я бы указал вам здесь: wordpress.stackexchange.com/questions/556/#562
@MikeSchinkel Я знал о wp_register и wp_enqueue. Я искал способ создать таблицу стилей на основе значений со страницы параметров плагина.
@Chris_O : Ах. Мне нравится думать о себе как о человеке, который все еще может видеть, чего не хватает другим в решении, даже после того, как я узнаю решение (т. е. большинство экспертов не являются хорошими учителями, и хотя я не лучший эксперт, я в целом хороший учитель. ) OTOH, это то, что я пропустил, извините. 🙂
Кроме того, поскольку значения изменяются только при изменении значений на странице параметров, вы можете создать файл CSS при сохранении. Вы также можете хранить файлы CSS в каталоге плагинов, так что это немного более эффективно, чем запускать файл PHP для каждого запроса CSS с включениями и т. Д.
Спасибо! работал хорошо. Но я получил фатальную ошибку get_option()… is undefined. Затем я загрузил файл wp-config.php и исправил проблему.
Сумит, не могли бы вы объяснить, как вы использовали get_option внутри пользовательского файла CSS? Большое спасибо!
@ Dan-gayle Очень хороший момент. Плагин можно использовать более чем на одной странице, а некоторые пользователи используют его на 2 или 3 страницах. Он только ставит в очередь текущую статическую таблицу стилей и js на страницах, которые имеют шорткод.
Я согласен с Дэном Гейлом, хотя вы проголосовали за мой ответ. Добавление небольшого блока CSS в wp_head было бы намного лучше с точки зрения производительности, чем загрузка отдельной таблицы стилей при каждом просмотре страницы (даже если она ограничена несколькими сообщениями/страницами с шорткодом). Единственная причина использования отдельных таблиц стилей в первую очередь заключается в том, что они могут кэшироваться браузером. Динамические таблицы стилей нельзя кэшировать.
Это по-прежнему правильный подход к делу?
Вы должны загружать только
<link>
элементы в заголовке страницыЙесс. Это связано с тем, что ваш css должен влиять на все, начиная с верхней части страницы вниз. Я рад воздействовать только на то, что идет после тега h1. Я не смог заставить работать ни один из примеров (я думаю, они могут быть плохо объяснены). Попробуйте сами на каком-нибудь тестовом html. Если я ошибаюсь, скажи мне 🙂
@chazza Это не единственная причина. Когда браузер обнаруживает какие-либо стили после записи тега body, он останавливает все остальные действия, пока этот стиль не будет загружен и применен, что плохо сказывается на производительности и приводит к перекомпоновке экрана и миганию нестилизованного текста. Однако, если это не имеет большого значения, добавьте эти файлы css, как вы сказали. Я делаю это все время, и в конце дня все в порядке. Не оптимально, но нормально.
Используйте
wp_register_style
иwp_enqueue_style
для добавления таблицы стилей. НЕ добавляйте просто ссылку на таблицу стилей вwp_head
. Стили очереди позволяют другим плагинам или темам изменять таблицу стилей, если это необходимо.Ваша таблица стилей может быть файлом.php:
my-stylesheet.php будет выглядеть так:
Динамическое создание файла CSS, а затем его загрузка добавляет ОГРОМНУЮ нагрузку на производительность к тому, что должно быть очень низкой пропускной способностью при добавлении файла CSS, особенно если в CSS есть переменные, которые будут обрабатываться через WP. Поскольку для загрузки одной страницы создаются два разных файла, WP запускается дважды и дважды выполняет все запросы к БД, и это большой беспорядок.
Если ваш слайдер будет только на одной странице, и вы хотите, чтобы стили устанавливались динамически, то лучше всего добавить блок стилей в заголовок.
В порядке исполнения:
Вот как я обычно это делаю:
У меня были трудности со всеми рекомендациями подобного рода — может быть, я немного туговат, или, может быть, участники потеряли общий контакт.
Я решил закодировать это в php-файле плагина: —
Кажется, это работает. Он загружается только на те страницы, которые используют плагин. Он загружается после тега h1, что меня устраивает. Я не вижу, как это может быть более эффективным или более понятным.
….но, возможно, я ошибаюсь — я сказал, что был немного толстоват.
Обновление с WordPress 3.3
Существует функция wp_add_inline_style, которую можно использовать для динамического добавления стилей на основе параметров темы/плагина. Это можно использовать для добавления небольшого файла css в голову, что должно быть быстрым и эффективным.