Просто к вашему сведению, этот вопрос, вероятно, граничит со слишком локализованным , поскольку он специфичен для темы энологии.
Тем не менее, вот где я думаю, что у вас возникли проблемы: Энология ставит в очередь две таблицы стилей:
style.css
, прямо в заголовке документа (при этом раньше wp_head()
срабатывает)
{varietal}.css
, В wp_enqueue_scripts
, с приоритетом 11
в functions/dynamic-css.php
:
/**
* Enqueue Varietal Stylesheet
*/
function oenology_enqueue_varietal_style() {
// define varietal stylesheet
global $oenology_options;
$oenology_options = oenology_get_options();
$varietal_handle = 'oenology_' . $oenology_options['varietal'] . '_stylesheet';
$varietal_stylesheet = get_template_directory_uri() . '/varietals/' . $oenology_options['varietal'] . '.css';
wp_enqueue_style( $varietal_handle, $varietal_stylesheet );
}
// Enqueue Varietal Stylesheet at wp_print_styles
add_action('wp_enqueue_scripts', 'oenology_enqueue_varietal_style', 11 );
Сортовая таблица стилей, которая применяет «скин», ставит в очередь приоритет 11
, чтобы гарантировать, что базовая таблица стилей style.css
загружается первой , а сортовая таблица стилей загружается второй , чтобы вызвать правильный каскад.
Итак, если вам нужно переопределить таблицу стилей сорта , просто поставьте вашу вторую таблицу стилей в очередь после таблицы стилей сорта; т.е. с приоритетом не менее 12
или выше.
редактировать
Чтобы дать более общий ответ, на более общий вопрос:
Чтобы переопределить очередь таблиц стилей родительской темы, вам необходимо знать две вещи:
- Крюк действие , при котором таблица стилей помещён
- Приоритет , при котором обратный вызов добавляется к крюку
Функции постановки в очередь ( wp_enqueue_script()
/ wp_enqueue_style()
) могут быть правильно выполнены в любом месте между init
хуком и хуками wp_print_scripts
/ wp_print_styles
. ( Семантически правильная ловушка для выполнения wp_enqueue_*()
функций в настоящее время wp_enqueue_scripts
.) Этот список включает следующие действия (среди прочего; это просто обычные подозреваемые):
init
wp_head
wp_enqueue_scripts
wp_print_scripts
/wp_print_styles
(Обратите внимание , что wp_enqueue_scripts
, wp_print_styles
и wp_print_scripts
все огонь внутри из wp_head
, в определенной очередности .
Итак, чтобы переопределить таблицу стилей Parent-Theme, вам необходимо выполнить одно из следующих действий:
- Очистите таблицу стилей Parent-Theme с помощью
wp_dequeue_style( $handle )
- Удалите колбэк Parent Theme, который ставит в очередь стиль, через
remove_action( $hook, $callback )
Используйте CSS-каскад, чтобы переопределить таблицу стилей Parent-Theme, зацепив wp_enqueue_style()
вызов таблицы стилей Child-Theme в тот же хук с более низким приоритетом или в последующий хук .
Для этого последнего варианта, если родительская тема использует:
`add_action( 'wp_enqueue_scripts', 'parent_theme_enqueue_style', $priority )`
... тогда тема ребенка будет использовать:
`add_action( 'wp_enqueue_scripts', 'child_theme_enqueue_style', {$priority + 1} )`
единственный способ гарантировать, что у моих стилей было последнее слово в каскаде, было включить их в конец <head> через хук wp_head. wp_enqueue не работает в пределах wp_head, поэтому мне пришлось отображать ссылку напрямую:наконец, я могу устанавливать свои стили относительно легко, без использования высокого уровня специфичности или правила! Important, которое следует использовать только в качестве крайней меры.WP нужна лучшая система оформления стилей. каждый стиль, будь то ссылка на файл или встроенный стиль, должен передаваться через один и тот же хук, позволяющий Приоритету определять их порядок. необязательно для целей отладки, было бы полезно, если бы ловушка также выводила значения Приоритета каждого стиля, возможно, в закомментированной форме.
Обновить
Мне удалось сохранить контроль над стилями в моей дочерней теме, сохраняя при этом исходный каскад родительской темы (в которой используется основная таблица стилей, вспомогательная таблица стилей и несколько операторов стилей), разделив мою таблицу стилей на две части, как описано в разделе вопрос. Я больше не использую хук wp_head (), вместо этого использую правильный и стандартный хук wp_enqueue_scripts () с высоким порядковым номером, чтобы моя таблица стилей загружалась последней.
Таблица стилей моей дочерней темы по умолчанию:
функция, чтобы поставить мою основную таблицу стилей в очередь:
Тем не менее, есть несколько сгенерированных WP инструкций стиля (т.е. не родительская тема), которые указаны после моей таблицы стилей, и мне нужно будет либо использовать правила css высокой специфичности, чтобы переопределить правила, которые меня интересуют, либо искать перехватывает их отключение, в частности правило body.custom-background.
Спасибо всем за ваши комментарии.
ура,
Грегори
источник
Вы всегда должны использовать
wp_enqueue_style()
для загрузки таблицы стилей, и что функции должны быть подключены к крюку wp_enqueue_scripts с прогонами в голове . Я подозреваю, что вы не зацепили это там, отсюда ваша проблема. (Начиная с WP 3.3, еслиwp_enqueue_style()
подключен к чему-либо еще, он выдает Уведомление с включенным WP_Debug).источник