Intereting Posts
FitVid не работает для iframes для конкретной темы установки Пользовательский таксономический архив BUG Странные коды на моем сайте WordPress и мой сайт работают слишком медленно Сайт не работает при обновлении до SSL с помощью nginx Добавьте ссылку «страница-а» в категорию, если пользователь посещает ссылку категории с «page-a», Изменение дефиса / тире для вертикальной линии в меню Повторное использование пули «категории» для пользовательского типа сообщения Как создать архив автора только для определенной роли пользователя и показать связанный CPT Применение одного и того же стиля ко всем комментариям на странице Пользовательский тип почтового отправления и пользовательская таксономия не связаны Запретить отображение страницы Как избежать одиночных и множественных строк текста i18n? «Запрошенный URL / имя проекта / имя_файла / не найден на этом сервере.» На веб-сайте WordPress Наличие переменной, основанной на $ post_count, увеличивается, когда я перехожу на следующую страницу результатов wp_remote_get сохраняет тайм-аут

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 в голову документа, так и загрузку его в качестве внешней таблицы стилей.