Как добавить динамические встроенные стили?

28 июн. 2013 г., 23:07:26
Просмотры: 22K
Голосов: 2

Я хочу добавить динамический CSS, сейчас я добавляю его прямо в div, то есть:

$color = "#000000";
echo '<div style="background:'.$color.'">

Плохо ли добавлять код таким образом?

Я читал на некоторых форумах, что это создает нагрузку на сервер и не рекомендуется стандартами кодирования WordPress. Я должен использовать wp_add_inline_style(). Я пытаюсь использовать эту функцию, но она не работает. Вот что я пробую:

functions.php:

function add_custom_css() {
        wp_enqueue_script('custom-css', get_template_directory_uri() . '/custom.css');          
    }
}
add_action( 'wp_enqueue_scripts', 'add_custom_css' );

single.php

$color = "#000111";
$custom_css = "
    .mycolor{
            background: {$color};
    }";

wp_add_inline_style( 'custom-css', $custom_css );

Это не добавляет никакого кода в файл custom.css. Что я делаю неправильно?

1
Комментарии

+1, но отредактировано, чтобы привести пример использования условных запросов для объединения всего кода подключения стилей в одном месте.

Chip Bennett Chip Bennett
5 апр. 2014 г. 17:47:01
Все ответы на вопрос 5
3
10

Попробуйте так:

Использование условных запросов

Размещение подключения стилей непосредственно в шаблоне не рекомендуется. Это возможно (если вы понимаете порядок выполнения соответствующих действий и убедитесь, что ваш вызов wp_add_inline_style() происходит в правильной точке порядка выполнения). Гораздо проще держать весь код вместе и использовать соответствующий условный запрос, такой как is_single(), для добавления динамического стиля:

function add_custom_css() {
    wp_enqueue_style('custom-css', get_template_directory_uri() . '/custom.css');   
    // Добавляем динамический стиль, если отображается отдельная страница
    if ( is_single() ) {
        $color = "#000111";
        $custom_css = ".mycolor{ background: {$color}; }";
        wp_add_inline_style( 'custom-css', $custom_css );
    }
}
add_action( 'wp_enqueue_scripts', 'add_custom_css' );

Исходный ответ

functions.php

function add_custom_css() {
    wp_enqueue_style('custom-css', get_template_directory_uri() . '/custom.css');          
}
add_action( 'wp_enqueue_scripts', 'add_custom_css', 20 );

single.php

function wpse104657_custom_color() {
    $color = "#000111";
    $custom_css = "
        .mycolor{
            background: {$color};
        }";
    wp_add_inline_style( 'custom-css', $custom_css );
}
add_action( 'wp_enqueue_scripts', 'wpse104657_custom_color', 21 );

Третий параметр в вызовах add_action() — это приоритет, который указывает WordPress, в каком порядке добавлять действие — более высокие числа означают более позднее выполнение.

Дополнено Это не добавит никакого кода в custom.css — это просто добавит встроенные стили если custom.css уже был загружен.

Ссылки

28 июн. 2013 г. 23:26:31
Комментарии

Должен ли этот код выполняться на хуке wp_enqueue_styles вместо этого?

Jack Jack
9 дек. 2016 г. 17:05:39

Хука wp_enqueue_styles не существует. Стили и скрипты должны подключаться на хуке wp_enqueue_scripts.

Pat J Pat J
9 дек. 2016 г. 17:10:55

Но я обновил свой ответ, чтобы использовать wp_enqueue_style() вместо wp_enqueue_script() для подключения таблицы стилей. Спасибо.

Pat J Pat J
9 дек. 2016 г. 17:14:16
0

Он не добавляет никакого кода в файл custom.css. Что я делаю не так?

Эти стили добавляются в HTML-документ внутри тегов <style>, а не в таблицу стилей, которую вы подключаете (enqueue). Тем не менее, вам всё равно нужно сначала подключить таблицу стилей перед добавлением "встроенных" стилей.

Название функции немного вводит в заблуждение, потому что она создаёт блоки стилей, а не настоящие встроенные стили (inline styles). То, что вы сделали с DIV выше — это как раз встроенный стиль. Таких лучше избегать, потому что они имеют наивысший приоритет перед правилами с !important (переопределить их будет очень сложно).

Я читал на одном форуме, что это увеличивает нагрузку на сервер

Нет, это не так. Вероятно, вы путаете это с PHP-скриптами, которые выступают в роли таблиц стилей. Вот это действительно плохая практика.

28 июн. 2013 г. 23:26:48
0

Возможно, это только мое мнение, но кажется, что мы делаем из мухи слона. (это фразеологизм... можете погуглить :))

Если вы разрабатываете тему, к которой может быть привязана дочерняя тема, то добавление стилей напрямую инлайн или через wp_add_inline_style() в любом случае потребует использования !important для их переопределения.

Если это кастомный плагин, и изменение цвета фона — критически важная часть функциональности, тогда конечно, добавляйте его инлайн.

Я не вижу никакого преимущества в излишнем усложнении этого вопроса.

Отвечая на изначальный вопрос.

Плохо ли добавлять код, как в примере выше?

Простой ответ — Нет, это не плохо. У такого подхода есть последствия, но производительность сервера к ним не относится, и я не нашел ничего в стандартах кодирования WordPress, что бы это запрещало. В целом, инлайн-стили стоит использовать умеренно и аккуратно, но они не являются чем-то плохим.

Если вы хотите четко разделять ответственность, можно добавить класс инлайн вместо стилей.

$color = "black";
echo '<div class=".$color.">'

А затем определить .black в вашей таблице стилей. (Конечно, это работает только если у вас есть предопределенный список цветовых вариантов.)

1 сент. 2016 г. 19:39:01
0

Просто используйте:

add_action('admin_head','myfunc24235235');
function myfunc24235235(){ ?>

  <style>
  .smth{ color:red;}
  </style>

    <?php
}
1 сент. 2016 г. 16:35:23
0

Я делаю это во всех своих шаблонах, используйте:

<?php
    function hook_css() {
        ?>
            <style>
                .sub { margin: auto; max-width: 1140px;}
            </style>
        <?php
    }
    add_action('wp_head', 'hook_css');
?>

Это поместит указанные теги стилей и стили в раздел head после выполнения

<?php wp_head();?>

Если вы встраиваете это в шаблон, убедитесь, что размещаете это перед секцией

<?php wp_head();?>. Подробнее об этом можно узнать здесь WordPress Codex

9 сент. 2017 г. 23:27:14