Dlaczego mój CSS motywu potomnego jest wywoływany dwukrotnie?

18

Stworzyłem motyw potomny zgodnie z dokumentacją WP i dodałem wymaganą funkcję

<?php
add_action( 'wp_enqueue_scripts', 'enqueue_child_theme_styles', PHP_INT_MAX);
function enqueue_child_theme_styles() {
    wp_enqueue_style( 'parent-style', get_template_directory_uri().'/style.css' );
    wp_enqueue_style( 'child-style', get_stylesheet_uri(), array('parent-style')  );
}

W jakiś sposób otrzymuję 2 odniesienia do mojego arkusza stylów podrzędnych:

<link rel='stylesheet' id='twentythirteen-style-css'  href='http://DOMAIN.COM/wp-content/themes/twentythirteen-child/style.css?ver=2013-07-18' type='text/css' media='all' />

<link rel='stylesheet' id='child-style-css'  href='http://DOMAIN.COM/wp-content/themes/twentythirteen-child/style.css?ver=4.0' type='text/css' media='all' />

Dlaczego?

mmcglynn
źródło
Czy możesz opublikować informacje o nagłówku pliku style.css w motywie potomnym?
cybmeta

Odpowiedzi:

17

Ten post jest powiązany z tym postem, który zaktualizowałem teraz wraz ze zmianami w tym poście

Dziękujemy za poruszenie tego problemu. Szybko przetestowałem ten scenariusz, a styl potomny jest faktycznie ładowany dwukrotnie.

Kiedy zaktualizowałem kodeks jakiś czas temu, upewniłem się, że styl podrzędny zostanie załadowany po stylu nadrzędnym, nigdy nie biorąc pod uwagę, że jest to faktycznie wykonywane domyślnie, a podany kod faktycznie załaduje arkusz stylów podrzędnych dwukrotnie.

Można to łatwo naprawić, po prostu usuwając $priorityz funkcji i usuwając część kolejkową dla motywu potomnego. Ponownie przetestowałem wszystko i działa. Byłoby miło, gdyby kilka osób mogło z tym współpracować.

W międzyczasie zaktualizuję kodeks i link do tego postu.

Oto działający kod

add_action( 'wp_enqueue_scripts', 'enqueue_parent_theme_style');
function enqueue_parent_theme_style() {
    wp_enqueue_style( 'parent-style', get_template_directory_uri().'/style.css' );
}

EDYTOWAĆ

Dla każdego, dla kogo ten post nie działa, zobacz tym postem . Musisz przejść i sprawdzić, w jaki sposób motyw nadrzędny dodaje style. Kod w tym pytaniu ściśle wierzy, że style w rodzicu są ładowane w prawidłowy sposób, w jaki powinny być. Jeśli nie, spójrz na alternatywy w połączonej odpowiedzi i wypróbuj je

Pieter Goosen
źródło
1
Testuje. Wydaje się możliwe, że WP nie przejmuje się tym, że arkusz stylów zostanie załadowany dwukrotnie lub że brakuje jakiegoś uzasadnienia.
mmcglynn
W tym temacie napotkałem kilka problemów związanych z tą metodą, szczegółowo opisanych tutaj .
dMcClintock
Arkusz stylów nie zostanie załadowany dwukrotnie, jeśli użyjesz tego samego „id”. Ale to stwarza kolejny problem - chcę przekształcić podrzędny arkusz stylów, aby ładował się po drugim css, więc mogę go zastąpić ... Ale to tylko duplikuje styl (lub ignoruje, jeśli używa tego samego „id”)
php-b- równiarka
1
Głównym problemem związanym z tą metodą jest to, że styl potomny nie pobiera numeru wersji motywu potomnego. Wygląda na to, że pobiera numer wersji motywu nadrzędnego, co nie zawsze jest idealne.
Garconis,
@ Pieter-Goosen ja za przykładem na Themes Rodziny , który wykorzystuje numer wersji motywu dziecka: wp_get_theme()->get('Version'). Jednak ostatecznie zduplikowałem CSS dla wersji WP i wersji motywu podrzędnego: <link rel="stylesheet" id="bushwick-style-css" href="/wordpress//wp-content/themes/bushwick-child/style.css?ver=4.9.8"...>i <link rel="stylesheet" id="bushwick-child-css" href="/wordpress//wp-content/themes/bushwick-child/style.css?ver=1.3.6"...>. Jakie byłoby rozwiązanie w tych przypadkach?
IvanRF