Intereting Posts
Исключение личных / защищенных сообщений через IP Авторы в меню, список шаблонов по автору Многодольные субдомены приводят к запрету 403 Класс контейнера, не отображающийся в меню навигации Как обрезать изображения определенного размера только для определенной страницы? Сохраняйте основные статьи и блоги авторов, отрываясь, Новости / Журнал, как сайт Определить постоянные ссылки для настраиваемого типа сообщений по таксономии в WP 3.4 Shortcode не работает в виджетах Безопасно ли использовать sslverify => true для wp_remote_get / wp_remote_post Можно ли искать авторов по профилю? Как удалить кнопку настройки темы на странице параметров панели инструментов и тем? не может связывать внешний url, настоящий url страницы, действующий как родительский URL-адрес Изменить эскиз сообщения с помощью формы редактирования переднего конца Отключить плагин на роль пользователя Есть ли плагин Twitter WordPress, который изменяет https на http?

Theme Customizer – динамический CSS-файл PHP

Недавно я переключился с использования пользовательского класса, чтобы включить панель параметров темы для встроенного Theme Customizer в WordPress.

Все идет неплохо – у меня есть предварительный просмотр в реальном времени, но я немного застрял в использовании «get_theme_mod ()» для извлечения значений в выделенный файл PHP.

Используя мой старый класс, я мог бы enqueue «dynamic.css.php», где я хотел бы включить «wp-load.php», чтобы позволить мне использовать различные функции для получения параметров и т. Д. В документах Customizer для объектов отображается только вывод динамического CSS внутри пользовательская функция в теме wp_head. Я действительно не хочу этого делать, если это необходимо.

Итак, я в настоящее время enewueing мой файл «dynamic.css.php» и выглядит следующим образом:

<?php header("Content-type: text/css; charset: UTF-8"); define( 'WP_USE_THEMES', false ); include('../../../../../wp-load.php'); ?> @media all and (max-width: <?php echo get_theme_mod('nav-primary-breakpoint'); ?>) { .drawer { margin-top: 42px; padding-top: 42px; top: -42px; } } 

Так я раньше делал это, поэтому я попытался в основном сделать то же самое, но get_theme_mod () вообще не работает.

Я также опасаюсь включить wp-load.php снова – я надеялся использовать подобную методологию до этого, не имея на самом деле ее включения.

Поэтому мои цели заключаются в следующем:

  • не загружать wp-load.php
  • иметь мой css в отдельном файле
  • не использовать css для вывода заголовков тем

Я также попытался удалить импорт wp-load.php и включить файл в голову моей темы, но это помещает вывод в тег body.

Какие-нибудь предложения по достижению моих целей здесь?

Solutions Collecting From Web of "Theme Customizer – динамический CSS-файл PHP"

@s_ha_dum прав, ajax plugin api – это путь. Я сам столкнулся с этой проблемой с динамическим файлом js, который я создал некоторое время назад.

В основном вы ставите в очередь свой стиль следующим образом:

 wp_enqueue_style('dynamic-css', admin_url('admin-ajax.php').'?action=dynamic_css', $deps, $ver, $media); 

Затем создайте функцию для загрузки динамического файла css:

 function dynaminc_css() { require(get_template_directory().'/css/dynamic.css.php'); exit; } 

И добавьте действия ajax:

 add_action('wp_ajax_dynamic_css', 'dynaminc_css'); add_action('wp_ajax_nopriv_dynamic_css', 'dynaminc_css'); 

где wp_ajax_* будет wp_ajax_* именованную функцию и иметь доступ ко всем основным функциям wp. Для фронта; end wp_ajax_nopriv_* выполняет незарегистрированные посетители

Обратите внимание, что я нашел add_action('wp_ajax_custom_function', 'custom_function') , если в плагине должен находиться файл базовой активации плагина, иначе он будет проигнорирован. Это краткое замечание об этом в справочном документе по действию . EDIT: Я только что проверил это снова и не могу повторить его. По-видимому, такого ограничения нет.

Это объяснение – расширенная версия этого сообщения на форуме Codex: http://Wordpress.org/support/topic/best-way-to-create-a-css-file-dynamically#post-4857705

Я создал библиотеку wp-dynamic-css, которая позволяет создавать CSS из динамического содержимого.

Это нарушает вашу цель не печатать CSS в голову документа, но преимущество этого подхода в том, что любые изменения, внесенные в Customizer, обновляются немедленно, чтобы показать, как изменения вступают в силу в реальном времени. 1

Библиотека позволяет использовать специальный синтаксис для представления переменных внутри вашего файла CSS.

Вот как это можно использовать:

 // 1. Load the library require_once 'wp-dynamic-css/bootstrap.php'; // 2. Enqueue the stylesheet (using an absolute path, not URL) wp_dynamic_css_enqueue( 'my-dynamic-style', 'path/to/my-style.css' ); // 3. Set the callback function (used to convert variables to actual values) function my_dynamic_css_callback( $var_name ) { return get_theme_mod($var_name); } wp_dynamic_css_set_callback( 'my-dynamic-style', 'my_dynamic_css_callback' ); 

Теперь предположим, что у вас есть файл с именем my-style.css с этим кодом:

 body { background-color: $body_bg_color; } 

Если, например, вызов get_theme_mod('body_bg_color') возвращает значение #fff , тогда my-style.css будет скомпилирован для:

 body { background-color: #fff; } 

[1] Начиная с версии 1.0.1 эта библиотека поддерживает как печать скомпилированного CSS в голову документа, так и загрузку его в качестве внешней таблицы стилей.