it-swarm.com.ru

Добавление стилей настройщика с помощью wp_add_inline_style

Как я рассказано в предыдущем вопросе есть тема с сотнями модов, которые я собираю в одном моде, поэтому мне не нужно перебирать все моды при каждой загрузке страницы.

Теперь, в кодексе есть дамп стилей настройщика прямо в голове, что не очень элегантно. Существует wp_add_inline_style для упорядоченного добавления CSS к существующей таблице стилей. Это выглядит так и работает нормально:

$style = get_theme_mod ('all-mods');
wp_add_inline_style ('my-main-style',$style);

Однако есть одна проблема. Если я создаю дочернюю тему, встроенные стили по-прежнему добавляются непосредственно после родительских стилей. Это приводит к их отмене дочерней темой css, которая загружается после родительской, чтобы убедиться, что она переопределяет эти стили. Это не то, что ожидает пользователь.

Стили настройщика должны иметь самый высокий приоритет, поэтому в некотором смысле я должен убедиться, что они являются последними, которые будут загружены в голову. Я могу определить, есть ли дочерняя тема активна , но не могу знать дескриптор дочернего стиля, чтобы добавить к нему встроенные стили.

На данный момент я просто определил пустой файл CSS, который я ставлю в очередь прямо в конце главы, а затем добавляю встроенные стили. Но это далеко не элегантно, поэтому я и выбрал этот путь. Кто-нибудь знает о более разумном подходе?

4
cjbj

Вы можете попытаться определить, является ли текущая используемая тема дочерней, и, если это так, указывать встроенный CSS на правильный стиль. Я не тестировал это решение, но мог бы стать хорошей отправной точкой.

function mytheme_enqueue_style()
{
    wp_enqueue_style( 'parent-theme-style',get_template_directory_uri() . '/style.css', false );

    if(is_child_theme())
    {
        wp_enqueue_style( 'child-theme-style', get_stylesheet_directory_uri() . '/style.css', array('parent-theme-style')  );
    }

    $style = get_theme_mod ('all-mods');
    $where = is_child_theme() ? 'child-theme-style' : 'parent-theme-style';
    wp_add_inline_style( $where, $style );
}

add_action( 'wp_enqueue_scripts', 'mytheme_enqueue_style' );

НОТА

Существует разница между get_template_directory_uri() и get_stylesheet_directory_uri() на самом деле по кодексу

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

1
koMah