자식 테마의 테마 설정 유지


10

내 고객은 테마 옵션의 많은 설정으로 Karma 테마를 사용합니다. 테마 업데이트로 인해 CSS 및 PHP 추가 사항을 자식 테마로 유지해야합니다. 그러나 모양> 테마에서 자식 테마를 선택하면 기본 테마 설정이 모두 사라집니다.

기본 테마 설정을 유지하는 방법이 있습니까?


"사라졌다"는 무슨 뜻입니까? 부모 테마로 다시 전환 할 수 있고 설정이 있으면 사라지지 않습니다.
Mark Kaplun

대시 보드와 웹 사이트에서 사라졌습니다. 그들은 여전히 ​​데이터베이스 어딘가에 존재하지만 그것은 내 문제와 관련이 없습니다.
drake035

그래서 당신의 문제는 무엇입니까? "주 테마 설정을 유지하는 방법이 있습니까?" 그들은 여전히 ​​DB에 있기 때문에 보존됩니다
Mark Kaplun

자식 테마에 "보존 됨"이 있음을 의미합니다. 부모에서 자식 테마로 전환 할 때 자식 설정이 부모 설정과 동일하기를 원합니다.
drake035

그런 다음 복사하십시오. 그래도 해결하려는 문제가 무엇인지 정확히 알지 못합니다. 당신이 인생을 복잡하게하려고하는 것처럼 들리거나, 어린이 테마를 수행하는 접근 방식이 잘못되어 부모 테마를 수정하는 것이 좋습니다 (또는 부모 테마가 어린이 테마에 사용하기에 적합하지 않을 수 있음)
Mark Kaplun

답변:


11

이러한 테마 설정이 데이터베이스에 배열로 저장되는 방식 때문에 phpmyadmin 또는 유사한 전략으로 복사하여 붙여 넣기 만하면 복사가 어려울 수 있습니다.

WP CLI 옵션 명령은 여기에 당신의 친구입니다. WP CLI를 아직 사용하지 않은 경우 확인하십시오! 상점 첫 화면 테마의 설정을 storefront-sqcdy-child라는 테마로 복사 한 방법은 다음과 같습니다.

# save the existing theme settings in json format in a temporary text file
wp option get theme_mods_storefront --format=json > theme_mods_storefront.txt

# load the saved settings into the child theme option record in the database
wp option update theme_mods_storefront-sqcdy-child --format=json < theme_mods_storefront.txt

# cleanup the temp file
rm -f theme_mods_storefront.txt

두 번째 줄로 파이프도 사용해야합니다. wp 옵션 업데이트 theme_mods_storefront-sqcdy-child --format = json <theme_mods_storefront.txt
Gregor

네, 더 표준적인 방법이라고 생각합니다.
squarecandy

안녕하세요 squarecandy, 당신은 "그냥 복사하여 붙여 넣기로 복사하기 어려울 수 있습니다"라고 말했지만, 수행하는 작업은 나에게 동일합니다. 내가 잘못?
Marco Panichi

@MarcoPanichi-WP CLI는 데이터를 올바른 방식으로 직렬화 해제 / 재 직렬화하지 않는 멋진 기능을 제공하기 때문에 확실히 다릅니다. MySQL 명령 또는 phpmyadmin을 사용하여 값을 복사하고 데이터베이스에서 직접 변경을 시도하면 문제가 발생할 수 있습니다.
squarecandy

1
직렬화 된 값을 복사하여 100 % 작동 할 것으로 예상되는 이유는 wpengine.com/support/wordpress-serialized-data- "잠재적 충돌"섹션을 참조하십시오 . WP CLI는이 모든 것을 처리합니다.
squarecandy

6

Wordpress 테마 수정 사항은 wp_options데이터베이스 테이블의 theme_mods_{themename}필드에 저장됩니다 . 하위 테마 이름을 사용하여 복사하고 이름을 바꿀 수 있습니다.


1
부모 테마가 업데이트되고 새로운 옵션이 추가되면 어떻게해야합니까?
Mark Kaplun

1
더 나은 옵션 @MarkKaplun은 무엇입니까? 나는 이것이 사용자가 요구하는 문제를 해결한다고 생각한다
Eoin

