부모 스타일 시트 / 문구마다 * 후에 * 자녀 스타일 시트를 대기열에 넣는 방법은 무엇입니까?


11

Chip Bennett의 잘 작성된 Oenology 테마를 내 자식 테마의 부모로 사용하고 있습니다.

개발 과정에서 스타일을 제어 할 때 Child 테마를 작성하는 사람들에게는 어려움이 있음을 발견했습니다.

방금 내 주요 style.css 파일이 <head>의 다른 모든 스타일 시트 링크 또는 명령문보다 먼저로드된다는 것을 발견했으며, 이것이 일부 부모 스타일을 재정의하는 데 문제가 발생한 이유를 설명합니다.

문제에 대한 추가 연구에 따르면 다양한 부모 스타일 시트와 스타일이 <head>에 세 곳에서 대기 할 수 있습니다. add_action('wp_print_styles',,, add_action('wp_enqueue_scripts',그리고 add_action('wp_head',.

간단하게하기 위해 두 개의 스타일 시트를 만들 계획입니다. 첫 번째 기본 'style.css'시트에는 @import url()Oenology의 기본 스타일 시트를로드하는 데 필요한 명령 만 포함됩니다 .

두 번째 스타일 시트에는 내 자식 규칙이 포함됩니다. 다른 모든 규칙 후에로드되도록 확인하려면을 사용하여 대기열에 넣습니다 add_action( 'wp_head',.

이것이 합리적으로 들립니까? 아니면 더 나은 (보다 정확한) 방법이 있습니까?

btw, 누구 '/parent-theme/style.css ? MRPreviewRefresh = 723 '의 의미를 알고 있습니까?

최신 정보

wp_enqueue_style ()이 wp_head ()에서 작동하지 않는 것 같습니다.

건배,
그레고리

답변:


21

참고로,이 질문은 아마도 Oenology 테마와 관련이 있기 때문에 너무 현지화 되어 있습니다.

즉, 여기 에 문제가 있다고 생각 합니다. Oenology는 두 가지 스타일 시트를 큐에 넣습니다.

  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 );

"스킨"을 적용하는 varietal 스타일 시트는 우선 순위가 높은 순서로 대기열에 포함 11되어 기본 스타일 시트가 먼저style.css 로드 되고 varietal 스타일 시트가 두 번째로 로드 되어 올바른 캐스케이드가 발생하도록합니다.

당신이 재정의해야한다면, 품종 스타일 시트를, 단순히 두 번째 스타일 시트 대기열 품종 스타일 시트를; 즉, 적어도 우선 순위를 갖는 것 12.

편집하다

보다 일반적인 질문에보다 일반적인 답변을 제공하려면 :

부모 테마 스타일 시트 대기열을 재정의하려면 다음 두 가지를 알아야합니다.

  1. 동작 후크 스타일 시트가 대기열되는
  2. 우선 콜백 후크에 첨가되는

인큐 기능 ( wp_enqueue_script()/ wp_enqueue_style())은 후크와 / 후크 사이의 어느 곳에서나 올바르게 실행할 수 있습니다 . ( 함수 를 실행하는 의미 상 올바른 후크 는 현재 입니다.) 이 목록에는 다음 조치가 포함됩니다 (다른 조치 중에서도 일반적인 용의자 임).initwp_print_scriptswp_print_styleswp_enqueue_*()wp_enqueue_scripts

  • init
  • wp_head
  • wp_enqueue_scripts
  • wp_print_scripts/wp_print_styles

( , 및 내부모든 화재 는 특정 우선 순위에 있음 wp_enqueue_scripts에 유의하십시오 .wp_print_styleswp_print_scripts wp_head

따라서 부모 테마 스타일 시트를 대체하려면 다음 중 하나를 수행해야합니다.

  • 다음을 통해 부모 테마 스타일 시트를 대기열에 넣지 마십시오 .wp_dequeue_style( $handle )
  • 다음을 통해 스타일을 큐에 넣는 부모 테마 콜백제거하십시오.remove_action( $hook, $callback )
  • Child-Theme 스타일 시트 wp_enqueue_style()호출을 우선 순위가 낮은 동일한 후크 또는 이후 후크 에 연결하여 CSS 캐스케이드를 사용하여 상위 테마 스타일 시트 대체 하십시오 .

    이 마지막 옵션의 경우, 상위 테마가 다음을 사용하는 경우 :

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

    ... 어린이 테마는 다음을 사용합니다.

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

고마워 칩. 실제로 wp_enqueue_scripts 및 높은 서수를 사용하여 Child 스타일 시트를 마지막으로로드 할 수 있습니다. 그러나 내 Child 스타일 시트 문 뒤에 여전히 3 개의 다른 스타일 문이 있습니다. 그중 2 개는 WP 자체에 의해 출력되고 1은 wp의 add_custom_image_header () 함수를 통해 Oenology에 의해 출력됩니다.
Gregory

body.custom-background 스타일 문은 WP 자체에서 출력되지만 'BACKGROUND_COLOR'을 정의하여 사용자 정의 배경색을 지정할 수있는 것으로 보입니다. 기본 CSS 규칙을 사용자 정의 WP 상수를 통해 설정해야한다는 것이 이상합니다.
Gregory

1
마지막 코멘트 칩. 이 질문은 너무 현지화 되지 않았습니다 . 많은 테마는 사용 가능한 모든 후크를 사용하여 스타일을 큐에 넣거나 인쇄합니다. Child 테마 개발자는 해당 스타일을 반드시 비활성화하지 않고 해당 스타일을 재정의하는 방법을 알아야합니다. 건배.
Gregory

내가 가진 문제는 child_theme_enqueue_style이 더 높은 우선 순위로 자식 스타일을로드하고 wp_head 아래로 내려 가면서 자식 스타일 시트를 복제한다는 것입니다. Wordpress는 자발적으로 자식 스타일 시트를 정상적인 우선 순위로로드 한 다음 다시로드합니다. 새로운 우선 순위로 더 내려갑니다. 다른 모든 스타일 시트를 재정의 한 결과를 달성하는 동안 페이지에 중복 스타일 시트가 작성됩니다.
php-b-grader

2

내 스타일이 캐스케이드에서 마지막으로 말한 것을 보장하는 유일한 방법은 wp_head 훅을 통해 <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가 켜진 상태로 통지를 던집니다).


@ Chip의 대답은 내 것보다 낫고 Oenology 주제를 논의하기 위해 아마도 더 자격이 있습니다.
mrwweb

아니요, 당신의 대답을 남길 것입니다. 정확하고 질문의 특정 부분을 다룹니다.
Chip Bennett
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.