як я маю чергу в моєму дочірньому таблиці стилів / s * після * кожного батьківського таблиці стилів / виписки?


11

Я використовую добре написану тему "Енологія" Чіпа Беннета в якості теми "Батько для моєї дитини".

У процесі свого розвитку я виявив, що люди, які пишуть дочірні теми, мають певні проблеми, коли справа стосується контролю стилів.

Щойно я виявив, що мій основний файл style.css завантажується перед будь-яким іншим посиланням таблиці та стилем у <head>, і це пояснює, чому у мене виникли проблеми з перекриттям деяких батьківських стилів.

подальше вивчення проблеми показує, що різні таблиці батьків та стилі батьків можуть стояти в черзі в <head> у трьох місцях; add_action('wp_print_styles',,, add_action('wp_enqueue_scripts',і тоді add_action('wp_head',.

щоб все було просто, я планую створити дві таблиці стилів. перший головний аркуш 'style.css' включав би лише @import url()команду, необхідну для завантаження основної таблиці стилів Eenology.

друга таблиця стилів містила б правила моєї дитини. щоб переконатися, що він завантажений після всіх інших правил, я буду в черзі, використовуючи його add_action( 'wp_head',.

це звучить розумно? чи є кращий (правильніший) спосіб це зробити?

btw, хтось знає, що означає "/parent-theme/style.css ? MRPreviewRefresh = 723 "?

Оновлення

wp_enqueue_style () не працює в wp_head ().

ура,
Григорію

Відповіді:


21

Щойно FYI, це питання, ймовірно, межує з надто локалізованими , оскільки це специфічно для Теми енології.

Це означає, що ось, я думаю, у вас виникають проблеми: Енологія стосується двох таблиць стилів:

  1. style.css, безпосередньо в заголовку документа (таким чином, перш ніж wp_head() буде звільнено)
  2. {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або більше.

Редагувати

Щоб надати більш загальну відповідь на більш загальне питання:

Для того, щоб замінити запит на стилі батьківської теми стилів, вам потрібно знати дві речі:

  1. Крюк дію , при якому таблиця стилів поміщений
  2. Пріоритет , при якому зворотний виклик додається до гака

Enqueue функція ( 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 )
  • Видаліть зворотний виклик батьківської теми, який викликає стиль, черезremove_action( $hook, $callback )
  • Використовуйте каскад CSS, щоб замінити таблицю стилів "Батьківська тема", підключивши wp_enqueue_style()виклик таблиці стилів "Тема дитини" в той же гак із нижчим пріоритетом або на пізніший гак .

    Для цього останнього варіанту, якщо батьківська тема використовує:

    `add_action( 'wp_enqueue_scripts', 'parent_theme_enqueue_style', $priority )`

    ... тоді Тема для дитини використовує:

    `add_action( 'wp_enqueue_scripts', 'child_theme_enqueue_style', {$priority + 1} )`

дякую, Чіп. Я дійсно можу використовувати wp_enqueue_scripts та високий порядковий знак, щоб заставити таблицю стилів для дитини останньою для завантаження. Однак у моєму викладі таблиці стилів ще є 3 твердження різних стилів. 2 з них виводиться самим WP !!!, а 1 виводиться Oenology за допомогою функції add_custom_image_header () wp.
Григорій

оператор стилю body.custom-background виводиться самим WP, але, схоже, я можу вказати спеціальний колір фону, визначивши "BACKGROUND_COLOR". дивно, що базове правило css потрібно буде встановити за допомогою спеціальної константи WP.
Григорій

1
останній коментар Чіп. це питання не надто локалізовано. багато тем використовуватимуть усі доступні гачки для стилів для друку чи друку, а розробникам дочірньої теми потрібно знати, як змінити ці стилі, не вимикаючи їх обов'язково. ура.
Григорій

Проблема, яку я бачу з цим, полягає в тому, що child_theme_enqueue_style завантажить дитячий стиль з більш високим пріоритетом, далі вниз по wp_head АЛЕ воно буде дублювати дочірній таблицю стилів - Wordpress автоматично автоматично завантажить дочірню таблицю стилів у звичайний пріоритет, а потім знову завантажить її, далі вниз з новим пріоритетом. Хоча він досягає результату перезавантаження всіх інших таблиць стилів, він створює дублікат таблиць стилів на сторінці.
php-b-грейдер

2

єдиний спосіб гарантувати, що мої стилі мають остаточне слово в каскаді, - включити їх у кінці <head> через гачок wp_head. wp_enqueue не працює в wp_head, тому мені довелося переймати посилання безпосередньо:

function gregory_enqueue_stylesheets() {
    $base = get_stylesheet_directory_uri();
    echo '<link rel="stylesheet" href="'.$base.'/style-gregory.css" type="text/css" media="all">';
    return;
}
add_action( 'wp_head', 'gregory_enqueue_stylesheets', 18 );

нарешті, я можу задати свої стилі відносно легко та без використання високих рівнів специфіки чи важливого правила! яке слід використовувати лише в крайньому випадку.

WP потребує кращої стилістичної системи. кожен стиль, будь то посилання на файл чи стиль вбудованого, повинен проходити через один і той же гак, що дозволяє пріоритету визначати їх порядок. необов'язково для цілей налагодження, було б корисно, якщо гачок також виводить значення пріоритету кожного стилю, можливо, у коментованій формі.

Оновлення

Мені вдалося зберегти контроль над стилями в моїй дочірній тематиці, зберігаючи оригінальний каскад батьківської теми (що використовує основний таблицю стилів, таблицю під стилів та кілька висловлювань стилів), розділивши мою таблицю стилів на дві частини, як пояснено в питання. Я більше не використовую гачок wp_head (), натомість використовую належний і стандартний гак wp_enqueue_scripts () з високою порядковою ціллю, щоб мій лист стилів завантажувався останнім часом.

Таблиця стилів моєї дитини за замовчуванням:

/*
Theme Name: Oenology-Gregory
Template: oenology
Version: 20120506-0026
*/

@import url("/wp-content/themes/oenology/style.css");

функція, щоб охопити основний аркуш стилів:

function gregory_enqueue_stylesheets() {
    $base = get_stylesheet_directory_uri();
    wp_enqueue_style( 'style-gregory', $base.'/style-gregory.css' );
    return;
}
add_action( 'wp_enqueue_scripts', 'gregory_enqueue_stylesheets', 18 );

Однак є кілька заяв стилів, створених WP (тобто не батьківська тема), які викладені після мого таблиця стилів, і мені доведеться переглядати, використовуючи або правила css високої специфіки, щоб змінити правила, які мене стосуються, або шукати гачки, щоб відключити їх, зокрема правило body.custom-background.

дякую всім за ваші коментарі.

ура,
Григорію


1

Ви завжди повинні використовувати wp_enqueue_style()для завантаження таблиці стилів, і функції повинні бути підключені до гачка wp_enqueue_scripts з пробіжками в голові . Я підозрюю, що ти його там не зачепив, звідси і твоя проблема. (Станом на WP 3.3, якщо wp_enqueue_style()він підключений до чогось іншого, він видає Повідомлення із увімкненим WP_Debug).


@ Відповідь Чіпа краща за мою, і він, мабуть, більш кваліфікований, щоб обговорити тему "Енологія";) Це випадок, коли я повинен видалити свою відповідь, хоча це правильно?
mrwweb

Ні, я залишив би вашу відповідь. Це правильно і стосується конкретної частини питання.
Чіп Беннетт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.