답변:
예, 아니오
다른 자식 테마를 부모로 지정하여 자식 테마를 만들면 WordPress에서이를 사용하려고 시도합니다.
하나
핵심 개발자가 이것이 바람직하지 않은 행동이라고 명시 적으로 언급했으며 문제가 손자 테마를 지원하기 위해 노력하지 않을 것이라는 점은 말할 것도 없습니다.
예를 들어, WP API는 스타일 시트와 템플릿 URL / 디렉토리를 구별합니다. 여기서 스타일 시트는 항상 활성 테마를 참조하고 템플리트는 상위 테마를 참조하지만 조부모 테마가 포함 된 get_template_directory_uri
경우 부모 또는 조부모를 참조합니까? 많은 API 호출이 이제 모호해졌으며, 다른 사람들은 핵심 코드를 포함하여 다른 행동을 기대할 것입니다. 당신은 또한로드해야합니다 것 functions.php
부모 또는 조부모 중 하나, 그리고 확인이 올바른 순서로 이루어집니다 확인하십시오.
또한 매우 나쁜 습관으로 간주됩니다. 손자 테마가 필요한 경우 접근 방식이 잘못 설정되어 물러서서 다시 평가해야합니다.
나는 당신이 손자 테마의 개념을 피할 것을 권합니다. 더 많은 문제로 이어질 것입니다. 대신 하위 테마에서 더 많은 후크 필터 동작 및 모듈화를 통해 하위 테마 공유 구성 요소를 동일하게 유지하고 분기 / 포크를 약간 어렵게 할 수 있습니다. 공통 요소를 svn external / git 서브 모듈로 이동하십시오.
또한 자녀 테마를 기본으로 사용하고 복사본으로 작업하려는 의도가있는 부모가 아닌 자식 / 재정의 대신 포크하는 _s 모델이 있습니다.
아래 설명 된 방법, 일반적인 "손자"테마를 완전히 테스트하지는 않았지만 template_include 필터 의 기능을 제공했습니다 .
/*
Plugin Name: Grandchild Themes
Plugin URI: http://www.who-cares.com/
Description: A concept for Grandchild themes Plugin
Author: See Plugin URI
Version: 0.0.0.0.1-Alpha
*/
add_action('wp_head', 'grnd_chld_add_headers', 0);
add_action('init', 'grnd_chld_add_css');
// Load template if exists.
function grandchild_template_include( $template ) {
if ( file_exists( untrailingslashit( plugin_dir_path( __FILE__ ) ) . '/grnd_chld_templates/' . basename( $template ) ) )
$template = untrailingslashit( plugin_dir_path( __FILE__ ) ) . '/grnd_chld_templates/' . basename( $template );
return $template;
}
// This is the actual filter that we want .
add_filter( 'template_include', 'grandchild_template_include', 11 );
function grnd_chld_add_headers () {
wp_enqueue_style('my_grandchild_style');
}
function grnd_chld_add_css() {
$stamp = @filemtime(plugin_dir_path(__FILE__).'/style.css'); // easy versioning
wp_register_style ('my_grandchild_style', plugins_url('style.css', __FILE__).'', array(), $stamp);
}
// From here , what you got is like a normal functions.php.
비슷한 방식으로 예를 들어 archive_template 과 같은 더 구체적인 필터를 사용해 볼 수도 있습니다.
add_filter ('archive_template', create_function ('', 'return plugin_dir_path(__FILE__)."archive.php";'));
말하고 행한 모든 것이 최선의 방법인지 잘 모르겠습니다.