1
@Eoin 어린이 테마에 대해 더 많은 질문을할수록, 그 한계를 덜 좋아합니다. 부모 테마의 사소한 변경이없는 경우 자식 테마 코드를 재평가해야합니다. CSS 만 있으면 문제가 거의 없지만 재평가가 필요합니다. OP는 여기에서 각 업그레이드마다 상위 테마와 옵션을 동기화해야합니다 (빈 값이 아닌 새 옵션이 추가 된 경우). 나는 자식 테마를 사용하는 것을 반대하고 대신 git을 사용하여 "부모"를 분기하고 업데이트가있을 때 병합합니다.
Mark Kaplun

자식 테마의 이름을 사용하여 이름을 바꾸면 어떤 특정 이름을 의미합니까? 하위 테마 이름을 어디에서 얻을 수 있는지 이해할 수 없습니다.

@fuddin 테마 이름은 하위 테마의 폴더 이름입니다. 예를 들어, 상위 테마 설정은 option_name 'theme_mods_parent-theme-name'으로 식별됩니다. 하위 테마 설정은 option_name 'theme_mods_parent-theme-name-child'로 식별 할 수 있습니다. 이를 명확하게보기 위해 데이터베이스에서 선택을 수행 할 수 있습니다.SELECT * FROM wp_options WHERE option_name LIKE "theme_mods_%"
Marco Panichi

1

나는 단순히 데이터베이스의 옵션을 복사하여 해결했습니다 .

단계별 절차 는 다음과 같습니다 .

  1. phpMyAdmin에 로그인하고 웹 사이트의 데이터베이스를 선택하십시오
  2. 데이터베이스 백업
  3. 상황을 명확하게 보려면이 쿼리를 실행하십시오. SELECT * FROM wp_options WHERE option_name LIKE "theme_mods_%"; 이 지침은 지금까지 웹 사이트에서 활성화 한 모든 테마에 대한 행을 반환합니다.
  4. option_name = theme_mods_parent-theme-name으로 식별되는 상위 테마 설정 행을 수정하십시오.
  5. 여기서 option_value 필드에는 모든 상위 테마 설정이 직렬화 된 양식으로 있습니다. 그들을 복사; 직렬화 도구 를 사용하여 인간 친화적 인 형식으로 내용을 볼 수 있습니다.
  6. 포인트 3으로 돌아와서 이제 하위 테마 설정의 행을 수정하십시오.
  7. option_value 필드에 복사 한 설정을 붙여 넣습니다. 저장

0

테마를 활성화하고 전환 할 때 기본 테마 설정을 저장하기 위해 Genesis 하위 테마에 포함 된 것과 같은 작업을 수행 할 수 있습니다.

//* Theme Setting Defaults
add_filter( 'genesis_theme_settings_defaults', 'child_theme_defaults' );
function child_theme_defaults( $defaults ) {

    $defaults['blog_cat_num']              = 6;
    $defaults['content_archive']           = 'full';
    $defaults['content_archive_limit']     = 150;
    $defaults['content_archive_thumbnail'] = 0;
    $defaults['image_alignment']           = '';
    $defaults['image_size']                = 'entry-image';
    $defaults['posts_nav']                 = 'prev-next';
    $defaults['site_layout']               = 'full-width-content';

    return $defaults;

}

//* Theme Setup
add_action( 'after_switch_theme', 'child_theme_setting_defaults' );
function child_theme_setting_defaults() {

    if( function_exists( 'genesis_update_settings' ) ) {

        genesis_update_settings( array(
            'blog_cat_num'              => 6,
            'content_archive'           => 'full',
            'content_archive_limit'     => 150,
            'content_archive_thumbnail' => 0,
            'image_alignment'           => '',
            'image_size'                => 'entry-image',
            'posts_nav'                 => 'prev-next',
            'site_layout'               => 'full-width-content',
        ) );

    } else {

        _genesis_update_settings( array(
            'blog_cat_num'              => 6,
            'content_archive'           => 'full',
            'content_archive_limit'     => 150,
            'content_archive_thumbnail' => 0,
            'image_alignment'           => '',
            'image_size'                => 'entry-image',
            'posts_nav'                 => 'prev-next',
            'site_layout'               => 'full-width-content',
        ) );

테마 기능을 사용하려면이 코드를 수정해야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.